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

History | View | Annotate | Download (11.1 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.fmap.dal.feature.EditableFeature;
39
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
40
import org.gvsig.fmap.dal.feature.EditableFeatureType;
41
import org.gvsig.fmap.dal.feature.Feature;
42
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
43
import org.gvsig.fmap.dal.feature.FeatureSet;
44
import org.gvsig.fmap.dal.feature.FeatureStore;
45
import org.gvsig.fmap.geom.Geometry;
46
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
47
import org.gvsig.fmap.geom.Geometry.TYPES;
48
import org.gvsig.fmap.geom.GeometryLocator;
49
import org.gvsig.fmap.geom.GeometryManager;
50
import org.gvsig.fmap.geom.exception.CreateGeometryException;
51
import org.gvsig.fmap.geom.primitive.Curve;
52
import org.gvsig.fmap.geom.primitive.Envelope;
53
import org.gvsig.fmap.geom.primitive.Surface;
54
import org.gvsig.tools.dispose.DisposableIterator;
55
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
56
import org.slf4j.Logger;
57
import org.slf4j.LoggerFactory;
58

    
59

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

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

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

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

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

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

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

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

    
114
                store.dispose();
115
        }
116

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

    
121
                store.edit();
122

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

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

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

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

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

    
147
                store.edit();
148

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

    
153
                store.insert(feature);
154

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

    
158
                store.finishEditing();
159

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

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

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

    
174
                store.dispose();
175
        }
176

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

    
180
                store.edit();
181

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

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

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

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

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

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

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

    
218
                store.finishEditing();
219

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

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

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

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

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

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

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

    
256
                store.dispose();
257
        }
258

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

    
262
                store.edit();
263

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

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

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

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

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

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

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

    
300
                store.finishEditing();
301

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

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

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

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

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

    
332
                store.edit();
333

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

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

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