Revision 19738

View differences:

trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/DataSourceDBDriverJDBCParameters.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc;
2

  
3
import java.sql.Connection;
4

  
5
import org.gvsig.data.IDataSourceParameters;
6

  
7
public abstract class DataSourceDBDriverJDBCParameters implements
8
		IDataSourceParameters {
9

  
10
	protected String url = null;
11
	protected String user = null;
12
	protected String passw = null;
13

  
14
	public String getPassw() {
15
		return passw;
16
	}
17
	public void setPassw(String passw) {
18
		this.passw = passw;
19
	}
20
	public String getUrl() {
21
		return url;
22
	}
23
	public void setUrl(String url) {
24
		this.url = url;
25
	}
26
	public String getUser() {
27
		return user;
28
	}
29
	public void setUser(String user) {
30
		this.user = user;
31
	}
32
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/DBFeatureType.java
2 2

  
3 3
import java.sql.Connection;
4 4

  
5
import org.gvsig.data.spatialprovisional.IExtent;
6 5
import org.gvsig.data.vectorial.DefaultFeatureType;
7 6
import org.gvsig.data.vectorial.IFeatureType;
8 7

  
8
import com.iver.cit.gvsig.fmap.core.extent.IExtent;
9

  
9 10
public class DBFeatureType extends DefaultFeatureType {
10 11
	private int dimension=2;
11 12
	private String tableID;
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/DBStoreJDBCParameters.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc;
2

  
3
public abstract class DBStoreJDBCParameters extends
4
		DataStoreDBParameters {
5

  
6
	public abstract String getUrl();
7

  
8

  
9
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2DriverParameters.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2

  
3
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBDriverJDBCParameters;
4
import org.gvsig.data.spatialprovisional.IExtent;
5

  
6
public class H2DriverParameters extends DBDriverJDBCParameters {
7

  
8
	private IExtent workingArea=null;
9
	private String SRISD = null;
10
	private String geometryField=null;
11

  
12

  
13
	public String getGeometryField() {
14
		return geometryField;
15
	}
16

  
17
	public void setGeometryField(String geometryColumn) {
18
		this.geometryField = geometryColumn;
19
	}
20

  
21
	public H2DriverParameters(){
22
		super();
23
	}
24

  
25
	public String getUrl() {
26
		return H2DriverUtils.getJDBCUrl(this.getHost(), this.getDb());
27
	}
28

  
29
	public String getDataStoreName() {
30
		return H2Driver.DRIVER_NAME;
31
	}
32

  
33
	public String tableID(){
34
		if (this.getSchema() == null || this.getSchema() == "")
35
			return this.getTableName();
36
		return this.getSchema()+"."+this.getTableName();
37
	}
38

  
39
	public String getSRISD() {
40
		return SRISD;
41
	}
42

  
43
	public void setSRISD(String srisd) {
44
		SRISD = srisd;
45
	}
46

  
47
	public IExtent getWorkingArea() {
48
		return workingArea;
49
	}
50

  
51
	public void setWorkingArea(IExtent workingArea) {
52
		this.workingArea = workingArea;
53
	}
54
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2Driver.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2

  
3
import java.sql.Connection;
4
import java.sql.ResultSet;
5
import java.sql.ResultSetMetaData;
6
import java.sql.Statement;
7
import java.util.Iterator;
8
import java.util.Locale;
9

  
10
import org.gvsig.data.datastores.vectorial.driver.AbstractDriver;
11
import org.gvsig.data.datastores.vectorial.driver.IDriverParameters;
12
import org.gvsig.data.datastores.vectorial.driver.IFeaturesReader;
13
import org.gvsig.data.datastores.vectorial.driver.IFeaturesWriter;
14
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBFeatureType;
15
import org.gvsig.data.datastores.vectorial.driver.jdbc.exception.SQLException;
16
import org.gvsig.data.exception.CloseException;
17
import org.gvsig.data.exception.InitializeException;
18
import org.gvsig.data.exception.OpenException;
19
import org.gvsig.data.exception.ReadException;
20
import org.gvsig.data.spatialprovisional.IExtent;
21
import org.gvsig.data.vectorial.IFeature;
22
import org.gvsig.data.vectorial.IFeatureAttributeDescriptor;
23
import org.gvsig.data.vectorial.IFeatureCollection;
24
import org.gvsig.data.vectorial.IFeatureID;
25
import org.gvsig.data.vectorial.IFeatureType;
26
import org.gvsig.data.vectorial.expansionadapter.FeatureManager;
27
import org.gvsig.metadata.IMetadata;
28
import org.gvsig.metadata.IMetadataManager;
29
import org.gvsig.metadata.MetadataManager;
30

  
31

  
32
public class H2Driver  extends AbstractDriver {
33
	public static final String DRIVER_NAME = "h2";
34
	protected static Locale ukLocale = new Locale("en", "UK"); // English, UK version
35
    private DBFeatureType featureType;
36
	protected IMetadata metadata;
37
	private Connection connection = null;
38
	private String sqlSelectPart; //sqlOrig
39
	private String baseWhereClause = null;
40
	private String tableId;
41
	private String baseOrder = null;
42

  
43
	private String sql;
44

  
45
	private ResultSetMetaData rsMetaData;
46
	private int numReg=-1;
47

  
48
	H2DriverParameters getParametersH2(){
49
		return (H2DriverParameters)this.parameters;
50
	}
51

  
52
	Connection getConnection(){
53
		// FIXME: OJO REsource manager
54
		return this.connection;
55

  
56
	}
57

  
58
	public void init(IDriverParameters parameters) throws InitializeException {
59
		super.init(parameters);
60

  
61

  
62

  
63
		this.initConnection();
64
		this.initFeatureType();
65
		this.initSqlProperties();
66

  
67

  
68

  
69

  
70

  
71
			//writer.setCreateTable(false);
72
			//writer.setWriteAll(false);
73
			//writer.initialize(lyrDef);
74

  
75
	}
76
	private void initConnection() throws InitializeException{
77
		H2DriverParameters dParams = this.getParametersH2();
78

  
79
		String dburl = dParams.getUrl();
80
		String dbuser = dParams.getUser();
81
		String dbpass = dParams.getPassw();
82

  
83
		this.connection = H2DriverUtils.getConnection(dburl, dbuser, dbpass);
84

  
85
	}
86

  
87
	private void initSqlProperties() throws InitializeException{
88
		H2DriverParameters dParams = this.getParametersH2();
89
		sqlSelectPart = "SELECT " + dParams.getFields() +" FROM "+ dParams.tableID();
90

  
91
		baseWhereClause = dParams.getBaseFilter();
92

  
93
		if (dParams.getWorkingArea() != null){
94
			String waWhere = getWorkingAreaWhere(dParams.getWorkingArea(), dParams.getSRISD());
95
			if (waWhere != null){
96
				baseWhereClause = "(("+baseWhereClause+") and "+waWhere +")";
97
			}
98

  
99
		}
100

  
101
		this.baseOrder = dParams.getBaseOrder();
102

  
103
	}
104

  
105
	private void initFeatureType() throws InitializeException{
106
		H2DriverParameters dParams = this.getParametersH2();
107
		this.tableId = dParams.tableID();
108
		try {
109
			this.featureType = H2DriverUtils.getFeatureType(this.connection, dParams);
110
		} catch (ReadException e) {
111
			throw new InitializeException("H2Driver",e);
112
		}
113
		if (dParams.getFieldId() == null || dParams.getFieldId() == ""){
114
			throw new InitializeException(
115
					"H2Driver",
116
					new Exception("Field Id not set"));
117

  
118
		} else if (this.featureType.getFieldIndex(dParams.getFieldId()) < 0) {
119
			throw new InitializeException(
120
					"H2Driver",
121
					new Exception("Field id '"+ dParams.getFieldId() +"' not Found"));
122

  
123

  
124
		}
125
		this.featureType.setFieldId(dParams.getFieldId());
126

  
127
		if (dParams.getGeometryField() != null && dParams.getGeometryField() != ""){
128
			if (this.featureType.getFieldIndex(dParams.getGeometryField())< 0){
129
				// FIXME: crear una nueva excepcion??
130
				throw new InitializeException(
131
						"H2Driver",
132
						new Exception("Geometry Field '"+ dParams.getGeometryField() +"' not Found"));
133

  
134
			}
135

  
136
			this.featureType.setDefaultGeometry(dParams.getGeometryField());
137
		}
138

  
139
	}
140

  
141
	public void open() throws OpenException {
142
		// FIXME: Resource Manager
143
	}
144

  
145
	public void close() throws CloseException {
146
		// FIXME: Resource Manager
147
		try {
148
			connection.close();
149
		} catch (java.sql.SQLException e) {
150
			throw new CloseException("H2",e);
151
		}
152
	}
153

  
154
	public void dispose() {
155
		// TODO Apéndice de método generado automáticamente
156

  
157
	}
158

  
159
	public IFeaturesWriter getFeaturesWriter() {
160
		IFeaturesWriter writer = new H2FeaturesWriter();
161
//		writer.init(this);
162
		return writer;
163
	}
164

  
165

  
166
	public IFeaturesReader getFeatutesReader() {
167
		IFeaturesReader reader = new H2FeaturesReader();
168
		reader.init(this);
169
		return reader;
170
	}
171

  
172
	public IFeature getFeatureByID(IFeatureID id) throws ReadException {
173
		return getFeatureByID(featureType,((H2FeatureID)id).getKey());
174
	}
175

  
176
	public IFeatureType getFeatureType() {
177
		return featureType;
178
	}
179

  
180
	public IFeatureCollection getDataCollection(FeatureManager featureManager,IFeatureType type, String filter, String order) throws ReadException {
181
		if (type==null){
182
			type=getFeatureType();
183
		}
184
		return getFeatutesReader().getFeatures(featureManager,type,filter,order);
185
	}
186

  
187
	public String getName() {
188
		return DRIVER_NAME;
189
	}
190

  
191
	public boolean isEditable() {
192
		return true;
193
	}
194

  
195
	public boolean canAlterFeatureType() {
196
		return true;
197
	}
198
	public long getFeatureCount() throws ReadException{
199
		if (numReg == -1)
200
    	{
201
			String sql = "";
202
    	    try
203
            {
204
    	        Statement s = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
205
    	        sql = "SELECT COUNT("+
206
    	        	this.featureType.getFieldId() +
207
    	        	") AS NUMREG FROM " +
208
    	        	this.tableId + " " + this.getBaseWhereClause();
209
	            ResultSet r = s.executeQuery(sql);
210
	            r.next();
211
	            numReg = r.getInt(1);
212
	            System.err.println("numReg = " + numReg);
213
            }
214
    	    catch (java.sql.SQLException e)
215
    	    {
216
    	        throw new SQLException(sql,"getFeatureCount",e);
217
    	    }
218
    	}
219

  
220
        return numReg;
221
	}
222

  
223
	public IMetadata getMetadata() {
224
		if (metadata==null){
225
			IMetadataManager manager=MetadataManager.getManager();
226
			metadata=manager.create(DRIVER_NAME);
227
			//TODO: Apadir los meteadatos
228
		}
229
		return metadata;
230
	}
231
	private String getWorkingAreaWhere(IExtent r, String strEPSG) {
232
		//TODO????
233
		if (r==null){
234
			return null;
235
		}
236
		return null;
237
	}
238

  
239
	 private String getWorkingAreaWhereOld(IExtent r, String strEPSG) {
240

  
241
//			double xMin = r.getMinX();
242
//			double yMin = r.getMinY();
243
//			double xMax = r.getMaxX();
244
//			double yMax = r.getMaxY();
245

  
246
			//SELECT GEOM, ID  FROM EJESLINSHP  WHERE  Intersects(envelope(createLineString(557393.5366216213, 4191291.9799999995, 867544.3433783785, 4519165.6899999995, SRID(GEOM))), GEOM)
247
			String SRID;
248
			try{
249
				//Si el strEPSG no es válido se lanzara la excepción NumberFormatException que obligará a que el SRID se calcule cada vez
250
				Integer.getInteger(strEPSG);
251
				SRID=strEPSG;
252
			}
253
			catch(NumberFormatException except){
254
				SRID="SRID("+this.featureType.getDefaultGeometry()+")";
255
			}
256
			String wktBox="Intersects(envelope(createLineString("+r.getMinX()+", "+r.getMinY()+", "+r.getMaxX()+", "+r.getMaxY()+", "+ SRID +")), "+this.featureType.getDefaultGeometry()+")";
257
			//String wktBox="Intersects(createEnvelope("+xMin+", "+yMin+", "+xMax+", "+yMax+", SRID("+this.geometryField+")), "+this.geometryField+")";
258

  
259
			//USAR UNA GEOM ENVELOPE
260
			//String wktBox="Intersects(envelope("+this.geometryField+"), "+this.geometryField+")";
261

  
262
			String sqlAux="";
263
			/*
264
			if(getWhereClause().equals("")){
265
				sqlAux="WHERE "+wktBox;
266
			}
267
			else if(getWhereClause().toUpperCase().trim().startsWith("WHERE")){
268
				sqlAux=getWhereClause()+" AND "+wktBox;
269
			}
270
			else{
271
				sqlAux="WHERE "+getWhereClause()+" AND "+wktBox;
272
			}
273
			*/
274
			return sqlAux;
275

  
276
		}
277

  
278

  
279
	public IFeature getFeatureByID(IFeatureType featureType2, Object featureKey) throws ReadException{
280
		ResultSet rs=null;
281
		try{
282
			this.open();
283
			Statement st=this.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
284
			String sql = this.getSqlSelectPart() + " WHERE "+ H2DriverUtils.getFliterForID(this.featureType, featureKey);
285
			rs=st.executeQuery(sql);
286
			if (rs.isLast()) {
287

  
288
				return null;
289
			}else{
290
				if(rs.next()){
291
					return H2DriverUtils.createFeature(this, rs, this.featureType);
292
				}
293

  
294
			}
295

  
296
		} catch (java.sql.SQLException e) {
297
			e.printStackTrace();
298
			throw new ReadException("H2Spatial Driver", e);
299
		} finally{
300
			if (rs != null)
301
				try {
302
					rs.close();
303
				} catch (java.sql.SQLException e) {
304
					// TODO ?????
305
					e.printStackTrace();
306
				}
307
		}
308
		return null;
309
	}
310

  
311
	public String getBaseWhereClause() {
312
		return baseWhereClause;
313
	}
314

  
315
	public String getSql() {
316
		return sql;
317
	}
318

  
319
	public String getSqlSelectPart() {
320
		return sqlSelectPart;
321
	}
322

  
323
	public String getBaseOrder() {
324
		// TODO Auto-generated method stub
325
		return this.baseOrder;
326
	}
327
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2DataSourceParameters.java
1 1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2 2

  
3
import java.sql.Connection;
3
import org.gvsig.data.datastores.vectorial.driver.jdbc.DataSourceDBDriverJDBCParametersOld;
4 4

  
5
import org.gvsig.data.datastores.vectorial.driver.jdbc.ConnectionJDBC;
6
import org.gvsig.data.datastores.vectorial.driver.jdbc.DataSourceDBDriverJDBCParameters;
5
public class H2DataSourceParameters extends DataSourceDBDriverJDBCParametersOld {
7 6

  
8
public class H2DataSourceParameters extends DataSourceDBDriverJDBCParameters {
9

  
10 7
	public String getDataSourceName() {
11 8
		return H2DataSource.DATASOURCE_NAME;
12 9
	}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2StoreParameters.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2

  
3
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBStoreJDBCParameters;
4
import org.gvsig.data.spatialprovisional.IExtent;
5

  
6
public class H2StoreParameters extends DBStoreJDBCParameters{
7

  
8
	public String getDataStoreName() {
9
		return H2Store.DATASTORE_NAME;
10
	}
11
	private IExtent workingArea=null;
12
	private String SRISD = null;
13
	private String geometryField=null;
14

  
15

  
16
	public String getGeometryField() {
17
		return geometryField;
18
	}
19

  
20
	public void setGeometryField(String geometryColumn) {
21
		this.geometryField = geometryColumn;
22
	}
23

  
24
	public String getUrl() {
25
		return H2DriverUtils.getJDBCUrl(this.getHost(), this.getDb());
26
	}
27

  
28
	public String tableID(){
29
		if (this.getSchema() == null || this.getSchema() == "")
30
			return this.getTableName();
31
		return this.getSchema()+"."+this.getTableName();
32
	}
33

  
34
	public String getSRISD() {
35
		return SRISD;
36
	}
37

  
38
	public void setSRISD(String srisd) {
39
		SRISD = srisd;
40
	}
41

  
42
	public IExtent getWorkingArea() {
43
		return workingArea;
44
	}
45

  
46
	public void setWorkingArea(IExtent workingArea) {
47
		this.workingArea = workingArea;
48
	}
49
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeaturesReader.java
1 1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2 2

  
3
import org.gvsig.data.datastores.vectorial.driver.IDriver;
4 3
import org.gvsig.data.datastores.vectorial.driver.IFeaturesReader;
5 4
import org.gvsig.data.exception.ReadException;
6 5
import org.gvsig.data.vectorial.IFeatureCollection;
6
import org.gvsig.data.vectorial.IFeatureStore;
7 7
import org.gvsig.data.vectorial.IFeatureType;
8 8
import org.gvsig.data.vectorial.expansionadapter.FeatureManager;
9 9

  
10 10
class H2FeaturesReader  implements IFeaturesReader {
11
	private H2Driver driver;
12
	public void init(IDriver driver) {
13
		this.driver=(H2Driver)driver;
11
	private H2Store store;
12
	public void init(IFeatureStore store) {
13
		this.store=(H2Store)store;
14 14
	}
15 15

  
16 16
	public IFeatureCollection getFeatures(FeatureManager featureManager, IFeatureType type, String filter, String order) throws ReadException {
17 17
		IFeatureCollection coll;
18 18
		if (featureManager == null){
19
			coll=new H2FeatureCollection(driver,type,filter,order);
19
			coll=new H2FeatureCollection(store,type,filter,order);
20 20
		}else{
21 21
			if ((order != null && order != "")){
22
				coll=new H2FeatureCollectionWithFeatureID(featureManager,driver,type,filter,order);
22
				coll=new H2FeatureCollectionWithFeatureID(featureManager,store,type,filter,order);
23 23
			} else{
24 24
				if (filter == null || filter == ""){
25
					coll=new H2FeatureCollectionEditing(featureManager,driver,type);
25
					coll=new H2FeatureCollectionEditing(featureManager,store,type);
26 26
				} else {
27
					coll=new H2FeatureCollectionEditingFiltered(featureManager,driver,type,filter);
27
					coll=new H2FeatureCollectionEditingFiltered(featureManager,store,type,filter);
28 28
				}
29 29
			}
30 30

  
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeatureCollection.java
26 26
	protected DBFeatureType featureType;
27 27
	protected String filter;
28 28
	protected String totalFilter;
29
	protected H2Driver driver;
29
	protected H2Store store;
30 30
	protected ResultSet rs;
31 31
	private String order;
32 32
	private int numReg=-1;
......
35 35
	private String totalOrder;
36 36
	private Connection connection;
37 37

  
38
	public H2FeatureCollection(H2Driver driver,IFeatureType type, String filter, String order) {
39
		this.driver=driver;
38
	public H2FeatureCollection(H2Store store,IFeatureType type, String filter, String order) {
39
		this.store=store;
40 40
		this.featureType=(DBFeatureType)type;
41 41
		this.filter=filter;
42 42
		this.order=order;
43 43
		this.calculateWhere();
44 44
		this.calculateOrder();
45 45

  
46
		this.sql = this.driver.getSqlSelectPart();
47
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ this.driver.getParametersH2().tableID();
46
		this.sql = this.store.getSqlSelectPart();
47
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ ((H2StoreParameters)this.store.getParameters()).tableID();
48 48
		if (!isStringEmpty(this.totalFilter)){
49 49
			this.sql= this.sql + " Where " + this.totalFilter;
50 50
			this.sqlCount= this.sqlCount + " Where " + this.totalFilter;
......
55 55
	}
56 56

  
57 57
	private ResultSet getNewResulset(String aSql) throws ReadException{
58
		this.driver.open();
58
		this.store.open();
59 59

  
60
		this.connection = this.driver.getConnection();
60
		this.connection = this.store.getConnection();
61 61

  
62 62
		try {
63 63
			Statement st = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
......
75 75
	}
76 76

  
77 77
	private void calculateWhere(){
78
		if (isStringEmpty(this.driver.getBaseWhereClause())){
78
		if (isStringEmpty(this.store.getBaseWhereClause())){
79 79
			this.totalFilter = this.filter;
80 80
		} else {
81
			this.totalFilter = "(" + this.driver.getBaseWhereClause() + ") and " +this.filter;
81
			this.totalFilter = "(" + this.store.getBaseWhereClause() + ") and " +this.filter;
82 82
		}
83 83
	}
84 84

  
85 85
	private void calculateOrder(){
86
		if (isStringEmpty(this.driver.getBaseOrder())){
86
		if (isStringEmpty(this.store.getBaseOrder())){
87 87
			this.totalOrder = this.order;
88 88
		} else {
89
			this.totalOrder = this.driver.getBaseOrder() + ", " +this.order;
89
			this.totalOrder = this.store.getBaseOrder() + ", " +this.order;
90 90
		}
91 91

  
92 92
	}
......
144 144
		} catch (ReadException e) {
145 145
			throw new RuntimeException(e);
146 146
		}
147
		H2Iterator dbfIter=new H2Iterator(this.driver,this.featureType,r);
147
		H2Iterator dbfIter=new H2Iterator(this.store,this.featureType,r);
148 148
		return dbfIter;
149 149
	}
150 150

  
......
206 206

  
207 207
	protected class H2Iterator implements Iterator{
208 208
		private ResultSet rs;
209
		private H2Driver driver;
209
		private H2Store store;
210 210
		private DBFeatureType featureType;
211 211

  
212
		public H2Iterator(H2Driver driver,DBFeatureType featureType ,ResultSet rs){
212
		public H2Iterator(H2Store store,DBFeatureType featureType ,ResultSet rs){
213 213
			this.rs = rs;
214
			this.driver = driver;
214
			this.store = store;
215 215
			this.featureType = featureType;
216 216
		}
217 217

  
......
240 240
				IFeature feature=null;
241 241
				try {
242 242
					if(rs.next()){
243
						feature = H2DriverUtils.createFeature(this.driver, this.rs, this.featureType);
243
						feature = H2DriverUtils.createFeature(this.store, this.rs, this.featureType);
244 244
					} else {
245 245
						rs.close();
246 246
						rs.getStatement().close();
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeatureID.java
7 7

  
8 8
public class H2FeatureID implements IFeatureID{
9 9
	private Object featureKey;
10
	private H2Driver driver;
10
	private H2Store store;
11 11

  
12
	public H2FeatureID(H2Driver driver,String featureIndex) {
12
	public H2FeatureID(H2Store store,String featureIndex) {
13 13
		this.featureKey=featureIndex;
14
		this.driver=driver;
14
		this.store=store;
15 15
	}
16 16
	public Object getKey(){
17 17
		return featureKey;
18 18
	}
19 19
	public IFeature getFeature(IFeatureType featureType) throws ReadException {
20
		return driver.getFeatureByID(featureType, featureKey);
20
		return store.getFeatureByID(featureType, featureKey);
21 21
	}
22 22
	public boolean equals(Object obj) {
23 23
		if (obj instanceof H2FeatureID)
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2DataSource.java
1 1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2 2

  
3 3
import java.sql.Connection;
4
import java.sql.DriverManager;
5
import java.sql.SQLException;
6 4

  
7 5
import org.gvsig.data.DataSourceManager;
8 6
import org.gvsig.data.IDataSourceParameters;
9 7
import org.gvsig.data.IDataStore;
10 8
import org.gvsig.data.IDataStoreParameters;
11 9
import org.gvsig.data.datastores.vectorial.driver.IDriverStoreParameters;
12
import org.gvsig.data.datastores.vectorial.driver.dbf.DBFDataSourceParameters;
13
import org.gvsig.data.datastores.vectorial.driver.dxf.DXFDriverParameters;
14
import org.gvsig.data.datastores.vectorial.driver.dxf.DXFFeaturesWriter;
15 10
import org.gvsig.data.datastores.vectorial.driver.jdbc.AbstractDataSourceDBDriverJDBC;
16
import org.gvsig.data.datastores.vectorial.driver.jdbc.exception.JDBCDriverNotFoundException;
17 11
import org.gvsig.data.exception.InitializeException;
18 12
import org.gvsig.data.exception.InitializeWriterException;
19
import org.gvsig.data.exception.OpenException;
20 13
import org.gvsig.data.exception.ReadException;
21 14
import org.gvsig.data.vectorial.IFeatureType;
22 15

  
......
69 62
	}
70 63

  
71 64
	public IDataStore createNewDataStore(IDataStoreParameters dsp, IFeatureType featureType) throws InitializeException, InitializeWriterException {
72
		H2FeaturesWriter.create((H2DriverParameters)((IDriverStoreParameters)dsp).getDriverParameters(),featureType);
65
		H2FeaturesWriter.create((H2StoreParameters)dsp,featureType);
73 66
		DataSourceManager dsm=DataSourceManager.getManager();
74 67
		return dsm.createDataStore(dsp);
75 68
	}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeatureCollectionEditingFiltered.java
26 26
	protected DBFeatureType featureType;
27 27
	protected String totalFilter;
28 28
	protected String filter;
29
	protected H2Driver driver;
29
	protected H2Store store;
30 30
	protected ResultSet rs;
31 31
	private int numReg=-1;
32 32
	private String sql;
......
37 37
	private FeatureFilterParser parser;
38 38

  
39 39

  
40
	public H2FeatureCollectionEditingFiltered(FeatureManager fm,H2Driver driver,IFeatureType type,String filter) {
40
	public H2FeatureCollectionEditingFiltered(FeatureManager fm,H2Store store,IFeatureType type,String filter) {
41 41
		this.featureManager=fm;
42
		this.driver=driver;
42
		this.store=store;
43 43
		this.featureType=(DBFeatureType)type;
44 44

  
45 45
		this.filter = filter;
46 46

  
47 47
		this.calculateWhere();
48
		this.totalOrder = driver.getBaseOrder();
48
		this.totalOrder = store.getBaseOrder();
49 49

  
50
		this.sql = this.driver.getSqlSelectPart();
51
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ this.driver.getParametersH2().tableID();
50
		this.sql = this.store.getSqlSelectPart();
51
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ ((H2StoreParameters)this.store.getParameters()).tableID();
52 52
		if (!isStringEmpty(this.totalFilter)){
53 53
			this.sql= this.sql + " Where " + this.totalFilter;
54 54
			this.sqlCount= this.sqlCount + " Where " + this.totalFilter;
......
63 63
	}
64 64

  
65 65
	private void calculateWhere(){
66
		if (isStringEmpty(this.driver.getBaseWhereClause())){
66
		if (isStringEmpty(this.store.getBaseWhereClause())){
67 67
			this.totalFilter = this.filter;
68 68
		} else {
69
			this.totalFilter = "(" + this.driver.getBaseWhereClause() + ") and " +this.filter;
69
			this.totalFilter = "(" + this.store.getBaseWhereClause() + ") and " +this.filter;
70 70
		}
71 71
	}
72 72

  
73 73
	private ResultSet getNewResulset(String aSql) throws ReadException{
74
		this.driver.open();
74
		this.store.open();
75 75

  
76
		this.connection = this.driver.getConnection();
76
		this.connection = this.store.getConnection();
77 77

  
78 78
		try {
79 79
			Statement st = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
......
150 150
		try{
151 151
			ResultSet r=null;
152 152
			r = this.getNewResulset(this.sql);
153
			H2Iterator dbfIter=new H2Iterator(this.driver,r,this.featureType);
153
			H2Iterator dbfIter=new H2Iterator(this.store,r,this.featureType);
154 154
			return dbfIter;
155 155
		} catch (BaseException e){
156 156
			throw new RuntimeException(e);
......
216 216
	protected class H2Iterator implements Iterator{
217 217
		private Iterator dbIter;
218 218
		private Iterator mIter;
219
		public H2Iterator(H2Driver driver, ResultSet rs, DBFeatureType featureType){
220
			this.dbIter = new H2IteratorDB(driver,rs,featureType);
219
		public H2Iterator(H2Store store, ResultSet rs, DBFeatureType featureType){
220
			this.dbIter = new H2IteratorDB(store,rs,featureType);
221 221
			this.mIter = new H2IteratorMemory(featureType);
222 222
		}
223 223
		public boolean hasNext() {
......
241 241
		private boolean nextChecked=false;
242 242
		private IFeature feature;
243 243
		private ResultSet rs;
244
		private H2Driver driver;
244
		private H2Store store;
245 245
		private DBFeatureType featureType;
246 246
		private boolean rsEOF=false;
247 247

  
248
		public H2IteratorDB(H2Driver driver, ResultSet rs, DBFeatureType featureType){
249
			this.driver = driver;
248
		public H2IteratorDB(H2Store store, ResultSet rs, DBFeatureType featureType){
249
			this.store = store;
250 250
			this.rs = rs;
251 251
			this.featureType = featureType;
252 252
		}
......
312 312
			IFeature feature=null;
313 313
			try {
314 314
				if(rs.next()){
315
					feature=H2DriverUtils.createFeature(this.driver, this.rs, featureType);
315
					feature=H2DriverUtils.createFeature(this.store, this.rs, featureType);
316 316
				}
317 317
			} catch (java.sql.SQLException e) {
318 318
				throw new RuntimeException(
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/Register.java
5 5
public class Register {
6 6
	public static void selfRegister() {
7 7
		DataSourceManager dsm = DataSourceManager.getManager();
8
		
9
		dsm.registerDriver(H2Driver.DRIVER_NAME, 
10
				H2Driver.class, 
11
				H2DriverParameters.class
8

  
9
		dsm.registerDriver(H2Store.DATASTORE_NAME,
10
				H2Store.class,
11
				H2StoreParameters.class
12 12
		);
13 13
	}
14
	
15 14

  
15

  
16 16
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2Feature.java
7 7
import org.gvsig.data.vectorial.IFeatureID;
8 8
import org.gvsig.data.vectorial.IFeatureType;
9 9

  
10

  
10 11
public class H2Feature extends Feature{
11 12

  
12 13
	/**
13 14
	 *
14 15
	 */
15 16
	private static final long serialVersionUID = -5836612523458472800L;
16
	private H2Driver driver;
17
	private H2Store store;
17 18
	private String featureIndex;
18 19

  
19
	public H2Feature(IFeatureType featureType, H2Driver driver, String featureIndex) {
20
	public H2Feature(IFeatureType featureType, H2Store store, String featureIndex) {
20 21
		super(featureType);
21
		this.driver=driver;
22
		this.store=store;
22 23
		this.featureIndex=featureIndex;
23 24
	}
24 25

  
25 26
	public IFeatureID getID() {
26
		return new H2FeatureID(this.driver,featureIndex);
27
		return new H2FeatureID(this.store,featureIndex);
27 28
	}
28 29

  
29 30
	public IExtent getExtent() {
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeatureCollectionEditing.java
23 23
	protected ComplexObservable observable = new ComplexObservable();
24 24
	protected DBFeatureType featureType;
25 25
	protected String totalFilter;
26
	protected H2Driver driver;
26
	protected H2Store store;
27 27
	protected ResultSet rs;
28 28
	private int numReg=-1;
29 29
	private String sql;
......
34 34
//	private FeatureFilterParser parser;
35 35

  
36 36

  
37
	public H2FeatureCollectionEditing(FeatureManager fm,H2Driver driver,IFeatureType type) {
37
	public H2FeatureCollectionEditing(FeatureManager fm,H2Store store,IFeatureType type) {
38 38
		this.featureManager=fm;
39
		this.driver=driver;
39
		this.store=store;
40 40
		this.featureType=(DBFeatureType)type;
41 41

  
42
		this.totalFilter =driver.getBaseWhereClause();
43
		this.totalOrder = driver.getBaseOrder();
42
		this.totalFilter =store.getBaseWhereClause();
43
		this.totalOrder = store.getBaseOrder();
44 44

  
45
		this.sql = this.driver.getSqlSelectPart();
46
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ this.driver.getParametersH2().tableID();
45
		this.sql = this.store.getSqlSelectPart();
46
		this.sqlCount = "Select count(" + type.getFieldId() +") From "+ ((H2StoreParameters)this.store.getParameters()).tableID();
47 47
		if (!isStringEmpty(this.totalFilter)){
48 48
			this.sql= this.sql + " Where " + this.totalFilter;
49 49
			this.sqlCount= this.sqlCount + " Where " + this.totalFilter;
......
58 58
	}
59 59

  
60 60
	private ResultSet getNewResulset(String aSql) throws ReadException{
61
		this.driver.open();
61
		this.store.open();
62 62

  
63
		this.connection = this.driver.getConnection();
63
		this.connection = this.store.getConnection();
64 64

  
65 65
		try {
66 66
			Statement st = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_READ_ONLY);
......
129 129
		try{
130 130
			ResultSet r=null;
131 131
			r = this.getNewResulset(this.sql);
132
			H2Iterator dbfIter=new H2Iterator(this.driver,r,this.featureType);
132
			H2Iterator dbfIter=new H2Iterator(this.store,r,this.featureType);
133 133
			return dbfIter;
134 134
		} catch (BaseException e){
135 135
			throw new RuntimeException(e);
......
197 197
		private boolean nextChecked=false;
198 198
		private IFeature feature;
199 199
		private ResultSet rs;
200
		private H2Driver driver;
200
		private H2Store store;
201 201
		private DBFeatureType featureType;
202 202
		private boolean rsEOF=false;
203 203

  
204
		public H2Iterator(H2Driver driver, ResultSet rs, DBFeatureType featureType){
205
			this.driver = driver;
204
		public H2Iterator(H2Store store, ResultSet rs, DBFeatureType featureType){
205
			this.store = store;
206 206
			this.rs = rs;
207 207
			this.featureType = featureType;
208 208
			position=0;
......
290 290
			IFeature feature=null;
291 291
			try {
292 292
				if(rs.next()){
293
					feature=H2DriverUtils.createFeature(this.driver, this.rs, featureType);
293
					feature=H2DriverUtils.createFeature(this.store, this.rs, featureType);
294 294
				}
295 295
			} catch (java.sql.SQLException e) {
296 296
				throw new RuntimeException(
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeaturesWriter.java
17 17
import java.sql.Types;
18 18
import java.util.Iterator;
19 19

  
20
import org.gvsig.data.datastores.vectorial.driver.IDriver;
21 20
import org.gvsig.data.datastores.vectorial.driver.ISelectiveWriter;
22 21
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBAttributeDescriptor;
23 22
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBFeatureType;
......
28 27
import org.gvsig.data.exception.WriteException;
29 28
import org.gvsig.data.vectorial.IFeature;
30 29
import org.gvsig.data.vectorial.IFeatureAttributeDescriptor;
30
import org.gvsig.data.vectorial.IFeatureStore;
31 31
import org.gvsig.data.vectorial.IFeatureType;
32 32

  
33 33
import com.iver.cit.gvsig.fmap.core.FShape;
......
41 41
	private Connection conex;
42 42
	private boolean bCreateTable=false;
43 43
	private String toEncode;
44
	private H2Driver driver;
45
	private H2DriverParameters parameters;
44
	private H2Store store;
45
	private H2StoreParameters parameters;
46 46

  
47 47
	private PreparedStatement insertSt;
48 48
	private PreparedStatement updateSt;
49 49

  
50 50

  
51
	public void init(IDriver driver) {
51
	public void init(IFeatureStore store) {
52 52
		Statement st;
53
		this.driver = (H2Driver)driver;
54
		this.parameters=(H2DriverParameters)driver.getParameters();
53
		this.store = (H2Store)store;
54
		this.parameters=(H2StoreParameters)store.getParameters();
55 55

  
56
		this.featureType = (DBFeatureType)this.driver.getFeatureType();
57
		conex = this.driver.getConnection();
56
		this.featureType = (DBFeatureType)this.store.getDefaultFeatureType();
57
		conex = this.store.getConnection();
58 58
		try {
59 59
			st = conex.createStatement();
60 60

  
......
530 530
		return sql;
531 531
	}
532 532

  
533
	public static void create(H2DriverParameters parameters, IFeatureType featureType)throws OpenException, InitializeWriterException {
533
	public static void create(H2StoreParameters parameters, IFeatureType featureType)throws OpenException, InitializeWriterException {
534 534
		try {
535 535
			Class.forName("org.h2.Driver");
536 536
		} catch (ClassNotFoundException e) {
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2DriverUtils.java
76 76

  
77 77
	}
78 78

  
79
	static DBFeatureType getFeatureType(Connection conn,H2DriverParameters params) throws ReadException{
79
	static DBFeatureType getFeatureType(Connection conn,H2StoreParameters params) throws ReadException{
80 80
		String sql="";
81 81
		String columns=params.getFields();
82 82

  
......
321 321
	}
322 322

  
323 323
	static String getConnectionResourceID(String dbUrl,String dbUser){
324
		return H2Driver.DRIVER_NAME+";"+dbUrl+";"+dbUser;
324
		return H2Store.CONNECTION_STRING+";"+dbUrl+";"+dbUser;
325 325

  
326 326
	}
327 327

  
......
367 367
		return conn;
368 368
	}
369 369

  
370
	static IFeature createFeature(H2Driver driver,ResultSet rs,DBFeatureType featureType) throws ReadException{
370
	static IFeature createFeature(H2Store driver,ResultSet rs,DBFeatureType featureType) throws ReadException{
371 371

  
372 372
		H2Feature feature=null;
373 373

  
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2FeatureCollectionWithFeatureID.java
3 3
import java.util.ArrayList;
4 4
import java.util.Collection;
5 5
import java.util.Comparator;
6
import java.util.HashMap;
7 6
import java.util.Iterator;
8
import java.util.Map;
9 7
import java.util.TreeSet;
10 8

  
11 9
import org.gvsig.data.ComplexObservable;
......
26 24
	protected IFeatureType featureType;
27 25

  
28 26

  
29
	public H2FeatureCollectionWithFeatureID(FeatureManager fm,H2Driver driver,IFeatureType type, String filter,String order) throws ReadException {
27
	public H2FeatureCollectionWithFeatureID(FeatureManager fm,H2Store store,IFeatureType type, String filter,String order) throws ReadException {
30 28
		this.featureType=type;
31
		intilizeFeatureIDs(fm, driver, filter, order);
29
		intilizeFeatureIDs(fm, store, filter, order);
32 30
	}
33 31

  
34
	protected void intilizeFeatureIDs(FeatureManager fm,H2Driver driver, String filter,String order) throws ReadException {
32
	protected void intilizeFeatureIDs(FeatureManager fm,H2Store store, String filter,String order) throws ReadException {
35 33
		FeatureFilterParser parser = null;
36 34
		IFeature feature;
37 35
		Collection tmpFeatures;
......
66 64

  
67 65
		}
68 66

  
69
		IFeatureCollection coll = new H2FeatureCollection(driver,this.featureType,filter,order);
67
		IFeatureCollection coll = new H2FeatureCollection(store,this.featureType,filter,order);
70 68
		Iterator iter = coll.iterator();
71 69
		while (iter.hasNext()){
72 70
			feature =(IFeature)iter.next();
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/h2/H2Store.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc.h2;
2

  
3
import java.sql.Connection;
4
import java.sql.ResultSet;
5
import java.sql.ResultSetMetaData;
6
import java.sql.Statement;
7
import java.util.Iterator;
8
import java.util.List;
9
import java.util.Locale;
10

  
11
import org.gvsig.data.IDataCollection;
12
import org.gvsig.data.IDataStoreParameters;
13
import org.gvsig.data.commands.implementation.AbstractAttributeCommand;
14
import org.gvsig.data.commands.implementation.AbstractFeatureCommand;
15
import org.gvsig.data.commands.implementation.UpdateAttributeCommand;
16
import org.gvsig.data.commands.implementation.UpdateFeatureCommand;
17
import org.gvsig.data.datastores.vectorial.driver.IFeaturesReader;
18
import org.gvsig.data.datastores.vectorial.driver.IFeaturesWriter;
19
import org.gvsig.data.datastores.vectorial.driver.ISelectiveWriter;
20
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBFeatureType;
21
import org.gvsig.data.exception.CloseException;
22
import org.gvsig.data.exception.InitializeException;
23
import org.gvsig.data.exception.OpenException;
24
import org.gvsig.data.exception.ReadException;
25
import org.gvsig.data.exception.WriteException;
26
import org.gvsig.data.spatialprovisional.IExtent;
27
import org.gvsig.data.vectorial.AbstractFeatureStore;
28
import org.gvsig.data.vectorial.CreatedFeature;
29
import org.gvsig.data.vectorial.IFeature;
30
import org.gvsig.data.vectorial.IFeatureAttributeDescriptor;
31
import org.gvsig.data.vectorial.IFeatureID;
32
import org.gvsig.data.vectorial.IFeatureType;
33
import org.gvsig.exceptions.BaseException;
34
import org.gvsig.metadata.IMetadata;
35

  
36
public class H2Store extends AbstractFeatureStore{
37
	public static final String CONNECTION_STRING = "h2";
38
	public static String DATASTORE_NAME = "H2Store";
39
	protected static Locale ukLocale = new Locale("en", "UK"); // English, UK version
40
    private DBFeatureType featureType;
41
	protected IMetadata metadata;
42
	private Connection connection = null;
43
	private String sqlSelectPart; //sqlOrig
44
	private String baseWhereClause = null;
45
	private String tableId;
46
	private String baseOrder = null;
47

  
48
	private String sql;
49

  
50
	private ResultSetMetaData rsMetaData;
51
	private int numReg=-1;
52

  
53
	protected void doFinishEdition() throws WriteException, ReadException {
54
		Iterator commandsfeatures = null;
55
    	IFeaturesWriter writer = getFeaturesWriter();
56
    	IFeatureType type = getDefaultFeatureType();
57

  
58
    	if (writer instanceof ISelectiveWriter){
59
    		ISelectiveWriter selectiveWriter=(ISelectiveWriter)writer;
60
    		selectiveWriter.init(this);
61
    		selectiveWriter.updateFeatureType(type);
62
    		selectiveWriter.preProcess();
63

  
64
        	commandsfeatures = commands.getCommandsAttributeDeleted().iterator();
65
    		while( commandsfeatures.hasNext() ) {
66
    			Object obj=commandsfeatures.next();
67
    			if (obj instanceof AbstractAttributeCommand){
68
    				IFeatureAttributeDescriptor attribute = ((AbstractAttributeCommand)obj).getAttributeDescriptor();
69
    				selectiveWriter.deleteAttribute(attribute);
70
    			}
71
    		}
72
    		commandsfeatures = commands.getCommandsAttributeUpdated().iterator();
73
    		while( commandsfeatures.hasNext() ) {
74
    			Object obj=commandsfeatures.next();
75
    			if (obj instanceof AbstractAttributeCommand){
76
    				IFeatureAttributeDescriptor oldAttribute = ((UpdateAttributeCommand)obj).getOldAttributeDescriptor();
77
    				IFeatureAttributeDescriptor attribute = ((UpdateAttributeCommand)obj).getAttributeDescriptor();
78
    				selectiveWriter.updateAttribute(oldAttribute,attribute);
79
    			}
80
    		}
81
    		commandsfeatures = commands.getCommandsAttributeInserted().iterator();
82
    		while( commandsfeatures.hasNext() ) {
83
    			Object obj=commandsfeatures.next();
84
    			if (obj instanceof AbstractAttributeCommand){
85
    				IFeatureAttributeDescriptor attribute = ((AbstractAttributeCommand)obj).getAttributeDescriptor();
86
    				selectiveWriter.insertAttribute(attribute);
87
    			}
88
    		}
89

  
90

  
91
    		commandsfeatures = commands.getCommandsFeatureDeleted().iterator();
92
    		while( commandsfeatures.hasNext() ) {
93
    			Object obj=commandsfeatures.next();
94
    			if (obj instanceof AbstractFeatureCommand){
95
    				IFeature feature = ((AbstractFeatureCommand)obj).getFeature();
96
    				if (feature instanceof CreatedFeature)
97
    					continue;
98

  
99
    				selectiveWriter.deleteFeature(feature);
100
    			}
101
    		}
102
    		commandsfeatures = commands.getCommandsFeatureUpdated().iterator();
103
    		while( commandsfeatures.hasNext() ) {
104
    			Object obj=commandsfeatures.next();
105
    			if (obj instanceof AbstractFeatureCommand){
106
    				IFeature oldFeature = ((UpdateFeatureCommand)obj).getOldFeature();
107
    				IFeature feature = ((UpdateFeatureCommand)obj).getFeature();
108
    				if (featureManager.isDeleted(feature)){
109
    					continue;
110
    				}
111
    				selectiveWriter.updateFeature(oldFeature,feature);
112
    			}
113
    		}
114
    		commandsfeatures = commands.getCommandsFeatureInserted().iterator();
115
    		while( commandsfeatures.hasNext() ) {
116
    			Object obj=commandsfeatures.next();
117
    			if (obj instanceof AbstractFeatureCommand){
118
    				IFeature feature = ((AbstractFeatureCommand)obj).getFeature();
119
    				if (featureManager.isDeleted(feature)){
120
    					continue;
121
    				}
122
    				selectiveWriter.insertFeature(feature);
123
    			}
124
    		}
125
    		selectiveWriter.postProcess();
126
    	}
127

  
128
	}
129

  
130
	public IDataCollection getDataCollection(IFeatureType type, String filter, String order) throws ReadException {
131
		if (type==null){
132
			type=getDefaultFeatureType();
133
		}
134
		return getFeatutesReader().getFeatures(featureManager,type,filter,order);
135
	}
136

  
137
	public IFeature getFeatureByID(IFeatureID id) throws ReadException {
138
		return getFeatureByID(featureType,((H2FeatureID)id).getKey());
139
	}
140
	public IFeature getFeatureByID(IFeatureType featureType2, Object featureKey) throws ReadException{
141
		ResultSet rs=null;
142
		try{
143
			this.open();
144
			Statement st=this.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
145
			String sql = this.getSqlSelectPart() + " WHERE "+ H2DriverUtils.getFliterForID(this.featureType, featureKey);
146
			rs=st.executeQuery(sql);
147
			if (rs.isLast()) {
148

  
149
				return null;
150
			}else{
151
				if(rs.next()){
152
					return H2DriverUtils.createFeature(this, rs, this.featureType);
153
				}
154

  
155
			}
156

  
157
		} catch (java.sql.SQLException e) {
158
			e.printStackTrace();
159
			throw new ReadException("H2Spatial Driver", e);
160
		} finally{
161
			if (rs != null)
162
				try {
163
					rs.close();
164
				} catch (java.sql.SQLException e) {
165
					// TODO ?????
166
					e.printStackTrace();
167
				}
168
		}
169
		return null;
170
	}
171
	Connection getConnection(){
172
		// FIXME: OJO REsource manager
173
		return this.connection;
174

  
175
	}
176
	private void initSqlProperties() throws InitializeException{
177
		H2StoreParameters dParams = (H2StoreParameters)this.getParameters();
178
		sqlSelectPart = "SELECT " + dParams.getFields() +" FROM "+ dParams.tableID();
179

  
180
		baseWhereClause = dParams.getBaseFilter();
181

  
182
		if (dParams.getWorkingArea() != null){
183
			String waWhere = getWorkingAreaWhere(dParams.getWorkingArea(), dParams.getSRISD());
184
			if (waWhere != null){
185
				baseWhereClause = "(("+baseWhereClause+") and "+waWhere +")";
186
			}
187

  
188
		}
189

  
190
		this.baseOrder = dParams.getBaseOrder();
191

  
192
	}
193
	private String getWorkingAreaWhere(IExtent r, String strEPSG) {
194
		//TODO????
195
		if (r==null){
196
			return null;
197
		}
198
		return null;
199
	}
200
	public List getFeatureTypes() {
201
		// TODO Auto-generated method stub
202
		return null;
203
	}
204

  
205
	public IFeatureType getDefaultFeatureType() {
206
		// TODO Auto-generated method stub
207
		return null;
208
	}
209

  
210
	public boolean isWithDefaultLegend() {
211
		// TODO Auto-generated method stub
212
		return false;
213
	}
214

  
215
	public Object getDefaultLegend() {
216
		// TODO Auto-generated method stub
217
		return null;
218
	}
219

  
220
	public Object getDefaultLabelingStrategy() {
221
		// TODO Auto-generated method stub
222
		return null;
223
	}
224

  
225
	public boolean canAlterFeatureType() {
226
		return true;
227
	}
228

  
229
	public IDataStoreParameters getParameters() {
230
		// TODO Auto-generated method stub
231
		return null;
232
	}
233

  
234
	public String getName() {
235
		// TODO Auto-generated method stub
236
		return null;
237
	}
238

  
239
	public void open() throws OpenException {
240
		// TODO Auto-generated method stub
241

  
242
	}
243

  
244
	public void close() throws CloseException {
245
		// TODO Auto-generated method stub
246

  
247
	}
248

  
249
	public void dispose() throws CloseException {
250
		// TODO Auto-generated method stub
251

  
252
	}
253

  
254
	public boolean isEditable() {
255
		return true;
256
	}
257

  
258
	public IMetadata getMetadata() throws BaseException {
259
		// TODO Auto-generated method stub
260
		return null;
261
	}
262
	public IFeaturesReader getFeatutesReader() {
263
		IFeaturesReader reader = new H2FeaturesReader();
264
		reader.init(this);
265
		return reader;
266
	}
267
	public IFeaturesWriter getFeaturesWriter() {
268
		IFeaturesWriter writer = new H2FeaturesWriter();
269
//		writer.init(this);
270
		return writer;
271
	}
272
	public String getSqlSelectPart() {
273
		return sqlSelectPart;
274
	}
275
	public String getBaseOrder() {
276
		return this.baseOrder;
277
	}
278
	public String getBaseWhereClause() {
279
		return baseWhereClause;
280
	}
281
}
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/hsqldb/HSQLDBFeature.java
7 7
import org.gvsig.data.vectorial.IFeatureID;
8 8
import org.gvsig.data.vectorial.IFeatureType;
9 9

  
10

  
10 11
public class HSQLDBFeature extends Feature{
11 12

  
12 13
	private HSQLDBDriver driver;
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/hsqldb/HSQLDBFeaturesWriter.java
1 1
package org.gvsig.data.datastores.vectorial.driver.jdbc.hsqldb;
2 2

  
3
import org.gvsig.data.datastores.vectorial.driver.IDriver;
4 3
import org.gvsig.data.datastores.vectorial.driver.IFeaturesWriter;
5 4
import org.gvsig.data.vectorial.IFeature;
5
import org.gvsig.data.vectorial.IFeatureStore;
6 6
import org.gvsig.data.vectorial.IFeatureType;
7 7

  
8 8
public class HSQLDBFeaturesWriter implements IFeaturesWriter {
9 9
	private IFeatureType featureType;
10
	public void init(IDriver driver) {
11
		HSQLDBDriverParameters parameters=(HSQLDBDriverParameters)driver.getParameters();
10
	public void init(IFeatureStore store) {
11
		HSQLDBDriverParameters parameters=(HSQLDBDriverParameters)store.getParameters();
12 12
	}
13 13

  
14 14
	public void postProcess() {
trunk/libraries/libDataSourceDBBaseDrivers/src/org/gvsig/data/datastores/vectorial/driver/jdbc/hsqldb/HSQLDBStore.java
1
package org.gvsig.data.datastores.vectorial.driver.jdbc.hsqldb;
2

  
3
import java.sql.Connection;
4
import java.sql.ResultSet;
5
import java.sql.ResultSetMetaData;
6
import java.sql.Statement;
7
import java.util.Iterator;
8
import java.util.List;
9
import java.util.Locale;
10

  
11
import org.gvsig.data.IDataCollection;
12
import org.gvsig.data.IDataStoreParameters;
13
import org.gvsig.data.commands.implementation.AbstractAttributeCommand;
14
import org.gvsig.data.commands.implementation.AbstractFeatureCommand;
15
import org.gvsig.data.commands.implementation.UpdateAttributeCommand;
16
import org.gvsig.data.commands.implementation.UpdateFeatureCommand;
17
import org.gvsig.data.datastores.vectorial.driver.IFeaturesReader;
18
import org.gvsig.data.datastores.vectorial.driver.IFeaturesWriter;
19
import org.gvsig.data.datastores.vectorial.driver.ISelectiveWriter;
20
import org.gvsig.data.datastores.vectorial.driver.jdbc.DBFeatureType;
21
import org.gvsig.data.datastores.vectorial.driver.jdbc.h2.H2DriverUtils;
22
import org.gvsig.data.exception.CloseException;
23
import org.gvsig.data.exception.InitializeException;
24
import org.gvsig.data.exception.OpenException;
25
import org.gvsig.data.exception.ReadException;
26
import org.gvsig.data.exception.WriteException;
27
import org.gvsig.data.spatialprovisional.IExtent;
28
import org.gvsig.data.vectorial.AbstractFeatureStore;
29
import org.gvsig.data.vectorial.CreatedFeature;
30
import org.gvsig.data.vectorial.IFeature;
31
import org.gvsig.data.vectorial.IFeatureAttributeDescriptor;
32
import org.gvsig.data.vectorial.IFeatureID;
33
import org.gvsig.data.vectorial.IFeatureType;
34
import org.gvsig.exceptions.BaseException;
35
import org.gvsig.metadata.IMetadata;
36

  
37
public class HSQLDBStore extends AbstractFeatureStore{
38
	public static final String CONNECTION_STRING = "h2";
39
	public static String DATASTORE_NAME = "H2Store";
40
	protected static Locale ukLocale = new Locale("en", "UK"); // English, UK version
41
    private DBFeatureType featureType;
42
	protected IMetadata metadata;
43
	private Connection connection = null;
44
	private String sqlSelectPart; //sqlOrig
45
	private String baseWhereClause = null;
46
	private String tableId;
47
	private String baseOrder = null;
48

  
49
	private String sql;
50

  
51
	private ResultSetMetaData rsMetaData;
52
	private int numReg=-1;
53

  
54
	protected void doFinishEdition() throws WriteException, ReadException {
55
		Iterator commandsfeatures = null;
56
    	IFeaturesWriter writer = getFeaturesWriter();
57
    	IFeatureType type = getDefaultFeatureType();
58

  
59
    	if (writer instanceof ISelectiveWriter){
60
    		ISelectiveWriter selectiveWriter=(ISelectiveWriter)writer;
61
    		selectiveWriter.init(this);
62
    		selectiveWriter.updateFeatureType(type);
63
    		selectiveWriter.preProcess();
64

  
65
        	commandsfeatures = commands.getCommandsAttributeDeleted().iterator();
66
    		while( commandsfeatures.hasNext() ) {
67
    			Object obj=commandsfeatures.next();
68
    			if (obj instanceof AbstractAttributeCommand){
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff