Revision 32543

View differences:

branches/v2_0_0_prep/extensions/org.gvsig.arcims.feature.extension/src/main/java/org/gvsig/fmap/dal/store/arcims/ArcImsStoreParameters.java
28 28

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

  
31
import java.util.Vector;
32

  
33
import org.cresques.cts.IProjection;
31 34
import org.gvsig.fmap.dal.DataParameters;
32 35
import org.gvsig.fmap.dal.DataStoreParameters;
33 36
import org.gvsig.fmap.dal.DataTypes;
34 37
import org.gvsig.fmap.dal.exception.InitializeException;
35 38
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
36 39
import org.gvsig.fmap.dal.spi.AbstractDataParameters;
40
import org.gvsig.fmap.geom.primitive.impl.Envelope2D;
41
import org.gvsig.remoteclient.arcims.utils.ServiceInformation;
37 42
import org.gvsig.tools.ToolsLocator;
38 43
import org.gvsig.tools.dynobject.DelegatedDynObject;
39 44
import org.gvsig.tools.dynobject.DynClass;
......
41 46
import org.gvsig.tools.dynobject.DynObjectManager;
42 47

  
43 48
/**
44
 * vsanjaime
49
 * ArcIMS provider parameters
50
 * 
51
 * @author vsanjaime version 2.0
52
 * 
45 53
 */
46 54
public class ArcImsStoreParameters extends AbstractDataParameters implements
47 55
		DataStoreParameters {
56

  
48 57
	protected static DynClass DYNCLASS = null;
49 58
	public static final String DYNCLASS_NAME = "ArcIMSStoreParameters";
50 59

  
51
	public static final String DYNFIELDNAME_URL = "url";
52
	public static final String DYNFIELDNAME_VERSION = "version";
53
	public static final String DYNFIELDNAME_TYPESERVICE = "typeService";
54
	public static final String DYNFIELDNAME_NAMESERVICE = "nameService";
55
	public static final String DYNFIELDNAME_LAYERSSELECTED = "layersSelected";
60
	public static final String DYNFIELDNAME_SERVERURL = "serverURL";
61
	public static final String DYNFIELDNAME_SERVERVERSION = "serverVersion";
62
	public static final String DYNFIELDNAME_SERVICETYPE = "serviceType";
63
	public static final String DYNFIELDNAME_SERVICENAME = "serviceName";
64
	public static final String DYNFIELDNAME_SERVICEINFO = "serviceInfo";
65
	public static final String DYNFIELDNAME_SELECTEDLAYERS = "selectedLayers";
66
	public static final String DYNFIELDNAME_GROUPLAYERS = "groupLayers";
67
	public static final String DYNFIELDNAME_SRS = "srs";
68
	public static final String DYNFIELDNAME_ENVELOPE = "envelope";
56 69

  
57 70
	private DelegatedDynObject delegatedDynObject;
58 71

  
......
71 84
		return delegatedDynObject;
72 85
	}
73 86

  
87
	@SuppressWarnings("unchecked")
74 88
	public ArcImsStoreParameters(DataParameters dataParameters)
75 89
			throws InitializeException, ProviderNotRegisteredException {
76 90
		this();
77
		this.setUrl((String) dataParameters
78
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_URL));
79
		this.setVersion((String) dataParameters
80
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_VERSION));
81
		this.setTypeService((String) dataParameters
82
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_TYPESERVICE));
83
		this.setNameService((String) dataParameters
84
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_NAMESERVICE));
91
		this.setServerUrl((String) dataParameters
92
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SERVERURL));
93
		this.setServerVersion((String) dataParameters
94
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SERVERVERSION));
95
		this.setServiceType((String) dataParameters
96
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SERVICETYPE));
97
		this.setServiceName((String) dataParameters
98
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SERVICENAME));
99
		this.setServiceInfo((ServiceInformation) dataParameters
100
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SERVICEINFO));
85 101
		this
86
				.setLayersSelected((String) dataParameters
87
						.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_LAYERSSELECTED));
88

  
102
				.setSelectedLayers((Vector<String>) dataParameters
103
						.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SELECTEDLAYERS));
104
		this.setGroupLayers((Boolean) dataParameters
105
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_GROUPLAYERS));
106
		this.setSRS((IProjection) dataParameters
107
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_SRS));
108
		this.setEnvelope((Envelope2D) dataParameters
109
				.getDynValue(ArcImsStoreParameters.DYNFIELDNAME_ENVELOPE));
89 110
	}
90 111

  
91 112
	/**
......
97 118
		DynField field;
98 119
		if (DYNCLASS == null) {
99 120
			dynClass = dynman.add(DYNCLASS_NAME);
100
			field = dynClass.addDynField(DYNFIELDNAME_URL);
121
			field = dynClass.addDynField(DYNFIELDNAME_SERVERURL);
101 122
			field.setTheTypeOfAvailableValues(DynField.ANY);
102 123
			field.setDescription("URL of the ArcIMS server");
103 124
			field.setType(DataTypes.STRING);
104 125
			field.setMandatory(true);
105 126

  
106
			field = dynClass.addDynField(DYNFIELDNAME_VERSION);
127
			field = dynClass.addDynField(DYNFIELDNAME_SERVERVERSION);
107 128
			field.setTheTypeOfAvailableValues(DynField.ANY);
108 129
			field.setDescription("Version of the WFS server");
109 130
			field.setType(DataTypes.STRING);
110 131
			field.setMandatory(false);
111 132

  
112
			field = dynClass.addDynField(DYNFIELDNAME_TYPESERVICE);
133
			field = dynClass.addDynField(DYNFIELDNAME_SERVICETYPE);
113 134
			field.setTheTypeOfAvailableValues(DynField.ANY);
114 135
			field.setDescription("Feature type to retrieve");
115 136
			field.setType(DataTypes.STRING);
116 137
			field.setMandatory(true);
117 138

  
118
			field = dynClass.addDynField(DYNFIELDNAME_NAMESERVICE);
139
			field = dynClass.addDynField(DYNFIELDNAME_SERVICENAME);
119 140
			field.setTheTypeOfAvailableValues(DynField.ANY);
120 141
			field.setDescription("name of the arcims service");
121 142
			field.setType(DataTypes.STRING);
122 143
			field.setMandatory(true);
123 144

  
124
			field = dynClass.addDynField(DYNFIELDNAME_LAYERSSELECTED);
145
			field = dynClass.addDynField(DYNFIELDNAME_SERVICEINFO);
125 146
			field.setTheTypeOfAvailableValues(DynField.ANY);
147
			field.setDescription("arcims service information");
148
			field.setType(DataTypes.OBJECT);
149
			field.setMandatory(true);
150

  
151
			field = dynClass.addDynField(DYNFIELDNAME_SELECTEDLAYERS);
152
			field.setTheTypeOfAvailableValues(DynField.ANY);
126 153
			field.setDescription("Layers selected in the arcims service");
127
			field.setType(DataTypes.STRING);
154
			field.setType(DataTypes.LIST);
128 155
			field.setMandatory(true);
129 156

  
157
			field = dynClass.addDynField(DYNFIELDNAME_GROUPLAYERS);
158
			field.setTheTypeOfAvailableValues(DynField.ANY);
159
			field.setDescription("group selected layers");
160
			field.setType(DataTypes.BOOLEAN);
161
			field.setMandatory(true);
162

  
163
			field = dynClass.addDynField(DYNFIELDNAME_SRS);
164
			field.setTheTypeOfAvailableValues(DynField.ANY);
165
			field.setDescription("srs");
166
			field.setType(DataTypes.SRS);
167
			field.setMandatory(true);
168

  
169
			field = dynClass.addDynField(DYNFIELDNAME_ENVELOPE);
170
			field.setTheTypeOfAvailableValues(DynField.ANY);
171
			field.setDescription("envelope");
172
			field.setType(DataTypes.OBJECT);
173
			field.setMandatory(true);
174

  
130 175
			DYNCLASS = dynClass;
131 176
		}
132 177
	}
......
153 198
	 * 
154 199
	 */
155 200
	public boolean isValid() {
156
		// TODO Auto-generated method stub
157 201
		return false;
158 202
	}
159 203

  
160 204
	/**
205
	 * get server url
161 206
	 * 
162 207
	 * @return
163 208
	 */
164
	public String getUrl() {
165
		return (String) this.getDynValue(DYNFIELDNAME_URL);
209
	public String getServerUrl() {
210
		return (String) this.getDynValue(DYNFIELDNAME_SERVERURL);
166 211
	}
167 212

  
168
	public void setUrl(String url) {
169
		this.setDynValue(DYNFIELDNAME_URL, url);
213
	/**
214
	 * set server url
215
	 * 
216
	 * @param serverUrl
217
	 */
218
	public void setServerUrl(String serverUrl) {
219
		this.setDynValue(DYNFIELDNAME_SERVERURL, serverUrl);
170 220
	}
171 221

  
172
	public String getVersion() {
173
		return (String) this.getDynValue(DYNFIELDNAME_VERSION);
222
	/**
223
	 * get server version
224
	 * @return
225
	 */
226
	public String getServerVersion() {
227
		return (String) this.getDynValue(DYNFIELDNAME_SERVERVERSION);
174 228
	}
175 229

  
176
	public void setVersion(String version) {
177
		this.setDynValue(DYNFIELDNAME_VERSION, version);
230
	/**
231
	 * set server version
232
	 * @param serverVersion
233
	 */
234
	public void setServerVersion(String serverVersion) {
235
		this.setDynValue(DYNFIELDNAME_SERVERVERSION, serverVersion);
178 236
	}
179 237

  
180
	public String getTypeService() {
181
		return (String) this.getDynValue(DYNFIELDNAME_TYPESERVICE);
238
	/**
239
	 * get service type (Feature or Image)
240
	 * @return
241
	 */
242
	public String getServiceType() {
243
		return (String) this.getDynValue(DYNFIELDNAME_SERVICETYPE);
182 244
	}
183 245

  
184
	public void setTypeService(String typeService) {
185
		this.setDynValue(DYNFIELDNAME_TYPESERVICE, typeService);
246
	/**
247
	 * set service type (Feature or Image)
248
	 * @return
249
	 */
250
	public void setServiceType(String serviceType) {
251
		this.setDynValue(DYNFIELDNAME_SERVICETYPE, serviceType);
186 252
	}
187 253

  
188
	public String getNameService() {
189
		return (String) this.getDynValue(DYNFIELDNAME_NAMESERVICE);
254
	/**
255
	 * get service name
256
	 * @return
257
	 */
258
	public String getServiceName() {
259
		return (String) this.getDynValue(DYNFIELDNAME_SERVICENAME);
190 260
	}
191 261

  
192
	public void setNameService(String nameService) {
193
		this.setDynValue(DYNFIELDNAME_NAMESERVICE, nameService);
262
	/**
263
	 * set service name
264
	 * @param serviceName
265
	 */
266
	public void setServiceName(String serviceName) {
267
		this.setDynValue(DYNFIELDNAME_SERVICENAME, serviceName);
194 268
	}
195 269

  
196
	public String getLayersSelected() {
197
		return (String) this.getDynValue(DYNFIELDNAME_LAYERSSELECTED);
270
	/**
271
	 * get service info (from capabilities)
272
	 * @return
273
	 */
274
	public ServiceInformation getServiceInfo() {
275
		return (ServiceInformation) this.getDynValue(DYNFIELDNAME_SERVICEINFO);
198 276
	}
199 277

  
200
	public void setLayersSelected(String layersSelected) {
201
		this.setDynValue(DYNFIELDNAME_LAYERSSELECTED, layersSelected);
278
	/**
279
	 * set service info 
280
	 * @param serviceInfo
281
	 */
282
	public void setServiceInfo(ServiceInformation serviceInfo) {
283
		this.setDynValue(DYNFIELDNAME_SERVICEINFO, serviceInfo);
202 284
	}
203 285

  
286
	/**
287
	 * get selected layers by user
288
	 * @return
289
	 */
290
	@SuppressWarnings("unchecked")
291
	public Vector<String> getSelectedLayers() {
292
		return (Vector<String>) this.getDynValue(DYNFIELDNAME_SELECTEDLAYERS);
293
	}
294

  
295
	/**
296
	 * set selected layers by user
297
	 * @param selectedlayers
298
	 */
299
	public void setSelectedLayers(Vector<String> selectedlayers) {
300
		this.setDynValue(DYNFIELDNAME_SELECTEDLAYERS, selectedlayers);
301
	}
302

  
303
	/**
304
	 * the selected layers must be grouped
305
	 * @return
306
	 */
307
	public Boolean isGroupLayers() {
308
		return (Boolean) this.getDynValue(DYNFIELDNAME_GROUPLAYERS);
309
	}
310

  
311
	/**
312
	 * group layers
313
	 * @param groupLayers
314
	 */
315
	public void setGroupLayers(Boolean groupLayers) {
316
		this.setDynValue(DYNFIELDNAME_GROUPLAYERS, groupLayers);
317
	}
318

  
319
	/**
320
	 * set SRS
321
	 * @param srs
322
	 */
323
	public void setSRS(IProjection srs) {
324
		this.setDynValue(DYNFIELDNAME_SRS, srs);
325

  
326
	}
327

  
328
	/**
329
	 * get SRS
330
	 * @return
331
	 */
332
	public IProjection getSRS() {
333
		return (IProjection) this.getDynValue(DYNFIELDNAME_SRS);
334
	}
335

  
336
	/**
337
	 * set envelope
338
	 * @param envelope
339
	 */
340
	public void setEnvelope(Envelope2D envelope) {
341
		this.setDynValue(DYNFIELDNAME_ENVELOPE, envelope);
342

  
343
	}
344

  
345
	/**
346
	 * get envelope
347
	 * @return
348
	 */
349
	public Envelope2D getEnvelope() {
350
		return (Envelope2D) this.getDynValue(DYNFIELDNAME_ENVELOPE);
351
	}
352

  
204 353
}
branches/v2_0_0_prep/extensions/org.gvsig.arcims.feature.extension/src/main/java/org/gvsig/fmap/dal/store/arcims/ArcImsLibrary.java
37 37
import org.gvsig.tools.library.LibraryException;
38 38

  
39 39
/**
40
 * @author vsanjaime
40
 * @author vsanjaime version 2.0
41 41
 */
42 42
public class ArcImsLibrary extends AbstractLibrary {
43 43

  
44 44
	/**
45
	 * 
45
	 * initialize library elements
46 46
	 */
47 47
	@Override
48 48
	protected void doInitialize() throws LibraryException {
49 49
	}
50 50

  
51 51
	/**
52
	 * 
52
	 * at the end initialize others elements
53 53
	 */
54 54
	@Override
55 55
	protected void doPostInitialize() throws LibraryException {
......
69 69
		if (!dataman.getExplorerProviders().contains(ArcImsServerExplorer.NAME)){
70 70
			dataman.registerExplorerProvider(ArcImsServerExplorer.NAME,
71 71
					ArcImsServerExplorer.class, ArcImsServerExplorerParameters.class);
72
		}	
73
		
74
		//Register the ArcIMSStoreParams to be loaded from the catalog extension
75
		//TODO
76
//		ExtensionPointManager extensionPointManager = ToolsLocator
77
//		.getExtensionPointManager();
78
//		ExtensionPoint extensionPoint = extensionPointManager.add("CatalogDataStoreParameters");
79
//		extensionPoint.append("OGC:WFS", "Data store parameters to load a WFS layer", ArcIMSStoreParameters.class);
72
		}			
73

  
74
		//TODO Register the ArcIMSStoreParams to be loaded from the catalog extension
80 75
	}
81 76
}
82 77

  
branches/v2_0_0_prep/extensions/org.gvsig.arcims.feature.extension/src/main/java/org/gvsig/fmap/dal/store/arcims/ArcImsSetProvider.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
 * 2010 Prodevelop S.L. main development
26
 * http://www.prodevelop.es
27
 */
28

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

  
31
import java.util.HashMap;
32
import java.util.Iterator;
33

  
34
import org.gvsig.fmap.dal.exception.DataException;
35
import org.gvsig.fmap.dal.feature.FeatureQuery;
36
import org.gvsig.fmap.dal.feature.FeatureType;
37
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
38
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureProviderIterator;
39
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider;
40
import org.gvsig.tools.exception.BaseException;
41

  
42
/**
43
 * @author vsanjaime version 2.0
44
 */
45
public class ArcImsSetProvider extends AbstractFeatureSetProvider {
46

  
47
	public ArcImsSetProvider(ArcImsStoreProvider store, FeatureQuery query) {
48
		super(store, query, null);
49
	}
50

  
51
	public ArcImsSetProvider(ArcImsStoreProvider store, FeatureQuery query,
52
			FeatureType featureType) {
53
		super(store, query, featureType);
54
	}
55

  
56
	/*
57
	 * (non-Javadoc)
58
	 * 
59
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canFilter()
60
	 */
61
	public boolean canFilter() {
62
		// TODO Auto-generated method stub
63
		return false;
64
	}
65

  
66
	/*
67
	 * (non-Javadoc)
68
	 * 
69
	 * @see
70
	 * org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canIterateFromIndex()
71
	 */
72
	public boolean canIterateFromIndex() {
73
		// TODO Auto-generated method stub
74
		return false;
75
	}
76

  
77
	/*
78
	 * (non-Javadoc)
79
	 * 
80
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#canOrder()
81
	 */
82
	public boolean canOrder() {
83
		// TODO Auto-generated method stub
84
		return false;
85
	}
86

  
87
	/*
88
	 * (non-Javadoc)
89
	 * 
90
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#getSize()
91
	 */
92
	public long getSize() throws DataException {
93
		return getStore().getFeatureCount();
94
	}
95

  
96
	/*
97
	 * (non-Javadoc)
98
	 * 
99
	 * @see org.gvsig.fmap.dal.feature.spi.FeatureSetProvider#isEmpty()
100
	 */
101
	public boolean isEmpty() throws DataException {
102
		// TODO Auto-generated method stub
103
		return false;
104
	}
105

  
106
	protected AbstractFeatureProviderIterator createFastIterator(long index)
107
			throws DataException {
108
		// FIXME Cuidado, el iterador comienza en el valor 0
109
		// pasa del indice que recibe la funcion
110
		return createIterator(0);
111
	}
112

  
113
	protected AbstractFeatureProviderIterator createIterator(long index)
114
			throws DataException {
115
		return new ArcImsIterator((ArcImsStoreProvider) getStore(),
116
				getFeatureType());
117
	}
118

  
119
	protected void doDispose() throws BaseException {
120
		// Nothing to do
121
	}
122

  
123
	protected class ArcImsIterator extends AbstractFeatureProviderIterator {
124
		protected FeatureType type;
125
		Iterator keys = null;
126
		HashMap features = null;
127

  
128
		public ArcImsIterator(ArcImsStoreProvider store, FeatureType type)
129
				throws DataException {
130
			super(store);
131
			this.type = type;
132
			features = store.getMapFeatures();
133
			keys = features.keySet().iterator();
134
		}
135

  
136
		protected boolean internalHasNext() {
137
			return keys.hasNext();
138
		}
139

  
140
		protected Object internalNext() {
141
			return ((DefaultFeature) features.get(keys.next())).getData();
142
		}
143

  
144
		/*
145
		 * (non-Javadoc)
146
		 * 
147
		 * @see java.util.Iterator#remove()
148
		 */
149
		public void remove() {
150
			throw new UnsupportedOperationException();
151
		}
152

  
153
		protected void doDispose() throws BaseException {
154
			features.clear();
155
		}
156
	}
157
}
0 158

  
branches/v2_0_0_prep/extensions/org.gvsig.arcims.feature.extension/src/main/java/org/gvsig/fmap/dal/store/arcims/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