Revision 32543 branches/v2_0_0_prep/extensions/org.gvsig.arcims.feature.extension/src/main/java/org/gvsig/fmap/dal/store/arcims/ArcImsStoreProvider.java

View differences:

ArcImsStoreProvider.java
28 28

  
29 29
package org.gvsig.fmap.dal.store.arcims;
30 30

  
31
import java.util.ArrayList;
32
import java.util.HashMap;
33
import java.util.Iterator;
34
import java.util.List;
35
import java.util.Map;
31 36
import java.util.Vector;
32 37

  
38
import org.gvsig.fmap.crs.CRSFactory;
33 39
import org.gvsig.fmap.dal.DALLocator;
40
import org.gvsig.fmap.dal.DataManager;
34 41
import org.gvsig.fmap.dal.DataServerExplorer;
35 42
import org.gvsig.fmap.dal.DataStoreParameters;
43
import org.gvsig.fmap.dal.DataTypes;
36 44
import org.gvsig.fmap.dal.exception.DataException;
37 45
import org.gvsig.fmap.dal.exception.InitializeException;
38 46
import org.gvsig.fmap.dal.exception.OpenException;
39 47
import org.gvsig.fmap.dal.exception.ReadException;
40
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
48
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
41 49
import org.gvsig.fmap.dal.feature.EditableFeatureType;
50
import org.gvsig.fmap.dal.feature.Feature;
42 51
import org.gvsig.fmap.dal.feature.FeatureQuery;
52
import org.gvsig.fmap.dal.feature.FeatureSelection;
43 53
import org.gvsig.fmap.dal.feature.FeatureStore;
44 54
import org.gvsig.fmap.dal.feature.FeatureType;
45
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
46
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
47
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureType;
48 55
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
56
import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
49 57
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
50 58
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
51 59
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
60
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
52 61
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
53 62
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
54 63
import org.gvsig.fmap.dal.serverexplorer.arcims.ArcImsServerExplorer;
64
import org.gvsig.fmap.dal.serverexplorer.arcims.ArcImsServerExplorerParameters;
55 65
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
66
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
67
import org.gvsig.fmap.geom.Geometry.TYPES;
56 68
import org.gvsig.remoteclient.arcims.ArcImsClient;
69
import org.gvsig.remoteclient.arcims.ArcImsFeatureClient;
70
import org.gvsig.remoteclient.arcims.ArcImsProtFeatureHandler;
57 71
import org.gvsig.remoteclient.arcims.ArcImsStatus;
72
import org.gvsig.remoteclient.arcims.ArcImsVectStatus;
73
import org.gvsig.remoteclient.arcims.exceptions.ArcImsException;
74
import org.gvsig.remoteclient.arcims.utils.ArcImsFeature;
58 75
import org.gvsig.remoteclient.arcims.utils.FieldInformation;
59 76
import org.gvsig.remoteclient.arcims.utils.ServiceInformation;
60
import org.gvsig.remoteclient.arcims.utils.ServiceInformationLayer;
61 77
import org.gvsig.remoteclient.arcims.utils.ServiceInformationLayerFeatures;
62 78
import org.gvsig.tools.ToolsLocator;
63 79
import org.gvsig.tools.dynobject.DynClass;
......
66 82
import org.slf4j.LoggerFactory;
67 83

  
68 84
/**
69
 * @author vsanjaime
85
 * ArcIMS datastore parameters
86
 * 
87
 * @author vsanjaime version 2.0
88
 * 
70 89
 */
71 90
public class ArcImsStoreProvider extends AbstractFeatureStoreProvider implements
72 91
		ResourceConsumer {
......
81 100
	// ArcIms Parameters
82 101
	private ArcImsClient arcimsClient;
83 102
	private ArcImsStatus arcimsStatus;
103
	private int numFeats = 0;
104
	protected boolean isOpen = false;	
84 105

  
85 106
	/**
86 107
	 * Constructor
......
91 112
	 */
92 113
	public ArcImsStoreProvider(DataStoreParameters params,
93 114
			DataStoreProviderServices storeServices) throws InitializeException {
94
		
115

  
95 116
		super(params, storeServices, ToolsLocator.getDynObjectManager()
96
				.createDynObject(DYNCLASS));
117
				.createDynObject(DYNCLASS));		
97 118
		
119
		// build status from parameters
120
		ArcImsStoreParameters pa = (ArcImsStoreParameters) params;
121
		arcimsClient = new ArcImsFeatureClient(pa.getServerUrl(), pa
122
				.getServiceName());
123
		arcimsStatus = new ArcImsVectStatus();
124
		arcimsStatus.setLayersIdsSelected(pa.getSelectedLayers());
125
		arcimsStatus.setServiceInformation(pa.getServiceInfo());
126
		arcimsStatus.setSrs(pa.getSRS().getAbrev());
127
		arcimsStatus.setEnvelope(pa.getEnvelope());
128

  
129
		// initialize default feature type
130
		this.initDefaultFeatureType();
131

  
98 132
	}
99
	
133

  
100 134
	/**
101 135
	 * 
102 136
	 */
......
113 147

  
114 148
	}
115 149

  
150
	/**
151
	 * 
152
	 */
116 153
	@Override
117 154
	protected FeatureProvider internalGetFeatureProviderByReference(
118 155
			FeatureReferenceProviderServices reference, FeatureType featureType)
119 156
			throws DataException {
120
		// TODO Auto-generated method stub
157
		logger
158
				.info("ArcImsStoreProvider: internalGetFeatureProviderByReference");
121 159
		return null;
122 160
	}
123 161

  
162
	/**
163
	 * 
164
	 */
124 165
	public boolean closeResourceRequested(ResourceProvider resource) {
125
		// TODO Auto-generated method stub
166
		logger.info("ArcImsStoreProvider: closeResourceRequested");
126 167
		return false;
127 168
	}
128 169

  
170
	/**
171
	 * 
172
	 */
129 173
	public void resourceChanged(ResourceProvider resource) {
130
		// TODO Auto-generated method stub
174
		logger.info("ArcImsStoreProvider: resourceChanged");
131 175

  
132 176
	}
133 177

  
178
	/**
179
	 * 
180
	 */
134 181
	public Object createNewOID() {
182
		logger.info("ArcImsStoreProvider: createNewOID");
135 183
		return null;
136 184
	}
137 185

  
186
	/**
187
	 * 
188
	 */
138 189
	public FeatureSetProvider createSet(FeatureQuery query,
139 190
			FeatureType featureType) throws DataException {
140
		// TODO Auto-generated method stub
141
		return null;
191
		logger.info("ArcImsStoreProvider: createSet");
192
		//isOpen = false;
193
		open();
194
		return new ArcImsSetProvider(this, query);
142 195
	}
143 196

  
197
	/**
198
	 * 
199
	 */
144 200
	public long getFeatureCount() throws DataException {
145
		// TODO Auto-generated method stub
146
		return 0;
201
		logger.info("ArcImsStoreProvider: getFeatureCount");
202

  
203
		return this.numFeats;
147 204
	}
148 205

  
206
	/**
207
	 * 
208
	 */
149 209
	public String getName() {
150 210
		return NAME;
151 211
	}
152 212

  
213
	/**
214
	 * 
215
	 */
153 216
	public int getOIDType() {
154
		// TODO Auto-generated method stub
217
		logger.info("ArcImsStoreProvider: getOIDType");
155 218
		return 0;
156 219
	}
157 220

  
158 221
	public ResourceProvider getResource() {
159
		// TODO Auto-generated method stub
222
		logger.info("ArcImsStoreProvider: getResource");
160 223
		return null;
161 224
	}
162 225

  
163 226
	public Object getSourceId() {
164
		// TODO Auto-generated method stub
227
		logger.info("ArcImsStoreProvider: getSourceId");
165 228
		return null;
166 229
	}
167 230

  
168 231
	public void open() throws OpenException {
169
	
170
		// TODO Auto-generated method stub
232
		logger.info("ArcImsStoreProvider: open");
233
		if (isOpen) {
234
			return;
235
		}
171 236

  
237
		this.numFeats = 0;
238

  
239
		FeatureStoreProviderServices store = (FeatureStoreProviderServices) this
240
				.getFeatureStore();
241

  
242
		// add features to store
243
		List<List<ArcImsFeature>> feats = null;
244
		try {
245
			feats = ((ArcImsProtFeatureHandler) arcimsClient.getHandler())
246
					.getMap((ArcImsVectStatus) arcimsStatus);
247
		} catch (ArcImsException e) {
248
			logger.debug("Error getting the atributes", e);
249
		}
250
		if (feats != null && feats.size() > 0) {
251
			//TODO Por ahora solo el primer elemento
252
			List<ArcImsFeature> feats2 = feats.get(0);
253
			for (ArcImsFeature aFeat : feats2) {
254
				if (aFeat.isValid()) {
255
					try {
256
						this.addFeatureToStore((FeatureStore) store, aFeat);
257
						this.numFeats++;
258
					} catch (DataException e) {
259
						logger.error("Error adding feature", e);
260
						continue;
261
					}
262
				}
263

  
264
			}
265
		}
266
		isOpen = true;
267

  
172 268
	}
269

  
173 270
	/**
174 271
	 * 
272
	 * @param store
273
	 * @param feature
274
	 * @throws DataException
275
	 */
276
	public void addFeatureToStore(FeatureStore store, ArcImsFeature feature)
277
			throws DataException {
278

  
279
		if (store != null) {
280
			// EditableFeature eFeat = store.createNewFeature();
281
			FeatureProvider data = new DefaultFeatureProvider(store
282
					.getDefaultFeatureType(), this.createNewOID());
283
			data.setDefaultGeometry(feature.getGeometry());
284
			Iterator<Map.Entry<String, Object>> it = feature.entrySet()
285
					.iterator();
286
			while (it.hasNext()) {
287
				Map.Entry<String, Object> entry = it.next();
288
				String key = entry.getKey();
289
				Object value = entry.getValue();
290
				if (key.compareToIgnoreCase("#SHAPE#") != 0) {
291
					data.set(key, value);
292
				}
293

  
294
			}
295
			((FeatureStoreProviderServices) store).createFeature(data);		
296

  
297
		}
298
	}
299

  
300
	/**
301
	 * 
175 302
	 * @param params
176 303
	 * @param layerId
177 304
	 * @param status
178 305
	 * @return
179 306
	 */
180
	private FeatureType createFeatureType(DataStoreParameters params, String layerId, ArcImsStatus status){
181
		
182
		EditableFeatureType eFType = (EditableFeatureType) ((NewFeatureStoreParameters) params).getDefaultFeatureType();
307
	private FeatureType createFeatureType(ArcImsStoreParameters params,
308
			String layerId, ArcImsStatus status) {
309

  
310
		logger.info("ArcImsStoreProvider: createFeatureType");
311

  
312
		EditableFeatureType eFType = ((FeatureStoreProviderServices) this
313
				.getFeatureStore()).createFeatureType();
183 314
		ServiceInformation infoService = status.getServiceInfo();
184
		ServiceInformationLayerFeatures infoLayer = (ServiceInformationLayerFeatures)infoService.getLayerById(layerId);
185
		
315
		ServiceInformationLayerFeatures infoLayer = (ServiceInformationLayerFeatures) infoService
316
				.getLayerById(layerId);
317

  
186 318
		Vector<FieldInformation> fieldsInfo = infoLayer.getFieldsInfo();
187 319
		for (FieldInformation fieldInfo : fieldsInfo) {
188
			eFType.add(fieldInfo.getName(), fieldInfo.getType());
189
		}		
190
		
320
			logger.info("Name: " + fieldInfo.getName() + " Type: "
321
					+ fieldInfo.getType());
322
			if (parseType(fieldInfo.getType()) == DataTypes.GEOMETRY) {
323
				// TYPES.GEOMETRY
324
				String geometryType = status.getServiceInfo().getType();
325
				int geomType = TYPES.SURFACE;
326
				if (geometryType.compareToIgnoreCase("line") == 0) {
327
					geomType = TYPES.CURVE;
328
				}
329
				if (geometryType.compareToIgnoreCase("point") == 0) {
330
					geomType = TYPES.POINT;
331
				}
332

  
333
				EditableFeatureAttributeDescriptor attributeDescriptor = eFType
334
						.add("geom", DataTypes.GEOMETRY).setGeometryType(
335
								geomType);
336
				attributeDescriptor.setGeometrySubType(SUBTYPES.GEOM2D);
337
				attributeDescriptor.setSRS(CRSFactory.getCRS(arcimsStatus
338
						.getSrs()));
339
				eFType.setDefaultGeometryAttributeName("geom");
340
			} else {
341
				eFType.add(fieldInfo.getName(), parseType(fieldInfo.getType()));
342
			}
343
		}
344

  
191 345
		return eFType.getNotEditableCopy();
346
	}
347

  
348
	
349

  
350
	/**
351
	 * It executes a wfs Query without spatial filter
352
	 * 
353
	 * @throws DataException
354
	 */
355
	private void executeQuery() throws DataException {
356

  
357
		logger.info("ArcImsStoreProvider: executeQuery");
358

  
359
	}
360

  
361
	/*
362
	 * (non-Javadoc)
363
	 * 
364
	 * @see
365
	 * org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getExplorer()
366
	 */
367
	public DataServerExplorer getExplorer() throws ReadException {
368

  
369
		logger.info("ArcImsStoreProvider: getExplorer");
370

  
371
		DataManager manager = DALLocator.getDataManager();
372
		ArcImsServerExplorerParameters params;
373
		try {
374
			params = (ArcImsServerExplorerParameters) manager
375
					.createServerExplorerParameters(ArcImsServerExplorer.NAME);
376
			params.setUrl(arcimsClient.getHost());
377
			params.setVersion(arcimsStatus.getServerVersion());
378
			return manager.createServerExplorer(params);
379
		} catch (Exception e) {
380
			throw new ReadException(this.getName(), e);
381
		}
382
	}
383

  
384

  
385

  
386
	/**
387
	 * 
388
	 */
389
	private void initDefaultFeatureType() {
390

  
391
		FeatureStoreProviderServices store = (FeatureStoreProviderServices) this
392
				.getFeatureStore();
393
		// Add Feature type
394
		FeatureType defaultFType = this.createFeatureType(
395
				getArcImsParameters(), arcimsStatus.getLayersIdsSelected().get(
396
						0), arcimsStatus);
397
		List<FeatureType> types = new ArrayList<FeatureType>(1);
398
		types.add(defaultFType);
399
		store.setFeatureTypes(types, defaultFType);
192 400
		
401

  
193 402
	}
194 403

  
404
	/**
405
	 * Get number 
406
	 * @return
407
	 */
408
	public int getNumFeats() {
409
		return numFeats;
410
	}
411

  
412
	/**
413
	 * 
414
	 * @return
415
	 * @throws DataException
416
	 */
417
	public HashMap getMapFeatures() throws DataException {
418
		HashMap feats = new HashMap();
419
		FeatureStore store = this.getFeatureStore();
420
		FeatureSelection sel = store.getFeatureSelection();
421
		sel.selectAll();
422
		Iterator<Feature> it = sel.iterator();
423
		int id = 0;
424
		while (it.hasNext()) {
425
			Feature feat = it.next();
426
			feats.put(id, feat);
427
			id++;
428
		}
429

  
430
		return feats;
431
	}
432
	
433
	
434
	/**
435
	 * Parse arcims attribute type to gvsig attribute type
436
	 * @param arcimsType
437
	 * @return
438
	 */
439
	private int parseType(int arcimsType) {
440

  
441
		switch (arcimsType) {
442
		case FieldInformation.BOOLEAN:
443
			return DataTypes.BOOLEAN;
444
		case FieldInformation.SHAPE:
445
			return DataTypes.GEOMETRY;
446
		case FieldInformation.STRING:
447
			return DataTypes.STRING;
448
		case FieldInformation.DATE:
449
			return DataTypes.DATE;
450
		case FieldInformation.FLOAT:
451
			return DataTypes.FLOAT;
452
		case FieldInformation.DOUBLE:
453
			return DataTypes.DOUBLE;
454
		case FieldInformation.SMALLINT:
455
			return DataTypes.INT;
456
		case FieldInformation.BIGINT:
457
			return DataTypes.INT;
458
		case FieldInformation.ID:
459
			return DataTypes.STRING;
460
		case FieldInformation.INTEGER:
461
			return DataTypes.INT;
462
		default:
463
			return DataTypes.UNKNOWN;
464
		}
465

  
466
	}
467
	
468
	/**
469
	 * Get arcims parameters
470
	 * @return
471
	 */
472
	private ArcImsStoreParameters getArcImsParameters() {
473
		return (ArcImsStoreParameters) getParameters();
474
	}
475

  
195 476
}

Also available in: Unified diff