Revision 47606 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.sqlite/org.gvsig.sqlite.provider/src/main/java/org/gvsig/sqlite/dal/SQLiteExplorer.java
SQLiteExplorer.java | ||
---|---|---|
1 | 1 |
package org.gvsig.sqlite.dal; |
2 | 2 |
|
3 |
import java.io.File; |
|
4 |
import java.sql.Connection; |
|
5 |
import java.sql.SQLException; |
|
6 | 3 |
import java.sql.Statement; |
7 | 4 |
import java.util.ArrayList; |
8 | 5 |
import java.util.List; |
9 |
import java.util.logging.Level; |
|
10 |
import java.util.logging.Logger; |
|
11 |
import org.apache.commons.lang3.StringUtils; |
|
6 |
import java.util.Objects; |
|
12 | 7 |
import org.cresques.cts.IProjection; |
13 | 8 |
import org.gvsig.fmap.dal.DALLocator; |
14 | 9 |
import org.gvsig.fmap.dal.DataManager; |
... | ... | |
20 | 15 |
import org.gvsig.fmap.dal.exception.RemoveException; |
21 | 16 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
22 | 17 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
23 |
import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
|
|
18 |
import org.gvsig.fmap.dal.feature.spi.LocalTransaction;
|
|
24 | 19 |
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices; |
25 | 20 |
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters; |
26 | 21 |
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters; |
27 | 22 |
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters; |
28 |
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCSQLException; |
|
29 | 23 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection; |
30 | 24 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper; |
31 | 25 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils; |
... | ... | |
33 | 27 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCServerExplorerBase; |
34 | 28 |
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation; |
35 | 29 |
import org.gvsig.fmap.geom.DataTypes; |
36 |
import org.gvsig.sqlite.dal.geopackage.GeopackageGeometryColumns; |
|
37 | 30 |
import org.gvsig.sqlite.dal.geopackage.GeopackageSpatialRefSys; |
38 | 31 |
import org.gvsig.sqlite.dal.geopackage.GeopackageUtils; |
39 | 32 |
import org.gvsig.sqlite.dal.geopackage.index.GeopackageIndexRTree; |
40 |
import org.gvsig.sqlite.dal.operations.SQLiteOperationsFactory; |
|
41 | 33 |
import org.gvsig.tools.resourcesstorage.ResourcesStorage; |
42 | 34 |
|
43 | 35 |
/** |
... | ... | |
79 | 71 |
|
80 | 72 |
@Override |
81 | 73 |
public boolean add(String providerName, NewDataStoreParameters theParams, boolean overwrite) throws DataException { |
82 |
EditableFeatureType feat = ((JDBCNewStoreParameters)theParams).getDefaultFeatureType(); |
|
83 |
if(feat != null){ |
|
84 |
FeatureAttributeDescriptor geomAttr = feat.getDefaultGeometryAttribute(); |
|
85 |
if(geomAttr != null){ |
|
86 |
IProjection proj = geomAttr.getSRS(); |
|
87 |
if(proj != null){ |
|
88 |
GeopackageSpatialRefSys refSys = GeopackageUtils.getSpatialRefSys(proj); |
|
89 |
refSys.save(this.getHelper()); |
|
74 |
LocalTransaction trans = new LocalTransaction(null, this.getTransaction()); |
|
75 |
try { |
|
76 |
trans.begin(); |
|
77 |
trans.add(this); |
|
78 |
EditableFeatureType feat = ((JDBCNewStoreParameters) theParams).getDefaultFeatureType(); |
|
79 |
if (feat != null) { |
|
80 |
FeatureAttributeDescriptor geomAttr = feat.getDefaultGeometryAttribute(); |
|
81 |
if (geomAttr != null) { |
|
82 |
IProjection proj = geomAttr.getSRS(); |
|
83 |
if (proj != null) { |
|
84 |
GeopackageSpatialRefSys refSys = GeopackageUtils.getSpatialRefSys(proj); |
|
85 |
refSys.save(this.getHelper()); |
|
86 |
} |
|
87 |
if (geomAttr.isIndexed()) { |
|
88 |
GeopackageIndexRTree index = new GeopackageIndexRTree(); |
|
89 |
index.setHasIndex(geomAttr, true); |
|
90 |
} |
|
90 | 91 |
} |
91 | 92 |
} |
93 |
boolean x = super.add(providerName, theParams, overwrite); |
|
94 |
trans.commit(); |
|
95 |
return x; |
|
96 |
} catch (Exception ex) { |
|
97 |
trans.abortQuietly(); |
|
98 |
throw ex; |
|
99 |
} finally { |
|
100 |
trans.closeQuietly(); |
|
92 | 101 |
} |
93 |
return super.add(providerName, theParams, overwrite); |
|
94 | 102 |
} |
95 | 103 |
|
96 | 104 |
@Override |
97 | 105 |
public void remove(DataStoreParameters theParams) throws RemoveException { |
106 |
LocalTransaction trans = new LocalTransaction(null, this.getTransaction()); |
|
107 |
try { |
|
108 |
trans.begin(); |
|
109 |
trans.add(this); |
|
110 |
DataManager dataManager = DALLocator.getDataManager(); |
|
111 |
EditableFeatureType type = dataManager.createFeatureType(); |
|
98 | 112 |
|
99 |
DataManager dataManager = DALLocator.getDataManager(); |
|
100 |
EditableFeatureType type = dataManager.createFeatureType(); |
|
113 |
OperationsFactory operations = getHelper().getOperations(); |
|
114 |
OperationsFactory.TableReference table = this.getHelper().getOperations().createTableReference(((JDBCStoreParameters) theParams)); |
|
115 |
FetchFeatureTypeOperation operation = operations.createFetchFeatureType(type, table, null, null, null); |
|
116 |
operation.perform(); |
|
101 | 117 |
|
102 |
OperationsFactory operations = getHelper().getOperations(); |
|
103 |
OperationsFactory.TableReference table = this.getHelper().getOperations().createTableReference(((JDBCStoreParameters) theParams)); |
|
104 |
FetchFeatureTypeOperation operation = operations.createFetchFeatureType(type, table, null, null, null); |
|
105 |
operation.perform(); |
|
106 |
|
|
107 |
List<String> sqls = new ArrayList<>(); |
|
108 |
for (FeatureAttributeDescriptor attr : type) { |
|
109 |
if (attr.getDataType().getType() == DataTypes.GEOMETRY) { |
|
110 |
GeopackageIndexRTree index = new GeopackageIndexRTree(); |
|
111 |
sqls.addAll(index.getRemoveIndexSQL(table.getTable(), attr.getName())); |
|
118 |
List<String> sqls = new ArrayList<>(); |
|
119 |
for (FeatureAttributeDescriptor attr : type) { |
|
120 |
if (attr.getDataType().getType() == DataTypes.GEOMETRY) { |
|
121 |
GeopackageIndexRTree index = new GeopackageIndexRTree(); |
|
122 |
sqls.addAll(index.getRemoveIndexSQL(table.getTable(), attr.getName())); |
|
123 |
} |
|
112 | 124 |
} |
113 |
} |
|
114 |
JDBCConnection conn = null; |
|
115 |
Statement st = null; |
|
116 |
try { |
|
117 |
conn = this.getHelper().getConnection(); |
|
118 |
st = conn.createStatement(); |
|
119 |
for (String sql : sqls) { |
|
120 |
JDBCUtils.execute(st, sql); |
|
125 |
JDBCConnection conn = null; |
|
126 |
Statement st = null; |
|
127 |
try { |
|
128 |
conn = this.getHelper().getConnection(); |
|
129 |
st = conn.createStatement(); |
|
130 |
for (String sql : sqls) { |
|
131 |
JDBCUtils.execute(st, sql); |
|
132 |
} |
|
133 |
} catch (Exception ex) { |
|
134 |
throw new RemoveException(table.getTable(), ex); |
|
135 |
} finally { |
|
136 |
JDBCUtils.closeQuietly(st); |
|
137 |
// JDBCUtils.closeQuietly(conn.get()); |
|
121 | 138 |
} |
139 |
super.remove(theParams); //To change body of generated methods, choose Tools | Templates. |
|
140 |
trans.commit(); |
|
141 |
|
|
142 |
} catch (RemoveException ex) { |
|
143 |
trans.abortQuietly(); |
|
144 |
throw ex; |
|
122 | 145 |
} catch (Exception ex) { |
123 |
throw new RemoveException(table.getTable(), ex); |
|
146 |
trans.abortQuietly(); |
|
147 |
throw new RemoveException("Can't remove "+Objects.toString(theParams), ex); |
|
124 | 148 |
} finally { |
125 |
JDBCUtils.closeQuietly(st); |
|
126 |
// JDBCUtils.closeQuietly(conn.get()); |
|
149 |
trans.closeQuietly(); |
|
127 | 150 |
} |
128 |
super.remove(theParams); //To change body of generated methods, choose Tools | Templates. |
|
151 |
|
|
129 | 152 |
} |
130 | 153 |
|
131 | 154 |
|
Also available in: Unified diff