Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / test / java / org / gvsig / fmap / dal / store / memory / MemoryStoreProviderTest.java @ 43020

History | View | Annotate | Download (11.3 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
/*
25
 * AUTHORS (In addition to CIT):
26
 * 2009 {Iver T.I.}   {Task}
27
 */
28

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

    
31
import org.gvsig.fmap.dal.DALLocator;
32
import org.gvsig.fmap.dal.DataManager;
33
import org.gvsig.fmap.dal.DataStoreParameters;
34
import org.gvsig.fmap.dal.DataTypes;
35
import org.gvsig.fmap.dal.exception.DataException;
36
import org.gvsig.fmap.dal.exception.InitializeException;
37
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
38
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
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.Geometry;
47
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
48
import org.gvsig.fmap.geom.Geometry.TYPES;
49
import org.gvsig.fmap.geom.GeometryLocator;
50
import org.gvsig.fmap.geom.GeometryManager;
51
import org.gvsig.fmap.geom.exception.CreateGeometryException;
52
import org.gvsig.fmap.geom.primitive.Curve;
53
import org.gvsig.fmap.geom.primitive.Envelope;
54
import org.gvsig.fmap.geom.primitive.Surface;
55
import org.gvsig.tools.dispose.DisposableIterator;
56
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
57
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
59

    
60

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

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

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

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

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

    
93
        public void testInitializeStore() throws Exception {
94
                DataStoreParameters params = this.getDefaultDataStoreParameters();
95
                FeatureStore store = (FeatureStore) dataManager.openStore(
96
                        params.getDataStoreName(),params
97
                );
98

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

    
111
        public void testAddFeatureType() throws DataException, ValidateDataParametersException{
112
                FeatureStore store = createEditableFeatureStore();
113
                FeatureAttributeDescriptor attributeDescriptor = store.getDefaultFeatureType().getAttributeDescriptor(ID);
114
                assertNotNull(attributeDescriptor);
115
                assertEquals(attributeDescriptor.getType(), DataTypes.OBJECT);
116

    
117
                store.dispose();
118
        }
119

    
120
        protected FeatureStore createEditableFeatureStore() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException{
121
                DataStoreParameters params = this.getDefaultDataStoreParameters();
122
                FeatureStore store = (FeatureStore) dataManager.openStore(
123
                        params.getDataStoreName(),params
124
                );
125

    
126
                store.edit();
127

    
128
                EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
129

    
130
                EditableFeatureAttributeDescriptor idDescriptor = editableFeatureType.add(ID, DataTypes.OBJECT).setObjectClass(Object.class);
131
                idDescriptor.setIsPrimaryKey(true);
132
                EditableFeatureAttributeDescriptor geometryDescriptor = 
133
                        editableFeatureType.add(GEOM, DataTypes.GEOMETRY);
134
                geometryDescriptor.setGeometryType(TYPES.GEOMETRY);
135
                editableFeatureType.setDefaultGeometryAttributeName(GEOM);
136

    
137
                editableFeatureType.add(IDSYM, DataTypes.OBJECT).setObjectClass(Object.class);
138
                editableFeatureType.add(LABEL, DataTypes.STRING);
139
                EditableFeatureAttributeDescriptor featureIdDescriptor = 
140
                        editableFeatureType.add(FEATUREID, DataTypes.OBJECT).setObjectClass(Object.class);                
141
                
142
                //editableFeatureType.setHasOID(true);
143

    
144
                store.update(editableFeatureType);        
145
                store.finishEditing();
146
                return store;
147
        }
148

    
149
        public void testAddFeature() throws DataException, ValidateDataParametersException, CreateGeometryException{
150
                FeatureStore store = createEditableFeatureStore();
151

    
152
                store.edit();
153

    
154
                EditableFeature feature = store.createNewFeature().getEditable();
155
                feature.set(ID, "0");
156
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
157

    
158
                store.insert(feature);
159

    
160
                Envelope envelope = store.getEnvelope();
161
                assertNotNull(envelope);
162

    
163
                store.finishEditing();
164

    
165
                FeatureSet featureSet = store.getFeatureSet();
166
                DisposableIterator it = featureSet.fastIterator();
167
                while (it.hasNext()){
168
                        Feature feature2 = (Feature)it.next();
169
                        assertEquals(feature.getType().get(0), feature2.getType().get(0));
170
                        assertEquals(feature.get(0), feature2.get(0));
171

    
172
                        assertEquals(feature.getType().get(1), feature2.getType().get(1));
173
                        assertEquals(feature.get(1), feature2.get(1));
174
                }        
175

    
176
                envelope = store.getEnvelope();
177
                assertNotNull(envelope);
178

    
179
                store.dispose();
180
        }
181

    
182
        public void testAddFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
183
                FeatureStore store = createEditableFeatureStore();
184

    
185
                store.edit();
186

    
187
                EditableFeature feature = store.createNewFeature().getEditable();
188
                feature.set(ID, "0");
189
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
190

    
191
                // One
192
                store.insert(feature);
193

    
194
                EditableFeature feature2 = store.createNewFeature().getEditable();
195
                feature2.set(ID, "1");
196
                Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
197
                curve.addVertex(0,0);
198
                curve.addVertex(1,0);
199
                curve.addVertex(1,1);
200
                curve.addVertex(0,1);
201
                curve.addVertex(0,0);
202
                feature2.set(GEOM, curve);
203

    
204
                // Two
205
                store.insert(feature2);
206

    
207
                EditableFeature feature3 = store.createNewFeature().getEditable();
208
                feature3.set(ID, "2");
209
                Surface surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
210
                surface.addVertex(0,0);
211
                surface.addVertex(1,0);
212
                surface.addVertex(1,1);
213
                surface.addVertex(0,1);
214
                surface.addVertex(0,0);
215
                feature3.set(GEOM, surface);
216

    
217
                //Three
218
                store.insert(feature3);
219

    
220
                Envelope envelope = store.getEnvelope();
221
                assertNotNull(envelope);
222

    
223
                store.finishEditing();
224

    
225
                FeatureSet featureSet = store.getFeatureSet();
226
                DisposableIterator it = featureSet.fastIterator();
227

    
228
                //Count the features in the set
229
                int i=0;
230
                while (it.hasNext()){
231
                        Feature feat = (Feature)it.next();
232
                        i++;
233
                }        
234

    
235
                //Are all three inside?
236
                assertEquals(3,i);
237

    
238
                envelope = store.getEnvelope();
239
                assertNotNull(envelope);
240

    
241
                // Editing other time
242
                store.edit();
243
                EditableFeature feature4 = store.createNewFeature().getEditable();
244
                feature4.set(ID, "4");
245
                surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
246
                surface.addVertex(0,0);
247
                surface.addVertex(1,0);
248
                surface.addVertex(1,1);
249
                surface.addVertex(0,1);
250
                surface.addVertex(0,0);
251
                feature4.set(GEOM, surface);
252

    
253
                //four
254
                store.insert(feature4);
255

    
256
                store.finishEditing();
257
                
258
                //Are all four inside?
259
                assertEquals(4,store.getFeatureCount());
260

    
261
                store.dispose();
262
        }
263

    
264
        public void testRemoveFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
265
                FeatureStore store = createEditableFeatureStore();
266

    
267
                store.edit();
268

    
269
                EditableFeature feature = store.createNewFeature().getEditable();
270
                feature.set(ID, "0");
271
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
272

    
273
                // One
274
                store.insert(feature);
275

    
276
                EditableFeature feature2 = store.createNewFeature().getEditable();
277
                feature2.set(ID, "1");
278
                Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
279
                curve.addVertex(0,0);
280
                curve.addVertex(1,0);
281
                curve.addVertex(1,1);
282
                curve.addVertex(0,1);
283
                curve.addVertex(0,0);
284
                feature2.set(GEOM, curve);
285

    
286
                // Two
287
                store.insert(feature2);
288

    
289
                EditableFeature feature3 = store.createNewFeature().getEditable();
290
                feature3.set(ID, "2");
291
                Surface surface =  geomManager.createSurface(Geometry.SUBTYPES.GEOM2D);
292
                surface.addVertex(0,0);
293
                surface.addVertex(1,0);
294
                surface.addVertex(1,1);
295
                surface.addVertex(0,1);
296
                surface.addVertex(0,0);
297
                feature3.set(GEOM, surface);
298

    
299
                //Three
300
                store.insert(feature3);
301

    
302
                Envelope envelope = store.getEnvelope();
303
                assertNotNull(envelope);
304

    
305
                store.finishEditing();
306

    
307
                // Editing other time and remove the second one
308
                store.edit();
309
                        
310

    
311
                FeatureSet featureSet = store.getFeatureSet();
312
                DisposableIterator it = featureSet.fastIterator();
313

    
314
                //Count the features in the set
315
                int i=1;
316
                Feature addedFeature2 = null;
317
                while (it.hasNext()){
318
                        Feature feat = (Feature)it.next();
319
                        if (i == 2){
320
                                addedFeature2 = feat;
321
                        }                        
322
                        i++;
323
                }        
324
                
325
                store.delete(addedFeature2);
326

    
327
                store.finishEditing();
328
                //Are two inside?
329
                assertEquals(2,store.getFeatureCount());
330

    
331
                store.dispose();
332
        }
333
        
334
        public void testUpdateFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
335
                FeatureStore store = createEditableFeatureStore();
336

    
337
                store.edit();
338

    
339
                EditableFeature feature = store.createNewFeature().getEditable();
340
                feature.set(ID, "0");
341
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
342
                feature.set(LABEL, "Hi");                
343
                store.insert(feature);
344
                store.finishEditing();
345

    
346
                // Editing other time and update 
347
                store.edit();
348
                        
349
                FeatureSet featureSet = store.getFeatureSet();
350
                DisposableIterator it = featureSet.fastIterator();
351
                
352
                EditableFeature editableFeature = null;
353
                while (it.hasNext()){                        
354
                        Feature feat = (Feature)it.next();
355
                        editableFeature = feat.getEditable();
356
                        editableFeature.set(LABEL, "Bye");                        
357
                }
358
                
359
                store.update(editableFeature);
360
                
361
                store.finishEditing();
362
                
363
                //Check the value
364
                featureSet = store.getFeatureSet();
365
                it = featureSet.fastIterator();
366

    
367
                while (it.hasNext()){
368
                        Feature feat = (Feature)it.next();
369
                        assertEquals("Bye", feat.get(LABEL));
370
                }        
371
                
372
                store.dispose();
373
        }
374
}
375