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

History | View | Annotate | Download (12.7 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
package org.gvsig.fmap.dal.store.memory;
29

    
30
import java.util.ArrayList;
31
import java.util.List;
32
import org.gvsig.fmap.dal.DALLocator;
33
import org.gvsig.fmap.dal.DataManager;
34
import org.gvsig.fmap.dal.DataStoreParameters;
35
import org.gvsig.fmap.dal.DataTypes;
36
import org.gvsig.fmap.dal.exception.DataException;
37
import org.gvsig.fmap.dal.exception.InitializeException;
38
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
39
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
40
import org.gvsig.fmap.dal.feature.EditableFeature;
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.dal.feature.OpenFeatureStoreParameters;
47
import org.gvsig.fmap.geom.Geometry;
48
import org.gvsig.fmap.geom.GeometryUtils;
49
import org.gvsig.fmap.geom.exception.CreateGeometryException;
50
import org.gvsig.fmap.geom.primitive.Envelope;
51
import org.gvsig.tools.dispose.DisposableIterator;
52
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
53
import org.slf4j.Logger;
54
import org.slf4j.LoggerFactory;
55

    
56
/**
57
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
58
 */
59
public class MemoryStoreProviderTest extends AbstractLibraryAutoInitTestCase {
60

    
61
    protected static final Logger LOGGER = LoggerFactory.getLogger(MemoryStoreProviderTest.class);
62

    
63
    protected static final String ID = "id";
64
    protected static final String GEOM = "geom";
65
    protected static final String IDSYM = "idsym";
66
    protected static final String LABEL = "label";
67
    protected static final String FEATUREID = "featureid";
68

    
69
    @Override
70
    protected void doSetUp() throws Exception {
71
    }
72

    
73
    public OpenFeatureStoreParameters createMemoryStoreParameters() throws DataException {
74
        DataManager dataManager = DALLocator.getDataManager();
75
        MemoryStoreParameters memoryParameters = (MemoryStoreParameters) dataManager
76
                .createStoreParameters(MemoryStoreProvider.NAME);
77
        return memoryParameters;
78
    }
79

    
80
    protected FeatureStore createStoreWithGeomField() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
81
        DataManager dataManager = DALLocator.getDataManager();
82
        DataStoreParameters params = this.createMemoryStoreParameters();
83
        FeatureStore store = (FeatureStore) dataManager.openStore(
84
                params.getProviderName(),
85
                params
86
        );
87
        store.edit();
88
        EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
89
        editableFeatureType.add(ID, DataTypes.OBJECT)
90
                .setIsPrimaryKey(true)
91
                .setObjectClass(Object.class);
92
        editableFeatureType.add(IDSYM, DataTypes.OBJECT)
93
                .setObjectClass(Object.class);
94
        editableFeatureType.add(GEOM, DataTypes.GEOMETRY)
95
                .setGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D);
96
        editableFeatureType.add(LABEL, DataTypes.STRING);
97
        editableFeatureType.add(FEATUREID, DataTypes.OBJECT)
98
                .setObjectClass(Object.class);
99

    
100
        store.update(editableFeatureType);
101
        store.finishEditing();
102
        return store;
103
    }
104
    
105
    protected FeatureStore createStoreWithoutGeomField() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
106
        DataManager dataManager = DALLocator.getDataManager();
107
        DataStoreParameters params = this.createMemoryStoreParameters();
108
        FeatureStore store = (FeatureStore) dataManager.openStore(
109
                params.getProviderName(),
110
                params
111
        );
112
        store.edit();
113
        EditableFeatureType editableFeatureType = store.getDefaultFeatureType().getEditable();
114
        editableFeatureType.add(ID, DataTypes.OBJECT)
115
                .setIsPrimaryKey(true)
116
                .setObjectClass(Object.class);
117
        editableFeatureType.add(IDSYM, DataTypes.OBJECT)
118
                .setObjectClass(Object.class);
119
        editableFeatureType.add(LABEL, DataTypes.STRING);
120
        editableFeatureType.add(FEATUREID, DataTypes.OBJECT)
121
                .setObjectClass(Object.class);
122

    
123
        store.update(editableFeatureType);
124
        store.finishEditing();
125
        return store;
126
    }
127
    
128
    protected FeatureStore createStoreWithGeomFieldFilled(List<Geometry> geoms) throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
129
        FeatureStore store = createStoreWithGeomField();
130

    
131
        store.edit();
132
        int id = -1;
133
        geoms.add(GeometryUtils.createPoint(1, 1));
134
        geoms.add(GeometryUtils.createLine(Geometry.SUBTYPES.GEOM2D)
135
            .addVertex(0, 0)
136
            .addVertex(1, 0)
137
            .addVertex(1, 1)
138
            .addVertex(0, 1)
139
            .addVertex(0, 0));
140
        geoms.add(GeometryUtils.createPolygon(Geometry.SUBTYPES.GEOM2D)
141
            .addVertex(0, 0)
142
            .addVertex(1, 0)
143
            .addVertex(1, 1)
144
            .addVertex(0, 1)
145
            .addVertex(0, 0));
146
        
147
        EditableFeature feature;
148
        
149
        feature = store.createNewFeature();
150
        feature.set(ID, ++id);
151
        feature.set(LABEL, "Hi");
152
        feature.set(GEOM, geoms.get(id));
153
        store.insert(feature);
154

    
155
        feature = store.createNewFeature();
156
        feature.set(ID, ++id);
157
        feature.set(LABEL, "Hi");
158
        feature.set(GEOM, geoms.get(id));
159
        store.insert(feature);
160

    
161

    
162
        feature = store.createNewFeature();
163
        feature.set(ID, ++id);
164
        feature.set(LABEL, "Hi");
165
        feature.set(GEOM, geoms.get(id));
166
        store.insert(feature);
167

    
168
        Envelope envelope = store.getEnvelope();
169
        assertNotNull(envelope);
170

    
171
        store.finishEditing();
172
        return store;
173
    }
174
    
175
    protected FeatureStore createStoreWithoutGeomFieldFilled() throws ValidateDataParametersException, InitializeException, ProviderNotRegisteredException, DataException {
176
        FeatureStore store = createStoreWithoutGeomField();
177

    
178
        store.edit();
179
        int id = 0;
180
        
181
        EditableFeature feature;
182
        
183
        feature = store.createNewFeature();
184
        feature.set(ID, ++id);
185
        feature.set(LABEL, "Hi");
186
        store.insert(feature);
187

    
188
        feature = store.createNewFeature();
189
        feature.set(ID, ++id);
190
        feature.set(LABEL, "Hi");
191
        store.insert(feature);
192

    
193

    
194
        feature = store.createNewFeature();
195
        feature.set(ID, ++id);
196
        feature.set(LABEL, "Hi");
197
        store.insert(feature);
198

    
199
        Envelope envelope = store.getEnvelope();
200
        assertNull(envelope);
201

    
202
        store.finishEditing();
203
        return store;
204
    }
205
    
206

    
207
    public void testInitializeStore() throws Exception {
208
        DataManager dataManager = DALLocator.getDataManager();
209
        DataStoreParameters params = this.createMemoryStoreParameters();
210
        FeatureStore store = (FeatureStore) dataManager.openStore(
211
                params.getProviderName(),
212
                params
213
        );
214
        assertNotNull(store.getMetadataID());
215
        assertNotNull(store.getName());
216
        assertEquals(store.getEnvelope(), store.getDynValue("Envelope"));
217
        assertTrue(store.getFeatureCount() == 0);
218
        if (store.isLocksSupported()) {
219
            assertNotNull(store.getLocks());
220
        } else {
221
            assertNull(store.getLocks());
222
        }
223
        store.dispose();
224
    }
225

    
226
    public void testAddFeatureType() throws DataException, ValidateDataParametersException {
227
        FeatureStore store = createStoreWithGeomField();
228
        FeatureAttributeDescriptor attributeDescriptor = store.getDefaultFeatureType()
229
                .getAttributeDescriptor(ID);
230
        assertNotNull(attributeDescriptor);
231
        assertEquals(attributeDescriptor.getType(), DataTypes.OBJECT);
232

    
233
        store.dispose();
234
    }
235

    
236
    public void testAddFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
237
        List<Geometry> geoms = new ArrayList<>();
238
        
239
        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
240
        int n = -1;
241
        for (Feature feature : store.getFeatureSet()) {
242
            assertEquals(++n, feature.get(ID));
243
            assertEquals(geoms.get(n), feature.get(GEOM));
244
        }
245

    
246
        store.edit();
247
        EditableFeature feature = store.createNewFeature();
248
        feature.set(ID, 4);
249
        feature.set(GEOM, GeometryUtils.createPolygon(Geometry.SUBTYPES.GEOM2D)
250
            .addVertex(0, 0)
251
            .addVertex(1, 0)
252
            .addVertex(1, 1)
253
            .addVertex(0, 1)
254
            .addVertex(0, 0)
255
        );
256
        store.insert(feature);
257
        store.finishEditing();
258
        assertEquals(4, store.getFeatureCount());
259
        
260
        store.dispose();
261
    }
262

    
263
    public void testRemoveFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
264
        List<Geometry> geoms = new ArrayList<>();
265
        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
266

    
267
        Feature f;
268
        
269
        store.edit();
270
        FeatureSet featureSet = store.getFeatureSet();
271
        DisposableIterator it = featureSet.fastIterator();
272
        it.next();
273
        f = (Feature) it.next();
274
        store.delete(f);
275
        store.finishEditing();
276

    
277
        assertEquals(2, store.getFeatureCount());
278
        store.dispose();
279
    }
280

    
281
    public void testUpdateFeaturesWithGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
282
        List<Geometry> geoms = new ArrayList<>();
283
        FeatureStore store = createStoreWithGeomFieldFilled(geoms);
284

    
285
        store.edit();
286
        FeatureSet set = store.getFeatureSet();
287
        for (Feature feature : set) {
288
            EditableFeature ef = feature.getEditable();
289
            ef.set(LABEL, "Bye");
290
            set.update(ef);
291
        }
292
        store.finishEditing();
293

    
294
        for (Feature feature : store.getFeatureSet()) {
295
            assertEquals("Bye", feature.get(LABEL));
296
        }
297
        store.dispose();
298
    }
299

    
300
    public void testAddFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
301
        FeatureStore store = createStoreWithoutGeomFieldFilled();
302
        int n = 0;
303
        for (Feature feature : store.getFeatureSet()) {
304
            assertEquals(++n, feature.get(ID));
305
        }
306

    
307
        store.edit();
308
        EditableFeature feature = store.createNewFeature();
309
        feature.set(ID, 4);
310
        store.insert(feature);
311
        store.finishEditing();
312
        assertEquals(4, store.getFeatureCount());
313
        
314
        store.dispose();
315
    }
316

    
317
    public void testRemoveFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
318
        FeatureStore store = createStoreWithoutGeomFieldFilled();
319

    
320
        Feature f;
321
        
322
        store.edit();
323
        FeatureSet featureSet = store.getFeatureSet();
324
        DisposableIterator it = featureSet.fastIterator();
325
        it.next();
326
        f = (Feature) it.next();
327
        store.delete(f);
328
        store.finishEditing();
329

    
330
        assertEquals(2, store.getFeatureCount());
331
        store.dispose();
332
    }
333

    
334
    public void testUpdateFeaturesWithoutGeom() throws DataException, ValidateDataParametersException, CreateGeometryException {
335
        FeatureStore store = createStoreWithoutGeomFieldFilled();
336

    
337
        store.edit();
338
        FeatureSet set = store.getFeatureSet();
339
        for (Feature feature : set) {
340
            EditableFeature ef = feature.getEditable();
341
            ef.set(LABEL, "Bye");
342
            set.update(ef);
343
        }
344
        store.finishEditing();
345

    
346
        for (Feature feature : store.getFeatureSet()) {
347
            assertEquals("Bye", feature.get(LABEL));
348
        }
349
        store.dispose();
350
    }
351

    
352
}