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 @ 40559

History | View | Annotate | Download (11.1 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
                FeatureStore store = (FeatureStore) dataManager.createStore(this
95
                                .getDefaultDataStoreParameters());
96

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

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

    
115
                store.dispose();
116
        }
117

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

    
122
                store.edit();
123

    
124
                EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
125

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

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

    
140
                store.update(editableFeatureType);        
141
                store.finishEditing();
142
                return store;
143
        }
144

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

    
148
                store.edit();
149

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

    
154
                store.insert(feature);
155

    
156
                Envelope envelope = store.getEnvelope();
157
                assertNotNull(envelope);
158

    
159
                store.finishEditing();
160

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

    
168
                        assertEquals(feature.getType().get(1), feature2.getType().get(1));
169
                        assertEquals(feature.get(1), feature2.get(1));
170
                }        
171

    
172
                envelope = store.getEnvelope();
173
                assertNotNull(envelope);
174

    
175
                store.dispose();
176
        }
177

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

    
181
                store.edit();
182

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

    
187
                // One
188
                store.insert(feature);
189

    
190
                EditableFeature feature2 = store.createNewFeature().getEditable();
191
                feature2.set(ID, "1");
192
                Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
193
                curve.addVertex(0,0);
194
                curve.addVertex(1,0);
195
                curve.addVertex(1,1);
196
                curve.addVertex(0,1);
197
                curve.addVertex(0,0);
198
                feature2.set(GEOM, curve);
199

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

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

    
213
                //Three
214
                store.insert(feature3);
215

    
216
                Envelope envelope = store.getEnvelope();
217
                assertNotNull(envelope);
218

    
219
                store.finishEditing();
220

    
221
                FeatureSet featureSet = store.getFeatureSet();
222
                DisposableIterator it = featureSet.fastIterator();
223

    
224
                //Count the features in the set
225
                int i=0;
226
                while (it.hasNext()){
227
                        Feature feat = (Feature)it.next();
228
                        i++;
229
                }        
230

    
231
                //Are all three inside?
232
                assertEquals(3,i);
233

    
234
                envelope = store.getEnvelope();
235
                assertNotNull(envelope);
236

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

    
249
                //four
250
                store.insert(feature4);
251

    
252
                store.finishEditing();
253
                
254
                //Are all four inside?
255
                assertEquals(4,store.getFeatureCount());
256

    
257
                store.dispose();
258
        }
259

    
260
        public void testRemoveFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
261
                FeatureStore store = createEditableFeatureStore();
262

    
263
                store.edit();
264

    
265
                EditableFeature feature = store.createNewFeature().getEditable();
266
                feature.set(ID, "0");
267
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
268

    
269
                // One
270
                store.insert(feature);
271

    
272
                EditableFeature feature2 = store.createNewFeature().getEditable();
273
                feature2.set(ID, "1");
274
                Curve curve =  geomManager.createCurve(Geometry.SUBTYPES.GEOM2D);
275
                curve.addVertex(0,0);
276
                curve.addVertex(1,0);
277
                curve.addVertex(1,1);
278
                curve.addVertex(0,1);
279
                curve.addVertex(0,0);
280
                feature2.set(GEOM, curve);
281

    
282
                // Two
283
                store.insert(feature2);
284

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

    
295
                //Three
296
                store.insert(feature3);
297

    
298
                Envelope envelope = store.getEnvelope();
299
                assertNotNull(envelope);
300

    
301
                store.finishEditing();
302

    
303
                // Editing other time and remove the second one
304
                store.edit();
305
                        
306

    
307
                FeatureSet featureSet = store.getFeatureSet();
308
                DisposableIterator it = featureSet.fastIterator();
309

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

    
323
                store.finishEditing();
324
                //Are two inside?
325
                assertEquals(2,store.getFeatureCount());
326

    
327
                store.dispose();
328
        }
329
        
330
        public void testUpdateFeatures() throws DataException, ValidateDataParametersException, CreateGeometryException{
331
                FeatureStore store = createEditableFeatureStore();
332

    
333
                store.edit();
334

    
335
                EditableFeature feature = store.createNewFeature().getEditable();
336
                feature.set(ID, "0");
337
                feature.set(GEOM, geomManager.createPoint(0, 0, SUBTYPES.GEOM2D));
338
                feature.set(LABEL, "Hi");                
339
                store.insert(feature);
340
                store.finishEditing();
341

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

    
363
                while (it.hasNext()){
364
                        Feature feat = (Feature)it.next();
365
                        assertEquals("Bye", feat.get(LABEL));
366
                }        
367
                
368
                store.dispose();
369
        }
370
}
371