Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src-test / org / gvsig / fmap / dal / store / memory / MemoryStoreProviderTest.java @ 33205

History | View | Annotate | Download (10.6 KB)

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.memory;
29

    
30
import org.gvsig.fmap.dal.DALLocator;
31
import org.gvsig.fmap.dal.DataManager;
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.DataTypes;
34
import org.gvsig.fmap.dal.exception.DataException;
35
import org.gvsig.fmap.dal.exception.InitializeException;
36
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
37
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
38
import org.gvsig.tools.dispose.DisposableIterator;
39
import org.gvsig.fmap.dal.feature.EditableFeature;
40
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
41
import org.gvsig.fmap.dal.feature.EditableFeatureType;
42
import org.gvsig.fmap.dal.feature.Feature;
43
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
44
import org.gvsig.fmap.dal.feature.FeatureSet;
45
import org.gvsig.fmap.dal.feature.FeatureStore;
46
import org.gvsig.fmap.geom.GeometryLocator;
47
import org.gvsig.fmap.geom.GeometryManager;
48
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
49
import org.gvsig.fmap.geom.Geometry.TYPES;
50
import org.gvsig.fmap.geom.exception.CreateGeometryException;
51
import org.gvsig.fmap.geom.primitive.Envelope;
52
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
53
import org.slf4j.Logger;
54
import org.slf4j.LoggerFactory;
55
import org.gvsig.fmap.geom.primitive.GeneralPathX;
56

    
57
import com.vividsolutions.jts.util.Assert;
58

    
59
/**
60
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
61
 */
62
public class MemoryStoreProviderTest extends AbstractLibraryAutoInitTestCase {
63
        protected Logger logger = LoggerFactory.getLogger(getClass());;
64
        protected static DataManager dataManager = null;
65
        protected static GeometryManager geomManager = null;
66

    
67
        protected static final String ID = "id";
68
        protected static final String GEOM = "geom";
69
        protected static final String IDSYM = "idsym";
70
        protected static final String LABEL = "label";
71
        protected static final String FEATUREID = "featureid";
72

    
73
        protected void doSetUp() throws Exception {
74
                dataManager = DALLocator.getDataManager();
75
                geomManager = GeometryLocator.getGeometryManager();
76
        }
77

    
78
        /*
79
         * (non-Javadoc)
80
         * @see org.gvsig.fmap.dal.feature.BaseTestFeatureStore#getDefaultDataStoreParameters()
81
         */
82
        public DataStoreParameters getDefaultDataStoreParameters()
83
        throws DataException {
84
                MemoryStoreParameters memoryParameters = null;
85

    
86
                memoryParameters = (MemoryStoreParameters) dataManager
87
                .createStoreParameters(MemoryStoreProvider.NAME);
88
                return memoryParameters;
89
        }
90

    
91
        public void testInitializeStore() throws Exception {
92
                FeatureStore store = (FeatureStore) dataManager.createStore(this
93
                                .getDefaultDataStoreParameters());
94

    
95
                assertNotNull(store.getMetadataID());
96
                assertNotNull(store.getName());
97
                assertEquals(store.getEnvelope(), store.getDynValue("Envelope"));
98
                assertTrue(store.getFeatureCount() == 0);
99
                if (store.isLocksSupported()) {
100
                        assertNotNull(store.getLocks());
101
                } else {
102
                        assertNull(store.getLocks());
103
                }
104
                store.dispose();
105
        }
106

    
107
        public void testAddFeatureType() throws DataException, ValidateDataParametersException{
108
                FeatureStore store = createEditableFeatureStore();
109
                FeatureAttributeDescriptor attributeDescriptor = store.getDefaultFeatureType().getAttributeDescriptor(ID);
110
                assertNotNull(attributeDescriptor);
111
                assertEquals(attributeDescriptor.getDataType(), DataTypes.OBJECT);
112

    
113
                store.dispose();
114
        }
115

    
116
        protected FeatureStore createEditableFeatureStore() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException{
117
                FeatureStore store = (FeatureStore) dataManager.createStore(this
118
                                .getDefaultDataStoreParameters());
119

    
120
                store.edit();
121

    
122
                EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
123

    
124
                EditableFeatureAttributeDescriptor idDescriptor = editableFeatureType.add(ID, DataTypes.OBJECT).setObjectClass(Object.class);
125
                idDescriptor.setIsPrimaryKey(true);
126
                EditableFeatureAttributeDescriptor geometryDescriptor = 
127
                        editableFeatureType.add(GEOM, DataTypes.GEOMETRY);
128
                geometryDescriptor.setGeometryType(TYPES.GEOMETRY);
129
                editableFeatureType.setDefaultGeometryAttributeName(GEOM);
130

    
131
                editableFeatureType.add(IDSYM, DataTypes.OBJECT).setObjectClass(Object.class);
132
                editableFeatureType.add(LABEL, DataTypes.STRING);
133
                EditableFeatureAttributeDescriptor featureIdDescriptor = 
134
                        editableFeatureType.add(FEATUREID, DataTypes.OBJECT).setObjectClass(Object.class);                
135
                
136
                //editableFeatureType.setHasOID(true);
137

    
138
                store.update(editableFeatureType);        
139
                store.finishEditing();
140
                return store;
141
        }
142

    
143
        public void testAddFeature() throws DataException, ValidateDataParametersException, CreateGeometryException{
144
                FeatureStore store = createEditableFeatureStore();
145

    
146
                store.edit();
147

    
148
                EditableFeature feature = store.createNewFeature().getEditable();
149
                feature.set(ID, "0");
150
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
151

    
152
                store.insert(feature);
153

    
154
                Envelope envelope = store.getEnvelope();
155
                assertNotNull(envelope);
156

    
157
                store.finishEditing();
158

    
159
                FeatureSet featureSet = store.getFeatureSet();
160
                DisposableIterator it = featureSet.iterator();
161
                while (it.hasNext()){
162
                        Feature feature2 = (Feature)it.next();
163
                        assertEquals(feature.getType().get(0), feature2.getType().get(0));
164
                        assertEquals(feature.get(0), feature2.get(0));
165

    
166
                        assertEquals(feature.getType().get(1), feature2.getType().get(1));
167
                        assertEquals(feature.get(1), feature2.get(1));
168
                }        
169

    
170
                envelope = store.getEnvelope();
171
                assertNotNull(envelope);
172

    
173
                store.dispose();
174
        }
175

    
176
        public void testAddFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
177
                FeatureStore store = createEditableFeatureStore();
178

    
179
                store.edit();
180

    
181
                EditableFeature feature = store.createNewFeature().getEditable();
182
                feature.set(ID, "0");
183
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
184

    
185
                // One
186
                store.insert(feature);
187

    
188
                EditableFeature feature2 = store.createNewFeature().getEditable();
189
                feature2.set(ID, "1");
190
                GeneralPathX gpx=new GeneralPathX();
191
                gpx.moveTo(0, 0);
192
                gpx.lineTo(1, 0);
193
                gpx.lineTo(1, 1);
194
                gpx.lineTo(0, 1);
195
                gpx.lineTo(0, 0);
196
                gpx.closePath();
197
                feature2.set(GEOM, geomManager.createCurve(gpx, SUBTYPES.GEOM2D));
198

    
199
                // Two
200
                store.insert(feature2);
201

    
202
                EditableFeature feature3 = store.createNewFeature().getEditable();
203
                feature3.set(ID, "2");
204
                feature3.set(GEOM, geomManager.createSurface(gpx, SUBTYPES.GEOM2D));
205

    
206
                //Three
207
                store.insert(feature3);
208

    
209
                Envelope envelope = store.getEnvelope();
210
                assertNotNull(envelope);
211

    
212
                store.finishEditing();
213

    
214
                FeatureSet featureSet = store.getFeatureSet();
215
                DisposableIterator it = featureSet.iterator();
216

    
217
                //Count the features in the set
218
                int i=0;
219
                while (it.hasNext()){
220
                        Feature feat = (Feature)it.next();
221
                        i++;
222
                }        
223

    
224
                //Are all three inside?
225
                assertEquals(3,i);
226

    
227
                envelope = store.getEnvelope();
228
                assertNotNull(envelope);
229

    
230
                // Editing other time
231
                store.edit();
232
                EditableFeature feature4 = store.createNewFeature().getEditable();
233
                feature4.set(ID, "4");
234
                feature4.set(GEOM, geomManager.createSurface(gpx, SUBTYPES.GEOM2D));
235

    
236
                //four
237
                store.insert(feature4);
238

    
239
                store.finishEditing();
240
                
241
                //Are all four inside?
242
                assertEquals(4,store.getFeatureCount());
243

    
244
                store.dispose();
245
        }
246

    
247
        public void testRemoveFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
248
                FeatureStore store = createEditableFeatureStore();
249

    
250
                store.edit();
251

    
252
                EditableFeature feature = store.createNewFeature().getEditable();
253
                feature.set(ID, "0");
254
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
255

    
256
                // One
257
                store.insert(feature);
258

    
259
                EditableFeature feature2 = store.createNewFeature().getEditable();
260
                feature2.set(ID, "1");
261
                GeneralPathX gpx=new GeneralPathX();
262
                gpx.moveTo(0, 0);
263
                gpx.lineTo(1, 0);
264
                gpx.lineTo(1, 1);
265
                gpx.lineTo(0, 1);
266
                gpx.lineTo(0, 0);
267
                gpx.closePath();
268
                feature2.set(GEOM, geomManager.createCurve(gpx, SUBTYPES.GEOM2D));
269

    
270
                // Two
271
                store.insert(feature2);
272

    
273
                EditableFeature feature3 = store.createNewFeature().getEditable();
274
                feature3.set(ID, "2");
275
                feature3.set(GEOM, geomManager.createSurface(gpx, SUBTYPES.GEOM2D));
276

    
277
                //Three
278
                store.insert(feature3);
279

    
280
                Envelope envelope = store.getEnvelope();
281
                assertNotNull(envelope);
282

    
283
                store.finishEditing();
284

    
285
                // Editing other time and remove the second one
286
                store.edit();
287
                        
288

    
289
                FeatureSet featureSet = store.getFeatureSet();
290
                DisposableIterator it = featureSet.iterator();
291

    
292
                //Count the features in the set
293
                int i=1;
294
                Feature addedFeature2 = null;
295
                while (it.hasNext()){
296
                        Feature feat = (Feature)it.next();
297
                        if (i == 2){
298
                                addedFeature2 = feat;
299
                        }                        
300
                        i++;
301
                }        
302
                
303
                store.delete(addedFeature2);
304

    
305
                store.finishEditing();
306
                //Are two inside?
307
                assertEquals(2,store.getFeatureCount());
308

    
309
                store.dispose();
310
        }
311
        
312
        public void testUpdateFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
313
                FeatureStore store = createEditableFeatureStore();
314

    
315
                store.edit();
316

    
317
                EditableFeature feature = store.createNewFeature().getEditable();
318
                feature.set(ID, "0");
319
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
320
                feature.set(LABEL, "Hi");                
321
                store.insert(feature);
322
                store.finishEditing();
323

    
324
                // Editing other time and update 
325
                store.edit();
326
                        
327
                FeatureSet featureSet = store.getFeatureSet();
328
                DisposableIterator it = featureSet.iterator();
329
                
330
                EditableFeature editableFeature = null;
331
                while (it.hasNext()){                        
332
                        Feature feat = (Feature)it.next();
333
                        editableFeature = feat.getEditable();
334
                        editableFeature.set(LABEL, "Bye");                        
335
                }
336
                
337
                store.update(editableFeature);
338
                
339
                store.finishEditing();
340
                
341
                //Check the value
342
                featureSet = store.getFeatureSet();
343
                it = featureSet.iterator();
344

    
345
                while (it.hasNext()){
346
                        Feature feat = (Feature)it.next();
347
                        Assert.equals("Bye", feat.get(LABEL));
348
                }        
349
                
350
                store.dispose();
351
        }
352
}
353