Revision 342

View differences:

org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
  </files>
17

  
18
  <fileSets>
19
    <fileSet>
20
      <directory>src/main/resources-plugin</directory>
21
      <outputDirectory>.</outputDirectory>
22
    </fileSet>
23
  </fileSets>
24

  
25
<!--
26
  <dependencySets>
27
    <dependencySet>
28
      <useProjectArtifact>false</useProjectArtifact>
29
      <useTransitiveDependencies>false</useTransitiveDependencies>
30
      <outputDirectory>lib</outputDirectory>
31
      <includes>
32
        <include>org.gvsig:org.gvsig.wfs.app.mainplugin</include>
33
      </includes>
34
    </dependencySet>
35
  </dependencySets>
36
-->
37

  
38
</assembly>
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSLibrary.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 {Iver T.I.}   {Task}
26
*/
27
 
28
package org.gvsig.fmap.dal.store.wfs;
29

  
30
import org.gvsig.fmap.dal.DALLibrary;
31
import org.gvsig.fmap.dal.DALLocator;
32
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
33
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorerParameters;
34
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
35
import org.gvsig.fmap.mapcontext.MapContextLibrary;
36
import org.gvsig.metadata.exceptions.MetadataException;
37
import org.gvsig.tools.ToolsLocator;
38
import org.gvsig.tools.extensionpoint.ExtensionPoint;
39
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
40
import org.gvsig.tools.library.AbstractLibrary;
41
import org.gvsig.tools.library.LibraryException;
42

  
43
/**
44
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
45
 */
46
public class WFSLibrary extends AbstractLibrary {
47

  
48
    @Override
49
    public void doRegistration() {
50
        registerAsServiceOf(DALLibrary.class);
51
        require(MapContextLibrary.class);
52
    }
53

  
54
	@Override
55
	protected void doInitialize() throws LibraryException {
56
	}
57

  
58
	@Override
59
	protected void doPostInitialize() throws LibraryException {
60
		WFSStoreParameters.registerDynClass();
61
		try {
62
			WFSStoreProvider.registerMetadataDefinition();
63
		} catch (MetadataException e) {
64
			throw new LibraryException(this.getClass(), e);
65
		}
66

  
67
		DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
68
		.getDataManager();
69

  
70
		if (!dataman.getStoreProviders().contains(WFSStoreProvider.NAME)) {
71
			dataman.registerStoreProvider(WFSStoreProvider.NAME,
72
					WFSStoreProvider.class, WFSStoreParameters.class);
73
		}	
74
		
75
		if (!dataman.getExplorerProviders().contains(WFSServerExplorer.NAME)){
76
			dataman.registerExplorerProvider(WFSServerExplorer.NAME,
77
					WFSServerExplorer.class, WFSServerExplorerParameters.class);
78
		}	
79
		
80
		//Register the WFSStroreParams to be loaded from the catalog extension
81
		ExtensionPointManager extensionPointManager = ToolsLocator
82
		.getExtensionPointManager();
83
		ExtensionPoint extensionPoint = extensionPointManager.add("CatalogDataStoreParameters");
84
		extensionPoint.append("OGC:WFS", "Data store parameters to load a WFS layer", WFSStoreParameters.class);
85
	}
86
}
87

  
88

  
89

  
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSStoreProvider.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22

  
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2009 {Iver T.I.}   {Task}
26
 */
27

  
28
package org.gvsig.fmap.dal.store.wfs;
29

  
30
import java.awt.geom.AffineTransform;
31
import java.io.File;
32
import java.io.IOException;
33
import java.util.ArrayList;
34
import java.util.Iterator;
35
import java.util.List;
36

  
37
import org.cresques.cts.ICoordTrans;
38
import org.cresques.cts.IProjection;
39
import org.gvsig.fmap.crs.CRSFactory;
40
import org.gvsig.fmap.dal.DALLocator;
41
import org.gvsig.fmap.dal.DataManager;
42
import org.gvsig.fmap.dal.DataServerExplorer;
43
import org.gvsig.fmap.dal.DataStoreParameters;
44
import org.gvsig.fmap.dal.DataTypes;
45
import org.gvsig.fmap.dal.exception.ConnectionServerException;
46
import org.gvsig.fmap.dal.exception.DataException;
47
import org.gvsig.fmap.dal.exception.InitializeException;
48
import org.gvsig.fmap.dal.exception.OpenException;
49
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
50
import org.gvsig.fmap.dal.exception.ReadException;
51
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
52
import org.gvsig.fmap.dal.feature.EditableFeatureType;
53
import org.gvsig.fmap.dal.feature.FeatureQuery;
54
import org.gvsig.fmap.dal.feature.FeatureStore;
55
import org.gvsig.fmap.dal.feature.FeatureType;
56
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
57
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
58
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
59
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
60
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
61
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
62
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorerParameters;
63
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
64
import org.gvsig.fmap.dal.store.gpe.GPEStoreProvider;
65
import org.gvsig.fmap.geom.Geometry;
66
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
67
import org.gvsig.fmap.geom.GeometryLocator;
68
import org.gvsig.fmap.geom.GeometryManager;
69
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
70
import org.gvsig.fmap.geom.operation.GeometryOperationException;
71
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
72
import org.gvsig.fmap.geom.primitive.Envelope;
73
import org.gvsig.gpe.lib.api.exceptions.WriterHandlerCreationException;
74
import org.gvsig.metadata.MetadataLocator;
75
import org.gvsig.metadata.MetadataManager;
76
import org.gvsig.metadata.exceptions.MetadataException;
77
import org.gvsig.remoteclient.ogc.OGCClientOperation;
78
import org.gvsig.remoteclient.utils.BoundaryBox;
79
import org.gvsig.remoteclient.wfs.WFSClient;
80
import org.gvsig.remoteclient.wfs.WFSFeature;
81
import org.gvsig.remoteclient.wfs.WFSFeatureField;
82
import org.gvsig.remoteclient.wfs.WFSStatus;
83
import org.gvsig.remoteclient.wfs.exceptions.WFSException;
84
import org.gvsig.remoteclient.wfs.request.WFSGetFeatureRequestInformation;
85
import org.gvsig.remoteclient.wfs.request.WFSTransactionRequestInformation;
86
import org.gvsig.tools.ToolsLocator;
87
import org.gvsig.tools.dynobject.DynStruct;
88
import org.gvsig.xmlschema.lib.api.XMLSchemaLocator;
89
import org.gvsig.xmlschema.lib.api.XMLSchemaManager;
90
import org.gvsig.xmlschema.lib.api.som.IXSGeometryTypeDefinition;
91
import org.gvsig.xmlschema.lib.api.som.IXSTypeDefinition;
92
import org.slf4j.Logger;
93
import org.slf4j.LoggerFactory;
94

  
95
/**
96
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
97
 */
98
public class WFSStoreProvider extends AbstractFeatureStoreProvider {
99
	private static final Logger logger = LoggerFactory
100
			.getLogger(WFSStoreProvider.class);
101
	public static String NAME = "WFSStore";
102
	public static String DESCRIPTION = "WFS store to load WFS resources";
103

  
104
	private static final MetadataManager metadataManager = MetadataLocator
105
			.getMetadataManager();
106
	private static final String METADATA_DEFINITION_NAME = "WFSStore";
107
	private static final String METADATA_DEFINITION_DESCRIPTION = "WFSStore metadata definition";
108

  
109
	// private IProjection projection;
110
	private long featureCount = -1;
111
	private boolean isKnownEnvelope = false;
112

  
113
	/**
114
	 * If the user has selected the filter by area option
115
	 */
116
	private boolean hasFilterByArea = false;
117

  
118
	/**
119
	 * GML provider used by delegation to read the GML files
120
	 */
121
	private GPEStoreProvider storeProviderDelegate = null;
122

  
123
	private static final DataManager dataManager = DALLocator.getDataManager();
124
	private static final XMLSchemaManager xmlSchemaManager = XMLSchemaLocator
125
			.getXMLSchemaManager();
126

  
127
	boolean isFilterByAreaSupported = true;
128

  
129
	// WFS Parameters
130
	private WFSClient wfsClient;
131
	private WFSStatus wfsStatus;
132

  
133
	public WFSStoreProvider(DataStoreParameters params,
134
			DataStoreProviderServices storeServices) throws InitializeException {
135
		super(
136
				params,
137
				storeServices,
138
				ToolsLocator
139
						.getDynObjectManager()
140
						.createDynObject(
141
								metadataManager
142
										.getDefinition(METADATA_DEFINITION_NAME)));
143
		initParams();
144
		try {
145
			initFeatureType();
146
		} catch (WFSException e) {
147
			throw new InitializeException(e);
148
		} catch (ReadException e) {
149
			throw new InitializeException(e);
150
		}
151
	}
152

  
153
	private void initParams() throws InitializeException {
154
		try {
155
			WFSStoreParameters wfsParameters = getWFSParameters();
156
			try {
157
				if (wfsParameters.getVersion() == null) {
158
					wfsClient = new WFSClient(wfsParameters.getUrl(),
159
							wfsParameters.getIgnoreCache());
160
					wfsParameters.setVersion(wfsClient.getVersion());
161
				} else {
162
					wfsClient = new WFSClient(wfsParameters.getUrl(),
163
							wfsParameters.getVersion(),
164
							wfsParameters.getIgnoreCache());
165
				}
166
			} catch (IOException e) {
167
				throw new InitializeException(e);
168
			}
169
			wfsStatus = new WFSStatus(wfsParameters.getFeatureType(),
170
					wfsParameters.getFeatureNamespace());
171
			wfsStatus.setNamespacePrefix(wfsParameters.getFeaturePrefix());
172
			wfsStatus.setFields(wfsParameters.getFields());
173

  
174
			// Select the filter by area
175

  
176
			Geometry filterByAreaGeometry = wfsParameters
177
					.getFilterByAreaGeometry();
178
			Envelope filterByAreaEnvelope = wfsParameters
179
					.getFilterByAreaEnvelope();
180
			if (filterByAreaGeometry != null) {
181
				wfsStatus.setFilterByArea(filterByAreaGeometry,
182
						wfsParameters.getFilterByAreaAttribute(),
183
						wfsParameters.getFilterByAreaCrs().getFullCode(),
184
						wfsParameters.getFilterByAreaOperation());
185
			} else if (filterByAreaEnvelope != null) {
186
				wfsStatus.setFilterByArea(filterByAreaEnvelope,
187
						wfsParameters.getFilterByAreaAttribute(),
188
						wfsParameters.getFilterByAreaCrs().getFullCode(),
189
						wfsParameters.getFilterByAreaOperation());
190
			}
191
			this.hasFilterByArea = (wfsStatus.getFilterByArea() != null);
192

  
193
			// Select the filter by attribute
194
			wfsStatus.setFilterByAttribute(wfsParameters
195
					.getFilterEncodingByAttribute());
196

  
197
			String _srs = wfsParameters.getCrs();
198
			wfsStatus.setSrs(_srs);
199

  
200
			wfsStatus.setTimeout(wfsParameters.getTimeOut());
201
			wfsStatus.setMaxFeatures(wfsParameters.getMaxFeatures());
202
			wfsStatus.setUserName(wfsParameters.getUser());
203
			wfsStatus.setPassword(wfsParameters.getPassword());
204

  
205
			// Setting the envelope for the layer
206
			wfsClient.getCapabilities(wfsStatus, false, null);
207

  
208
			Envelope envelope = calculateFullEnvelope();
209
			if (envelope != null) {
210
				this.setDynValue("Envelope", envelope);
211
				isKnownEnvelope = true;
212
			}
213
		} catch (WFSException e) {
214
			throw new InitializeException("Impossible to retrieve the file", e);
215
		}
216
	}
217

  
218
	private WFSFeature getSelectedWFSFeature() throws ReadException,
219
			WFSException {
220
		WFSStoreParameters wfsParameters = getWFSParameters();
221

  
222
		return ((WFSServerExplorer) getExplorer()).getFeatureInfo(
223
				wfsParameters.getFeatureNamespace(),
224
				wfsParameters.getFeatureType());
225
	}
226

  
227
	private void initFeatureType() throws WFSException, ReadException {
228
		WFSFeature feature = getSelectedWFSFeature();
229

  
230
		if (feature == null) {
231
			// TODO read from GML
232
			throw new WFSException("It is not possible to parse the schema");
233
		}
234

  
235
		IProjection ipro = null;
236
		try {
237
			ipro = CRSFactory.getCRS(wfsStatus.getSrs());
238
			this.setDynValue("CRS", ipro);
239
		} catch (Exception ex) {
240
			logger.info("Error: did not set CRS in store provider.", ex);
241
		}
242

  
243
		EditableFeatureType featureType = getStoreServices()
244
				.createFeatureType();
245

  
246
		for (int i = 0; i < feature.getFieldSize(); i++) {
247
			WFSFeatureField featureField = feature.getFieldAt(i);
248
			int dataType = DataTypes.STRING;
249
			String typeName = featureField.getType();
250
			EditableFeatureAttributeDescriptor attributeDescriptor = null;
251

  
252
			IXSTypeDefinition typeDefinition = null;
253

  
254
			if (typeName != null) {
255
				typeDefinition = xmlSchemaManager.getTypeDefinition(typeName);
256
			}
257

  
258
			if (typeDefinition != null) {
259
				if (typeDefinition.getDataType() != null) {
260
					if (typeDefinition.getDataType().getType() == DataTypes.GEOMETRY) {
261
						dataType = typeDefinition.getDataType().getType();
262
					}
263
				}
264
				attributeDescriptor = featureType.add(featureField.getName(),
265
						dataType);
266
				if (typeDefinition instanceof IXSGeometryTypeDefinition) {
267

  
268
					if (ipro != null) {
269
						attributeDescriptor.setSRS(ipro);
270
					} else {
271
						if (feature.getSrs().size() > 0) {
272
							attributeDescriptor.setSRS(CRSFactory
273
									.getCRS((String) feature.getSrs().get(0)));
274
						} else {
275
							logger.info("Unable to set CRS in feature type.");
276
						}
277
					}
278

  
279
					attributeDescriptor
280
							.setGeometryType(((IXSGeometryTypeDefinition) typeDefinition)
281
									.getGeometryType());
282
					attributeDescriptor.setGeometrySubType(SUBTYPES.GEOM3D);
283
					featureType.setDefaultGeometryAttributeName(featureField
284
							.getName());
285
				}
286
			} else {
287
				attributeDescriptor = featureType.add(typeName, dataType);
288
			}
289
			// length, relevant for all (strings) except geometry
290
			attributeDescriptor.setSize(128);
291
		}
292
		featureType.setHasOID(true);
293

  
294
		FeatureType defaultType = featureType.getNotEditableCopy();
295
		List types = new ArrayList(1);
296
		types.add(defaultType);
297
		this.getStoreServices().setFeatureTypes(types, defaultType);
298
	}
299

  
300
	private Envelope calculateFullEnvelope() {
301
		GeometryManager geometryManager = GeometryLocator.getGeometryManager();
302

  
303
		try {
304
			WFSFeature feature = getSelectedWFSFeature();
305
			if (feature != null) {
306
				String _srs = wfsStatus.getSrs();
307
				if (_srs != null) {
308

  
309
					BoundaryBox boundaryBox = feature.getBbox(_srs);
310
					// The projection is found
311
					if (boundaryBox != null) {
312
						return geometryManager.createEnvelope(
313
								boundaryBox.getXmin(), boundaryBox.getYmin(),
314
								boundaryBox.getXmax(), boundaryBox.getYmax(),
315
								SUBTYPES.GEOM2D);
316
					}
317
					// Check if there is a latlon envelope
318
					boundaryBox = feature.getLatLonBbox();
319
					if (boundaryBox != null) {
320
						Envelope envelope = geometryManager.createEnvelope(
321
								boundaryBox.getXmin(), boundaryBox.getYmin(),
322
								boundaryBox.getXmax(), boundaryBox.getYmax(),
323
								SUBTYPES.GEOM2D);
324
						if (!"EPSG:4326".equals(_srs)) {
325
							IProjection sourceProjection = CRSFactory
326
									.getCRS("EPSG:4326");
327
							IProjection destinationProjection = CRSFactory
328
									.getCRS(_srs);
329
							if (destinationProjection != null) {
330
								ICoordTrans coordTrans = sourceProjection
331
										.getCT(destinationProjection);
332
								return envelope.convert(coordTrans);
333
							}
334
						}
335
					}
336
				} else {
337
					// If there is not a SRS is thrown a request for the first
338
					// 500 features
339
					int odlMaxFeatures = wfsStatus.getMaxFeatures();
340
					wfsStatus.setMaxFeatures(500);
341
					createSet(null, null);
342
					return storeProviderDelegate.getEnvelope();
343
				}
344
			}
345
		} catch (CreateEnvelopeException e) {
346
			logger.error("Impossible to create an envelope", e);
347
		} catch (ReadException e) {
348
			logger.error("Impossible to create an envelope", e);
349
		} catch (WFSException e) {
350
			logger.error("Impossible to create an envelope", e);
351
		} catch (DataException e) {
352
			logger.error("Impossible to create an envelope", e);
353
		}
354
		return null;
355
	}
356

  
357
	private WFSStoreParameters getWFSParameters() {
358
		return (WFSStoreParameters) getParameters();
359
	}
360

  
361
	/*
362
	 * (non-Javadoc)
363
	 *
364
	 * @see org.gvsig.fmap.dal.store.gpe.GPEStoreProvider#open()
365
	 */
366
	public void open() throws OpenException {
367
		try {
368
			List featureTypes = this.getFeatureStore().getFeatureTypes();
369
			for (int i = 0; i < featureTypes.size(); i++) {
370
				FeatureType featureType = (FeatureType) featureTypes.get(i);
371
			}
372
		} catch (DataException e) {
373
			throw new OpenException("Reading the geometry type", e);
374
		}
375
	}
376

  
377
	protected static void registerMetadataDefinition() throws MetadataException {
378
		if (metadataManager.getDefinition(METADATA_DEFINITION_NAME) == null) {
379
			DynStruct metadataDefinition = metadataManager.addDefinition(
380
					METADATA_DEFINITION_NAME, METADATA_DEFINITION_DESCRIPTION);
381

  
382
			metadataDefinition.addDynFieldObject("Envelope")
383
					.setClassOfValue(Envelope.class).setMandatory(false);
384
			metadataDefinition.addDynFieldObject("CRS")
385
					.setClassOfValue(IProjection.class).setMandatory(true);
386

  
387
			metadataDefinition.extend(metadataManager
388
					.getDefinition(FeatureStore.METADATA_DEFINITION_NAME));
389
		}
390
	}
391

  
392
	/*
393
	 * (non-Javadoc)
394
	 *
395
	 * @see
396
	 * org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getExplorer()
397
	 */
398
	public DataServerExplorer getExplorer() throws ReadException {
399
		DataManager manager = DALLocator.getDataManager();
400
		WFSServerExplorerParameters params;
401
		try {
402
			params = (WFSServerExplorerParameters) manager
403
					.createServerExplorerParameters(WFSServerExplorer.NAME);
404
			params.setUrl(wfsClient.getHost());
405
			return manager.openServerExplorer(WFSServerExplorer.NAME, params);
406
		} catch (Exception e) {
407
			throw new ReadException(this.getName(), e);
408
		}
409
	}
410

  
411
	public String getProviderName() {
412
		return NAME;
413
	}
414

  
415
	public FeatureSetProvider createSet(FeatureQuery query)
416
			throws DataException {
417
		return createSet(query, null);
418
	}
419

  
420
	public FeatureSetProvider createSet(FeatureQuery query,
421
			FeatureType featureType) throws DataException {
422
		if ((featureCount == -1) || (storeProviderDelegate == null)
423
				|| (featureCount >= wfsStatus.getMaxFeatures())) {
424

  
425
			File file = executeSpatialQuery();
426

  
427
			storeProviderDelegate = createProvider(file);
428
		}
429

  
430
		return storeProviderDelegate.createSet(query, featureType);
431
	}
432

  
433
	/**
434
	 * It creates the provider that is used to retrieve features from a file.
435
	 *
436
	 * @param file
437
	 *            the file that contains the downloaded file
438
	 * @return
439
	 * @throws InitializeException
440
	 * @throws ProviderNotRegisteredException
441
	 */
442
	private GPEStoreProvider createProvider(File file)
443
			throws InitializeException, ProviderNotRegisteredException {
444
		return new GPEStoreProvider(createStoreParameters(file),
445
				getStoreServices());
446
	}
447

  
448
	private DataStoreParameters createStoreParameters(File file)
449
			throws InitializeException, ProviderNotRegisteredException {
450
		DataStoreParameters parameters = dataManager
451
				.createStoreParameters(GPEStoreProvider.NAME);
452

  
453
		parameters.setDynValue("File", file.getAbsolutePath());
454
		parameters.setDynValue("Envelope", this.getDynValue("Envelope"));
455
		parameters.setDynValue("useAxisOrderYX", this.getWFSParameters()
456
				.getUseAxisOrderYX());
457
		parameters.setDynValue("Crs", this.getWFSParameters().getCrs());
458
		return parameters;
459
	}
460

  
461
	private File executeSpatialQuery() throws DataException {
462
		try {
463
			Envelope filterByAreaEnvelope = getWFSParameters()
464
					.getFilterByAreaEnvelope();
465
			Geometry filterByAreaGeometry = getWFSParameters()
466
					.getFilterByAreaGeometry();
467
			if (filterByAreaEnvelope != null) {
468
				String crs = getWFSParameters().getCrs();
469
				String the_geom = getWFSParameters().getFilterByAreaAttribute();
470
				int operator = getWFSParameters().getFilterByAreaOperation();
471

  
472
				IProjection envelopeCrs = this.getWFSParameters().getFilterByAreaCrs();
473

  
474
				if (!crs.equalsIgnoreCase(envelopeCrs.getFullCode())) {
475
					Envelope envelope = null;
476
					try {
477
						envelope = (Envelope) filterByAreaEnvelope.clone();
478
					} catch (CloneNotSupportedException e) {
479
						// Do nothing
480
					}
481
					ICoordTrans ct = envelopeCrs.getCT(CRSFactory.getCRS(crs));
482
					filterByAreaEnvelope = envelope.convert(ct);
483
				}
484

  
485
				if (this.getWFSParameters().getUseAxisOrderYX()) {
486
					Envelope envelope = null;
487
					try {
488
						envelope = (Envelope) filterByAreaEnvelope.clone();
489
					} catch (CloneNotSupportedException e) {
490
						// Do nothing
491
					}
492
					double x = envelope.getLowerCorner().getX();
493
					envelope.getLowerCorner().setX(
494
							envelope.getLowerCorner().getY());
495
					envelope.getLowerCorner().setY(x);
496

  
497
					x = envelope.getUpperCorner().getX();
498
					envelope.getUpperCorner().setX(
499
							envelope.getUpperCorner().getY());
500
					envelope.getUpperCorner().setY(x);
501
					filterByAreaEnvelope = envelope;
502
				}
503
				wfsStatus.setFilterByArea(filterByAreaEnvelope, the_geom, crs,
504
						operator);
505
			} else if (filterByAreaGeometry != null) {
506
				String crs = getWFSParameters().getCrs();
507
				String the_geom = getWFSParameters().getFilterByAreaAttribute();
508
				int operator = getWFSParameters().getFilterByAreaOperation();
509

  
510
				IProjection geometryCrs = this.getWFSParameters().getFilterByAreaCrs();
511

  
512
				if (!crs.equalsIgnoreCase(geometryCrs.getFullCode())) {
513
					Geometry geom = null;
514
					geom = (Geometry) filterByAreaGeometry.cloneGeometry();
515
					ICoordTrans ct = geometryCrs.getCT(CRSFactory.getCRS(crs));
516
					geom.reProject(ct);
517
					filterByAreaGeometry = geom;
518
				}
519

  
520
				if (this.getWFSParameters().getUseAxisOrderYX()) {
521
					Geometry geom = filterByAreaGeometry.cloneGeometry();
522
					AffineTransform at = new AffineTransform(0, 1, 1, 0, 0, 1);
523
					geom.transform(at);
524
					filterByAreaGeometry = geom;
525
				}
526
				wfsStatus.setFilterByArea(filterByAreaGeometry, the_geom, crs,
527
						operator);
528

  
529
			}
530
			wfsStatus.setProtocol(OGCClientOperation.PROTOCOL_POST);
531
			// If it is not possible to calculate the
532
			wfsStatus.setResultType(WFSStatus.RESULTYPE_RESULTS);
533
			return wfsClient.getFeature(wfsStatus, getWFSParameters()
534
					.getIgnoreCache(), null);
535
		} catch (WFSException e) {
536
			throw new InitializeException("Impossible to retrieve the file", e);
537
		}
538
	}
539

  
540
	public Object getSourceId() {
541
		StringBuffer sourceID = new StringBuffer(getWFSParameters().getUrl());
542
		sourceID.append("_" + getWFSParameters().getFeatureType());
543
		int hash = sourceID.hashCode();
544
		if (sourceID.length() > 60) {
545
			return sourceID.substring(0, 60) + "_" + hash;
546
		} else {
547
			return sourceID.toString() + "_" + hash;
548
		}
549
	}
550

  
551
	public Object createNewOID() {
552
		try {
553
			return String.valueOf(getFeatureCount() + 1);
554
		} catch (DataException e) {
555
			return String.valueOf(Math.random());
556
		}
557
	}
558

  
559
	public long getFeatureCount() throws DataException {
560
		if (featureCount == -1) {
561
			wfsStatus.setResultType(WFSStatus.RESULTYPE_HITS);
562
				// The filter encoding is better supported using POST
563
				if (hasFilterByArea) {
564
					wfsStatus.setProtocol(OGCClientOperation.PROTOCOL_POST);
565
				} else {
566
					wfsStatus.setProtocol(OGCClientOperation.PROTOCOL_GET);
567
				}
568
				File file = executeSpatialQuery();
569
				featureCount = ((WFSGetFeatureRequestInformation) wfsClient
570
						.getLastWfsRequestInformation()).getNumberOfFeatures();
571
				// If the service doesn't support RESULTTYPE_HITS, parse the
572
				// file and get the FeatureCount
573
				if (featureCount == -1) {
574
					storeProviderDelegate = createProvider(file);
575
					featureCount = storeProviderDelegate.getFeatureCount();
576
				}
577
		}
578
		return featureCount;
579
	}
580

  
581
	public int getOIDType() {
582
		return DataTypes.STRING;
583
	}
584

  
585
	public ResourceProvider getResource() {
586
		return storeProviderDelegate.getResource();
587
	}
588

  
589
	protected FeatureProvider internalGetFeatureProviderByReference(
590
			FeatureReferenceProviderServices reference, FeatureType featureType)
591
			throws DataException {
592
		return storeProviderDelegate.internalGetFeatureProviderByReference(
593
				reference, featureType);
594
	}
595

  
596
	public String getFullName() {
597
		return getWFSParameters().getUrl() + "_"
598
				+ getWFSParameters().getFeatureType();
599
	}
600

  
601
	public String getName() {
602
		return getWFSParameters().getFeatureType();
603
	}
604

  
605
	public boolean isKnownEnvelope() {
606
		return isKnownEnvelope;
607
	}
608

  
609
	public boolean hasRetrievedFeaturesLimit() {
610
		return true;
611
	}
612

  
613
	public int getRetrievedFeaturesLimit() {
614
		// WFS 1.0.0 can not know where is the limit
615
		if (getWFSParameters().getVersion().equals("1.0.0")) {
616
			return 0;
617
		} else {
618
			return wfsClient.getServiceInformation().getMaxFeatures();
619
		}
620
	}
621

  
622
	public void performChanges(Iterator deleteds, Iterator inserteds,
623
			Iterator updateds, Iterator featureTypesChanged)
624
			throws DataException {
625
		wfsStatus.setProtocol(OGCClientOperation.PROTOCOL_POST);
626
		WFSTTransactionBuilder transactionBuilder = new WFSTTransactionBuilder(
627
				wfsStatus, wfsClient);
628

  
629
		// Create the Query
630
		try {
631
			// Add new features
632
			while (inserteds.hasNext()) {
633
				transactionBuilder.addInsertFeature((FeatureProvider) inserteds
634
						.next());
635
			}
636
			// Add deleted features
637
			while (deleteds.hasNext()) {
638
				transactionBuilder
639
						.addDeleteFeature(internalGetFeatureProviderByReference(
640
								(FeatureReferenceProviderServices) deleteds
641
										.next(), null).getOID().toString());
642
				;
643
			}
644
			// Add updated features
645
			while (updateds.hasNext()) {
646
				transactionBuilder.addUpdateFeature((FeatureProvider) updateds
647
						.next());
648
			}
649
		} catch (WriterHandlerCreationException e) {
650
			throw new WFSTTRansactionException(e);
651
		} catch (GeometryOperationNotSupportedException e) {
652
			throw new WFSTTRansactionException(e);
653
		} catch (GeometryOperationException e) {
654
			throw new WFSTTRansactionException(e);
655
		}
656

  
657
		// Send the query to the server
658
		try {
659
			wfsClient.transaction(wfsStatus, true, null);
660
			WFSTransactionRequestInformation transactionRequestInformation = (WFSTransactionRequestInformation) wfsClient
661
					.getLastWfsRequestInformation();
662
			if (transactionRequestInformation.getStatus() == WFSTransactionRequestInformation.STATUS_FAILED) {
663
				throw new WFSTTRansactionException(
664
						transactionRequestInformation.getMessage());
665
			}
666
		} catch (WFSException e) {
667
			throw new WFSTTRansactionException(e);
668
		}
669
	}
670

  
671
	public boolean allowWrite() {
672
		return wfsClient.getServiceInformation().isOperationSupported(
673
				"Transaction");
674
	}
675

  
676
	public Envelope getEnvelope() throws DataException {
677
		return (Envelope) this.getDynValue("Envelope");
678
	}
679

  
680
	public FeatureProvider createFeatureProvider(FeatureType type)
681
			throws DataException {
682
		return super.createFeatureProvider(type);
683
	}
684

  
685
}
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSTTRansactionException.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.fmap.dal.store.wfs;
23

  
24
import org.gvsig.fmap.dal.exception.DataException;
25

  
26

  
27
/**
28
 * @author gvSIG Team
29
 * @version $Id$
30
 *
31
 */
32
public class WFSTTRansactionException extends DataException {
33
   private static final long serialVersionUID = -5529148262961765052L;
34

  
35
   private final static String MESSAGE_FORMAT = "Can't write the feature.";
36
   private final static String MESSAGE_KEY = "_WFSTTranscationException";
37

  
38
   public WFSTTRansactionException(Throwable cause) {
39
       super(MESSAGE_FORMAT, cause, MESSAGE_KEY, serialVersionUID);  
40
   }
41
   
42
   public WFSTTRansactionException(String message) {
43
       super(message, MESSAGE_KEY, serialVersionUID);  
44
   }
45
}
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSFeatureFiller.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.fmap.dal.store.wfs;
23

  
24
import java.io.File;
25
import java.io.FileInputStream;
26
import java.io.FileNotFoundException;
27
import java.util.Iterator;
28

  
29
import org.gvsig.remoteclient.wfs.WFSFeature;
30
import org.gvsig.tools.dataTypes.DataType;
31
import org.gvsig.xmlschema.lib.api.XMLSchemaLocator;
32
import org.gvsig.xmlschema.lib.api.XMLSchemaManager;
33
import org.gvsig.xmlschema.lib.api.exceptions.SchemaCreationException;
34
import org.gvsig.xmlschema.lib.api.som.IXSComplexContent;
35
import org.gvsig.xmlschema.lib.api.som.IXSComplexTypeDefinition;
36
import org.gvsig.xmlschema.lib.api.som.IXSContentType;
37
import org.gvsig.xmlschema.lib.api.som.IXSElementDeclaration;
38
import org.gvsig.xmlschema.lib.api.som.IXSExtension;
39
import org.gvsig.xmlschema.lib.api.som.IXSGroup;
40
import org.gvsig.xmlschema.lib.api.som.IXSRestriction;
41
import org.gvsig.xmlschema.lib.api.som.IXSSchema;
42
import org.gvsig.xmlschema.lib.api.som.IXSSimpleContent;
43
import org.gvsig.xmlschema.lib.api.som.IXSSimpleTypeDefinition;
44
import org.gvsig.xmlschema.lib.api.som.IXSTypeDefinition;
45
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
47

  
48

  
49
/**
50
 * @author gvSIG Team
51
 * @version $Id$
52
 *
53
 */
54
public class WFSFeatureFiller {
55
   private static final Logger LOG = LoggerFactory.getLogger(WFSFeatureFiller.class);
56
    private XMLSchemaManager xmlSchemaManager = null;
57
    private static final String XMLSCHEMA_PARSER_PROVIDER_NAME = "xmlschema.providers.kxml";
58
    private WFSFeature feature;
59
    
60
    public WFSFeatureFiller(WFSFeature feature) {
61
        super();
62
        xmlSchemaManager =  XMLSchemaLocator.getXMLSchemaManager();
63
        this.feature = feature;
64
    }
65

  
66
    /**
67
     * @param describeFeatureTypeFile
68
     * @param feature
69
     * @throws FileNotFoundException 
70
     * @throws SchemaCreationException 
71
     */
72
    public void fill(File describeFeatureTypeFile) throws SchemaCreationException, FileNotFoundException {
73
        IXSSchema schema = xmlSchemaManager.parse(XMLSCHEMA_PARSER_PROVIDER_NAME, new FileInputStream(describeFeatureTypeFile));
74
        IXSElementDeclaration elementDeclaration = null;
75
        if (feature.getNamespace() == null){
76
            elementDeclaration = schema.getElementDeclarationByName(null, feature.getName()); 
77
        }else{
78
            elementDeclaration = schema.getElementDeclarationByName(feature.getNamespace().getLocation(), feature.getLocalName());
79
        }
80
        if (elementDeclaration == null){
81
            return;
82
        }
83
        IXSTypeDefinition typeDefinition = elementDeclaration.getTypeDefinition();
84
        if (typeDefinition == null){
85
            return;
86
        }
87
        if (typeDefinition instanceof IXSSimpleTypeDefinition){
88
            
89
        }else if (typeDefinition instanceof IXSComplexTypeDefinition){ 
90
            fill((IXSComplexTypeDefinition)typeDefinition);
91
        }
92
        feature.setCompleted(true);
93
    }
94

  
95
    /**
96
     * @param typeDefinition
97
     */
98
    private void fill(IXSComplexTypeDefinition complexTypeDefinition) {
99
        IXSContentType contentType = complexTypeDefinition.getContentType();
100
        if (contentType != null){
101
            fill((IXSContentType)contentType);
102
        }
103
        IXSGroup group = complexTypeDefinition.getGroup();
104
        if (group != null){
105
            fill((IXSGroup)contentType);
106
        }        
107
    }
108

  
109
    /**
110
     * @param complexTypeDefinition
111
     */
112
    private void fill(IXSGroup group) {
113
        Iterator it = group.getItems().iterator();
114
        while (it.hasNext()){
115
            Object item = it.next();
116
            if (item instanceof IXSElementDeclaration){
117
                IXSElementDeclaration elementDeclaration = (IXSElementDeclaration)item;       
118
                DataType dataType = null;
119
                if (elementDeclaration.getTypeDefinition() != null){
120
                    dataType = elementDeclaration.getTypeDefinition().getDataType();
121
                }
122
                
123
                if (dataType == null || elementDeclaration.getNodeName() == null) {
124
                    LOG.info("Feature attribute type not recognized: "
125
                        + elementDeclaration.toString(),
126
                        new Exception("Feature attribute type not recognized: "
127
                        + elementDeclaration.toString()));
128
                } else {
129
                    feature.addField(elementDeclaration.getNodeName(), elementDeclaration.getTypeName(), dataType);
130
                }
131
                       
132
            }else {
133
                LOG.info("Feature attribute not recognized: "
134
                    + (item == null ? "NULL" : item.getClass().getName()),
135
                        new Exception("Feature attribute not recognized"));
136
            }               
137
        }      
138
    }
139

  
140
    /**
141
     * @param complexTypeDefinition
142
     */
143
    private void fill(IXSContentType contentType) {
144
        if (contentType instanceof IXSSimpleContent){
145
           fill((IXSSimpleContent)contentType);
146
        }else if (contentType instanceof IXSComplexContent){
147
            fill((IXSComplexContent)contentType);
148
        }else if (contentType instanceof IXSGroup){
149
           fill((IXSGroup)contentType);
150
        }        
151
    }
152
    
153
    private void fill(IXSSimpleContent simpleContent) {
154
        IXSRestriction restriction = simpleContent.getRestriction();
155
        if (restriction != null){
156
            fill(restriction);
157
        }
158
        IXSExtension extension = simpleContent.getExtension();
159
        if (extension != null){
160
            fill(extension);
161
        }
162
    }
163
    
164
    private void fill(IXSComplexContent complexContent) {
165
        IXSRestriction restriction = complexContent.getRestriction();
166
        if (restriction != null){
167
            fill(restriction);
168
        }
169
        IXSExtension extension = complexContent.getExtension();
170
        if (extension != null){
171
            fill(extension);
172
        }
173
    }
174

  
175
    /**
176
     * @param extension
177
     */
178
    private void fill(IXSExtension extension) {
179
        IXSGroup group = extension.getGroup();
180
        if (group != null){
181
            fill(group);
182
        }        
183
    }
184

  
185
    /**
186
     * @param restriction
187
     */
188
    private void fill(IXSRestriction restriction) {
189
        IXSGroup group = restriction.getGroup();
190
        if (group != null){
191
            fill(group);
192
        }            
193
    }
194
}
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSStoreParameters.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
*/
22

  
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 {Iver T.I.}   {Task}
26
*/
27

  
28
package org.gvsig.fmap.dal.store.wfs;
29

  
30
import org.apache.commons.lang3.BooleanUtils;
31
import org.cresques.cts.IProjection;
32
import org.gvsig.fmap.dal.DataParameters;
33
import org.gvsig.fmap.dal.DataStoreParameters;
34
import org.gvsig.fmap.dal.DataTypes;
35
import org.gvsig.fmap.dal.exception.InitializeException;
36
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
37
import org.gvsig.fmap.dal.spi.AbstractDataParameters;
38
import org.gvsig.fmap.geom.Geometry;
39
import org.gvsig.fmap.geom.primitive.Envelope;
40
import org.gvsig.tools.ToolsLocator;
41
import org.gvsig.tools.dynobject.DelegatedDynObject;
42
import org.gvsig.tools.dynobject.DynClass;
43
import org.gvsig.tools.dynobject.DynStruct;
44
import org.gvsig.tools.persistence.PersistenceManager;
45

  
46
/**
47
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
48
 */
49
public class WFSStoreParameters extends AbstractDataParameters implements
50
 DataStoreParameters{
51
	protected static DynClass DYNCLASS = null;
52
	public static final String DYNCLASS_NAME = "WFSStoreParameters";
53

  
54
	public static final String DYNFIELDNAME_URL = "url";
55
	public static final String DYNFIELDNAME_VERSION = "version";
56
	public static final String DYNFIELDNAME_TYPENAME = "typeName";
57
	public static final String DYNFIELDNAME_NAMESPACE = "namespace";
58
	public static final String DYNFIELDNAME_NAMESPACEPREFIX = "namespacePrefix";
59
	public static final String DYNFIELDNAME_FIELDS = "fields";
60
	public static final String DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE = "filterEncodingByAttribute";
61
	public static final String DYNFIELDNAME_MAXFEATURES = "maxFeatures";
62
	public static final String DYNFIELDNAME_TIMEOUT = "timeOut";
63
	public static final String DYNFIELDNAME_USER = "user";
64
	public static final String DYNFIELDNAME_PASSWORD = "password";
65
	public static final String DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY = "filterByAreaGeometry";
66
	public static final String DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE = "filterByAreaEnvelope";
67
	public static final String DYNFIELDNAME_FILTER_BY_AREA_OPERATION = "filterByAreaOperation";
68
	public static final String DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE = "filterByAreaAttribute";
69
	public static final String DYNFIELDNAME_FILTER_BY_AREA_CRS = "filterByAreaCrs";
70
	public static final String DYNFIELDNAME_CRS = "Crs";
71

  
72
	private DelegatedDynObject delegatedDynObject;
73

  
74
	public WFSStoreParameters() {
75
		super();
76
		this.delegatedDynObject = (DelegatedDynObject) ToolsLocator
77
		.getDynObjectManager().createDynObject(
78
			WFSStoreParameters.DYNCLASS);
79
	}
80

  
81
	@Override
82
	protected DelegatedDynObject getDelegatedDynObject() {
83
		return delegatedDynObject;
84
	}
85

  
86
	public WFSStoreParameters(DataParameters dataParameters) throws InitializeException, ProviderNotRegisteredException{
87
		this();
88
		setUrl((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_URL));
89
		String namespace = null;
90
		String namespacePrefix = null;
91
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_NAMESPACE)){
92
			namespace = (String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_NAMESPACE);
93
		}
94
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_NAMESPACEPREFIX)){
95
			namespacePrefix = (String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_NAMESPACEPREFIX);
96
		}
97
		setFeatureType(namespacePrefix, namespace,
98
				(String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_TYPENAME));
99
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_MAXFEATURES)){
100
			setMaxFeatures((Integer)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_MAXFEATURES));
101
		}else{
102
			setMaxFeatures(1000);
103
		}
104
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_TIMEOUT)){
105
			setTimeOut((Integer)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_TIMEOUT));
106
		}else{
107
			setTimeOut(10000);
108
		}
109
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY)){
110
			setFilterByAreaGeometry((Geometry)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY));
111
			setFilterByAreaAttribute((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE));
112
			setFilterByAreaCrs((IProjection)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_CRS));
113
			setFilterByAreaOperation((Integer)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_OPERATION));
114
		}
115
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE)){
116
			setFilterByAreaEnvelope((Envelope)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE));
117
			setFilterByAreaAttribute((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE));
118
			setFilterByAreaCrs((IProjection)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_CRS));
119
			setFilterByAreaOperation((Integer)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_BY_AREA_OPERATION));
120
		}
121
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_VERSION)){
122
			setVersion((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_VERSION));
123
		}
124
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE)){
125
			setFilterEncodingByAttribute((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE));
126
		}
127
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_USER)){
128
			setUser((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_USER));
129
		}
130
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_PASSWORD)){
131
			setPassword((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_PASSWORD));
132
		}
133
		if (dataParameters.hasDynValue(WFSStoreParameters.DYNFIELDNAME_CRS)){
134
			setCrs((String)dataParameters.getDynValue(WFSStoreParameters.DYNFIELDNAME_CRS));
135
		}
136
	}
137

  
138
	protected static void registerDynClass() {
139
		if (DYNCLASS == null) {
140
			PersistenceManager manager = ToolsLocator.getPersistenceManager();
141
			DynStruct definition = manager.addDefinition(
142
					WFSStoreParameters.class,
143
					DYNCLASS_NAME,
144
					"WFSStoreParameters Persistence definition",
145
					null,
146
					null
147
			);
148
			definition.addDynFieldString(DYNFIELDNAME_URL)
149
				.setDescription("URL of the WFS server")
150
				.setMandatory(true);
151

  
152
			definition.addDynFieldString(DYNFIELDNAME_VERSION)
153
				.setDescription("Version of the WFS server")
154
				.setMandatory(false);
155

  
156
			definition.addDynFieldString(DYNFIELDNAME_TYPENAME)
157
				.setDescription("Feature type to retrieve")
158
				.setMandatory(true);
159

  
160
			definition.addDynFieldString(DYNFIELDNAME_NAMESPACE)
161
				.setDescription("Namespace of the feature type to retrieve")
162
				.setMandatory(false);
163

  
164
			definition.addDynFieldString(DYNFIELDNAME_NAMESPACEPREFIX)
165
				.setDescription("Prefix of the namespace of the feature type to retrieve")
166
				.setMandatory(false);
167

  
168
			definition.addDynFieldString(DYNFIELDNAME_FIELDS)
169
				.setDescription("Fields to retrieve separated by ','")
170
				.setMandatory(false);
171

  
172
			definition.addDynFieldString(DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE)
173
				.setDescription("Filter encoding request")
174
				.setMandatory(false);
175

  
176
			definition.addDynFieldInt(DYNFIELDNAME_MAXFEATURES)
177
				.setDescription("Number of features to retrieve")
178
				.setMandatory(false);
179

  
180
			definition.addDynFieldInt(DYNFIELDNAME_TIMEOUT)
181
				.setDescription("Timeout")
182
				.setMandatory(false);
183

  
184
			definition.addDynFieldString(DYNFIELDNAME_USER)
185
				.setDescription("User name (not used at this moment)")
186
				.setMandatory(false);
187

  
188
			definition.addDynFieldString(DYNFIELDNAME_PASSWORD)
189
				.setDescription("Password (not used at this moment")
190
				.setMandatory(false);
191

  
192
			definition.addDynFieldObject(DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY)
193
				.setType(DataTypes.GEOMETRY)
194
				.setDescription("Geometry used to do the filter")
195
				.setMandatory(false);
196

  
197
			definition.addDynFieldObject(DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE)
198
			.setType(DataTypes.ENVELOPE)
199
			.setDescription("Envelope used to do the filter")
200
			.setMandatory(false);
201

  
202
			definition.addDynFieldInt(DYNFIELDNAME_FILTER_BY_AREA_OPERATION)
203
				.setDescription("Geometry operation used to do the filter")
204
				.setMandatory(false);
205

  
206
			definition.addDynFieldString(DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE)
207
				.setDescription("Attribute that contains the geometry")
208
				.setMandatory(false);
209

  
210
			definition.addDynFieldObject(DYNFIELDNAME_FILTER_BY_AREA_CRS)
211
			.setType(DataTypes.CRS)
212
			.setDescription("CRS to do the spatial filter of the query")
213
			.setMandatory(false);
214

  
215
			definition.addDynFieldString(DYNFIELDNAME_CRS)
216
			.setDescription("CRS")
217
			.setMandatory(false);
218

  
219
			definition.addDynFieldBoolean("useAxisOrderYX")
220
                                .setDefaultFieldValue("false")
221
				.setMandatory(false);
222

  
223
			definition.addDynFieldBoolean("ignoreCache")
224
                                .setDefaultFieldValue("false")
225
				.setMandatory(false);
226

  
227
			DYNCLASS = (DynClass) definition;
228
		}
229
	}
230

  
231
	/* (non-Javadoc)
232
	 * @see org.gvsig.fmap.dal.DataStoreParameters#getDataStoreName()
233
	 */
234
	public String getDataStoreName() {
235
		return WFSStoreProvider.NAME;
236
	}
237

  
238
	/* (non-Javadoc)
239
	 * @see org.gvsig.fmap.dal.DataStoreParameters#getDescription()
240
	 */
241
	public String getDescription() {
242
		return WFSStoreProvider.DESCRIPTION;
243
	}
244

  
245
	/* (non-Javadoc)
246
	 * @see org.gvsig.fmap.dal.DataStoreParameters#isValid()
247
	 */
248
	public boolean isValid() {
249
		// TODO Auto-generated method stub
250
		return false;
251
	}
252

  
253
	public String getUrl(){
254
		return (String) this.getDynValue(DYNFIELDNAME_URL);
255
	}
256

  
257
	public void setUrl(String url){
258
		this.setDynValue(DYNFIELDNAME_URL, url);
259
	}
260

  
261
	public String getVersion(){
262
		return (String) this.getDynValue(DYNFIELDNAME_VERSION);
263
	}
264

  
265
	public void setVersion(String version){
266
		this.setDynValue(DYNFIELDNAME_VERSION, version);
267
	}
268

  
269
	public String getFeatureType(){
270
		return (String) this.getDynValue(DYNFIELDNAME_TYPENAME);
271
	}
272

  
273
	public void setFeatureType(String featureType){
274
		this.setDynValue(DYNFIELDNAME_TYPENAME, featureType);
275
	}
276

  
277
	public void setFeatureType(String namespace, String featureType){
278
		this.setDynValue(DYNFIELDNAME_NAMESPACE, namespace);
279
		this.setDynValue(DYNFIELDNAME_TYPENAME, featureType);
280
	}
281

  
282
	public void setFeatureType(String prefix, String namespace, String featureType){
283
		this.setDynValue(DYNFIELDNAME_NAMESPACEPREFIX, prefix);
284
		this.setDynValue(DYNFIELDNAME_NAMESPACE, namespace);
285
		this.setDynValue(DYNFIELDNAME_TYPENAME, featureType);
286
	}
287

  
288
	public String getFeatureNamespace(){
289
		return (String) this.getDynValue(DYNFIELDNAME_NAMESPACE);
290
	}
291

  
292
	public String getFeaturePrefix(){
293
		return (String) this.getDynValue(DYNFIELDNAME_NAMESPACEPREFIX);
294
	}
295

  
296
	public String getFields(){
297
		return (String) this.getDynValue(DYNFIELDNAME_FIELDS);
298
	}
299

  
300
	public void setFields(String fields){
301
		this.setDynValue(DYNFIELDNAME_FIELDS, fields);
302
	}
303

  
304
	public String getFilterEncodingByAttribute(){
305
		return (String) this.getDynValue(DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE);
306
	}
307

  
308
	public void setFilterEncodingByAttribute(String filter){
309
		this.setDynValue(DYNFIELDNAME_FILTER_ENCODING_BY_ATTRIBUTE, filter);
310
	}
311

  
312
	public Integer getMaxFeatures(){
313
		return (Integer) this.getDynValue(DYNFIELDNAME_MAXFEATURES);
314
	}
315

  
316
	public void setMaxFeatures(Integer maxFeatures){
317
		this.setDynValue(DYNFIELDNAME_MAXFEATURES, maxFeatures);
318
	}
319

  
320
	public Integer getTimeOut(){
321
		return (Integer) this.getDynValue(DYNFIELDNAME_TIMEOUT);
322
	}
323

  
324
	public void setTimeOut(Integer timeOut){
325
		this.setDynValue(DYNFIELDNAME_TIMEOUT, timeOut);
326
	}
327

  
328
	public String getUser(){
329
		return (String) this.getDynValue(DYNFIELDNAME_USER);
330
	}
331

  
332
	public void setUser(String user){
333
		this.setDynValue(DYNFIELDNAME_USER, user);
334
	}
335

  
336
	public String getPassword(){
337
		return (String) this.getDynValue(DYNFIELDNAME_PASSWORD);
338
	}
339

  
340
	public void setPassword(String password){
341
		this.setDynValue(DYNFIELDNAME_PASSWORD, password);
342
	}
343

  
344
	public Geometry getFilterByAreaGeometry(){
345
		return (Geometry) this.getDynValue(DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY);
346
	}
347

  
348
	public void setFilterByAreaGeometry(Geometry area){
349
		this.setDynValue(DYNFIELDNAME_FILTER_BY_AREA_GEOMETRY, area);
350
	}
351

  
352
	public Envelope getFilterByAreaEnvelope(){
353
		return (Envelope) this.getDynValue(DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE);
354
	}
355

  
356
	public void setFilterByAreaEnvelope(Envelope area){
357
		this.setDynValue(DYNFIELDNAME_FILTER_BY_AREA_ENVELOPE, area);
358
	}
359

  
360
	public Integer getFilterByAreaOperation(){
361
		return (Integer) this.getDynValue(DYNFIELDNAME_FILTER_BY_AREA_OPERATION);
362
	}
363

  
364
	public void setFilterByAreaOperation(Integer operation){
365
		this.setDynValue(DYNFIELDNAME_FILTER_BY_AREA_OPERATION, operation);
366
	}
367

  
368
	public IProjection getFilterByAreaCrs(){
369
		return (IProjection) this.getDynValue(DYNFIELDNAME_FILTER_BY_AREA_CRS);
370
	}
371

  
372
	public void setFilterByAreaCrs(IProjection crs){
373
		this.setDynValue(DYNFIELDNAME_FILTER_BY_AREA_CRS, crs);
374
	}
375

  
376
	public String getCrs(){
377
		return (String) this.getDynValue(DYNFIELDNAME_CRS);
378
	}
379

  
380
	public void setCrs(String crs){
381
		this.setDynValue(DYNFIELDNAME_CRS, crs);
382
	}
383

  
384
	public String getFilterByAreaAttribute(){
385
		return (String) this.getDynValue(DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE);
386
	}
387

  
388
	public void setFilterByAreaAttribute(String attribute){
389
		this.setDynValue(DYNFIELDNAME_FILTER_BY_AREA_ATTRIBUTE, attribute);
390
	}
391

  
392
	public boolean getUseAxisOrderYX() {
393
            Boolean x = (Boolean) this.getDynValue("useAxisOrderYX");
394
            return BooleanUtils.isTrue(x);
395
	}
396

  
397
	public void setUseAxisOrderYX(boolean useAxisOrderYX){
398
            this.setDynValue("useAxisOrderYX", new Boolean(useAxisOrderYX));
399
	}
400

  
401
        public boolean getIgnoreCache() {
402
            Boolean x = (Boolean) this.getDynValue("ignoreCache");
403
            return BooleanUtils.isTrue(x);
404
	}
405

  
406
	public void setIgnoreCache(boolean ignoreCache){
407
            this.setDynValue("ignoreCache", new Boolean(ignoreCache));
408
	}
409
}
410

  
org.gvsig.wfs.app/tags/org.gvsig.wfs.app-2.0.51/org.gvsig.wfs.app.mainplugin/src/main/java/org/gvsig/fmap/dal/store/wfs/WFSTTransactionBuilder.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff