Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.sqlite / org.gvsig.sqlite.provider / src / test / java / org / gvsig / sqlite / dal / TestCreate.java @ 47579

History | View | Annotate | Download (20.3 KB)

1
package org.gvsig.sqlite.dal;
2

    
3
import java.util.ArrayList;
4
import java.util.Date;
5
import java.util.List;
6
import junit.framework.TestCase;
7
import static junit.framework.TestCase.assertEquals;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.ExpressionUtils;
10
import org.gvsig.fmap.dal.DALLocator;
11
import org.gvsig.fmap.dal.DataTypes;
12
import org.gvsig.fmap.dal.DataManager;
13
import org.gvsig.fmap.dal.DataStore;
14
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
15
import org.gvsig.fmap.dal.feature.EditableFeature;
16
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.EditableFeatureType;
18
import org.gvsig.fmap.dal.feature.Feature;
19
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
20
import org.gvsig.fmap.dal.feature.FeatureQuery;
21
import org.gvsig.fmap.dal.feature.FeatureStore;
22
import org.gvsig.fmap.dal.feature.FeatureType;
23
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
24
import org.gvsig.fmap.dal.impl.expressionevaluator.DefaultFeatureAttributeEmulatorExpression;
25
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
26
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
27
import org.gvsig.tools.dispose.DisposeUtils;
28
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
29
import org.slf4j.Logger;
30
import org.slf4j.LoggerFactory;
31

    
32
public class TestCreate extends TestCase {
33
    private static final Logger LOGGER = LoggerFactory.getLogger(TestCreate.class);
34
    
35
    public static final String DBNAME = "testCreate";
36
    
37
    public TestCreate(String testName) {
38
        super(testName);
39
    }
40
    
41
    @Override
42
    protected void setUp() throws Exception {
43
        super.setUp();
44
        new DefaultLibrariesInitializer().fullInitialize();
45
    }
46
    
47
    @Override
48
    protected void tearDown() throws Exception {
49
        super.tearDown();
50
    }
51

    
52
    // TODO add test methods here. The name must begin with 'test'. For example:
53
    // public void testHello() {}
54
    
55
    protected String getProviderName() {
56
        return SQLiteLibrary.NAME;
57
    }
58
    
59
    protected String getTargetName() {
60
        return "testCreateTarget1";
61
    }
62
    
63
    protected FeatureStore openTargetStore1(JDBCServerExplorer explorer) throws Exception {
64
        JDBCStoreParameters params = explorer.get(getTargetName());
65
        
66
        DataManager dataManager = DALLocator.getDataManager();
67
        FeatureStore store;
68
        try {
69
            store = (FeatureStore) dataManager.openStore(
70
                    getProviderName(), 
71
                    params
72
            );
73
        } catch(ValidateDataParametersException ex) {
74
            LOGGER.warn(ex.getLocalizedMessageStack());
75
            throw ex;
76
        }
77
        return store;
78
    }
79

    
80
    protected void createFrom(JDBCServerExplorer explorer, FeatureStore sourceStore) throws Exception {
81
        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
82
                getTargetName()
83
        );
84
        EditableFeatureType ft = params.getDefaultFeatureType();
85
        ft.addAll(sourceStore.getDefaultFeatureType());
86
        explorer.add(getProviderName(), params, true);
87
    }
88
    
89
    protected void checkTypes(JDBCServerExplorer explorer, FeatureType sourceFeatureType) throws Exception {
90
//        DataType STRING_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.STRING);
91
//        DataType INT_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.INT);
92
        
93
        FeatureStore targetStore = openTargetStore1(explorer);
94
        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
95

    
96
        assertEquals("Feature type size",sourceFeatureType.size(), targetFeatureType.size());
97
        for (int i = 0; i < sourceFeatureType.size(); i++) {
98
            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
99
            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
100
            switch(sourceAttr.getType()) {
101
                case DataTypes.BYTE:
102
                case DataTypes.INT:
103
                case DataTypes.LONG:
104
                case DataTypes.BOOLEAN:
105
                case DataTypes.DATE:
106
                case DataTypes.STRING:
107
                case DataTypes.TIME:
108
                case DataTypes.TIMESTAMP:
109
                case DataTypes.DOUBLE:
110
                case DataTypes.FLOAT:
111
                case DataTypes.DECIMAL:
112
                    assertEquals(
113
                            String.format("Field %s name mismatch", sourceAttr.getName()), 
114
                            sourceAttr.getName(), 
115
                            targetAttr.getName()
116
                    );
117
                    assertEquals(
118
                            String.format("Field %s type mismatch", sourceAttr.getName()), 
119
                            sourceAttr.getDataTypeName(), 
120
                            targetAttr.getDataTypeName()
121
                    );
122
                    assertEquals(
123
                            String.format("Field %s size mismatch", sourceAttr.getName()), 
124
                            sourceAttr.getSize(),
125
                            targetAttr.getSize()
126
                    );
127
                    assertEquals(
128
                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
129
                            sourceAttr.getPrecision(),
130
                            targetAttr.getPrecision()
131
                    );
132
                    assertEquals(
133
                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
134
                            sourceAttr.getScale(),
135
                            targetAttr.getScale()
136
                    );
137
                    break;
138
                case DataTypes.GEOMETRY:
139
                    assertEquals(
140
                            String.format("Field %s name mismatch", sourceAttr.getName()), 
141
                            sourceAttr.getName(), 
142
                            targetAttr.getName()
143
                    );
144
                    assertEquals(
145
                            String.format("Field %s type mismatch", sourceAttr.getName()), 
146
                            sourceAttr.getDataTypeName(), 
147
                            targetAttr.getDataTypeName()
148
                    );
149
                    assertEquals(
150
                            String.format("Field %s geometry type mismatch", sourceAttr.getName()), 
151
                            sourceAttr.getGeomType().getName(), 
152
                            targetAttr.getGeomType().getName()
153
                    );
154
                    assertEquals(
155
                            String.format("Field %s geometry SRS mismatch", sourceAttr.getName()), 
156
                            sourceAttr.getSRS().toString(), 
157
                            targetAttr.getSRS().toString()
158
                    );
159
                    assertEquals(
160
                            String.format("Field %s size mismatch", sourceAttr.getName()), 
161
                            sourceAttr.getSize(),
162
                            targetAttr.getSize()
163
                    );
164
                    assertEquals(
165
                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
166
                            sourceAttr.getPrecision(),
167
                            targetAttr.getPrecision()
168
                    );
169
                    break;
170
                default:
171
                    fail(
172
                        String.format("Field %s type %d (%s) not supported.", 
173
                                targetAttr.getName(),
174
                                targetAttr.getType(),
175
                                targetAttr.getDataTypeName()
176
                        )
177
                    );
178
            }
179
        }
180
    }
181
    
182
    protected void copyFrom(JDBCServerExplorer explorer, FeatureStore sourceStore, int mode) throws Exception {
183
        FeatureStore targetStore = openTargetStore1(explorer);
184
        targetStore.edit(mode);
185
        try {
186
            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
187
                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
188
                targetStore.insert(targetFeature);
189
            }
190
        } finally {
191
            targetStore.finishEditing();
192
        }
193
    }
194
    
195
    protected void checkData(JDBCServerExplorer explorer, FeatureStore sourceStore) throws Exception {
196
        FeatureStore targetStore = openTargetStore1(explorer);
197

    
198
        List<Feature> sourceFeatures = sourceStore.getFeatures();
199
        List<Feature> targetFeatures = targetStore.getFeatures();
200
        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
201
        for (int i = 0; i < targetFeatures.size(); i++) {
202
            Feature sourceFeature = sourceFeatures.get(i);
203
            Feature targetFeature = targetFeatures.get(i);
204
            for (FeatureAttributeDescriptor sourceAttr : sourceStore.getDefaultFeatureType()) {
205
                switch(sourceAttr.getType()) {
206
                    case DataTypes.BYTE:
207
                        assertEquals(
208
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
209
                                sourceFeature.getInt(sourceAttr.getName()),
210
                                targetFeature.getInt(sourceAttr.getName())
211
                        );
212
                        break;
213
                    case DataTypes.TIMESTAMP:
214
                        Date sourceTimestamp = sourceFeature.getDate(sourceAttr.getName());
215
                        Date targetTimestamp = targetFeature.getDate(sourceAttr.getName());
216
                        assertEquals(
217
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
218
                                sourceTimestamp,
219
                                targetTimestamp
220
                        );
221
                        break;
222
                    case DataTypes.TIME:
223
                        assertEquals(
224
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
225
                                sourceFeature.getDate(sourceAttr.getName()),
226
                                targetFeature.getDate(sourceAttr.getName())
227
                        );
228
                        break;
229
                    case DataTypes.GEOMETRY:
230
                        assertEquals(
231
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
232
                                sourceFeature.get(sourceAttr.getName()),
233
                                targetFeature.get(sourceAttr.getName())
234
                        );
235
                        break;
236
                    case DataTypes.STRING:
237
                    case DataTypes.INT:
238
                    case DataTypes.LONG:
239
                    case DataTypes.FLOAT:
240
                    case DataTypes.DOUBLE:
241
                    default:
242
                        Object sourceValue = sourceFeature.get(sourceAttr.getName());
243
                        Object targetValue = targetFeature.get(sourceAttr.getName());
244
                        if( sourceValue == null ) {
245
                            LOGGER.info(String.format("Feature %03d attribute %s is null", i, sourceAttr.getName()));
246
                        }
247
                        assertEquals(
248
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
249
                                sourceValue,
250
                                targetValue
251
                        );
252
                }
253
            }
254
        }
255
    }
256
    
257
    
258
    public void testCreatePopulateAndCheckData() throws Exception {
259
        // FIXME: probablemente habria que empezar por este test para adaptar
260
        // los test a SQLite
261
        try {
262
            FeatureStore sourceStore = TestUtils.openSourceStore1();
263
            JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
264

    
265
            createFrom(explorer, sourceStore);        
266

    
267
            checkTypes(explorer, sourceStore.getDefaultFeatureType());
268
            copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
269
            checkData(explorer, sourceStore);
270

    
271
            JDBCStoreParameters params = explorer.get(this.getTargetName());
272
            explorer.remove(params);
273

    
274
            createFrom(explorer, sourceStore);
275
            copyFrom(explorer, sourceStore, FeatureStore.MODE_FULLEDIT);
276
            checkData(explorer, sourceStore);
277
        } catch(Throwable t) {
278
            LOGGER.warn("",t);
279
            throw t;
280
        }
281
    }
282

    
283
    public void testFilterByDate() throws Exception {
284
        try {
285
            FeatureStore sourceStore = TestUtils.openSourceStore1();
286
            JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
287

    
288
            createFrom(explorer, sourceStore);        
289
            copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
290

    
291
            FeatureStore dbStore = openTargetStore1(explorer);
292
            ExpressionBuilder expbuilder = ExpressionUtils.createExpressionBuilder();
293

    
294
            String filter = expbuilder.or(
295
              expbuilder.and(
296
                expbuilder.gt(
297
                        expbuilder.column("Time"), 
298
                        expbuilder.time("01:02:03")
299
                ),
300
                expbuilder.lt(
301
                        expbuilder.column("Time"), 
302
                        expbuilder.time(new Date())
303
                )
304
              ),
305
              expbuilder.and(
306
                expbuilder.gt(
307
                        expbuilder.column("Date"), 
308
                        expbuilder.date("2019-02-17")
309
                ),
310
                expbuilder.lt(
311
                        expbuilder.column("Date"), 
312
                        expbuilder.date(new Date())
313
                )
314
              )
315
            ).toString();
316
            FeatureQuery query = sourceStore.createFeatureQuery();
317
            query.addFilter(filter);
318
            List<Feature> features = dbStore.getFeatures(query);
319
            int sz = features.size();
320
            if(sz > 0) {
321
                features.get(0);
322
            }
323
        } catch(Throwable t) {
324
            LOGGER.warn("",t);
325
            throw t;
326
        }
327

    
328
    }
329
    
330
    public void testComputed1() throws Exception {
331
        try {
332
            FeatureStore sourceStore = TestUtils.openSourceStore1();
333
            JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
334

    
335
            createFrom(explorer, sourceStore);        
336
            copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
337

    
338
            FeatureStore h2Store = openTargetStore1(explorer);
339
            h2Store.edit();
340
            FeatureType featureType = h2Store.getDefaultFeatureType();
341
            EditableFeatureType eFeatureType = featureType.getEditable();
342
            eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("ID*2")));
343
            eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+10+Compu1")));
344
            h2Store.update(eFeatureType);
345
            h2Store.finishEditing();
346
            List<Feature> features = h2Store.getFeatures();
347
            for (int i = 0; i < features.size(); i++) {
348
                Feature feature = features.get(i);
349
                assertEquals("Compu1 "+i, feature.getInt("ID") * 2, feature.getInt("Compu1"));
350
                if(feature.get("Long")==null) {
351
                    assertEquals("Compu2 "+i, null, feature.get("Compu2"));
352
                } else {
353
                    assertEquals("Compu2 "+i, feature.getInt("Long") + 10 + feature.getInt("Compu1"), feature.getInt("Compu2"));
354
                }
355
            }
356
            DisposeUtils.dispose(h2Store);
357
        } catch(Throwable t) {
358
            LOGGER.warn("",t);
359
            throw t;
360
        }
361
    }
362
    
363
    public void testComputed2() throws Exception {
364
        try {
365
        FeatureStore sourceStore = TestUtils.openSourceStore1();
366
        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
367
        
368
        createFrom(explorer, sourceStore);        
369
        copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
370
      
371
        FeatureStore h2Store = openTargetStore1(explorer);
372
        h2Store.edit();
373
        FeatureType featureType = h2Store.getDefaultFeatureType();
374
        EditableFeatureType eFeatureType = featureType.getEditable();
375
        FeatureQuery query = sourceStore.createFeatureQuery();
376
        eFeatureType.add("Compu1", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("MOD(ID,10)")));
377
        eFeatureType.add("Compu2", DataTypes.INTEGER, new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long+300")));
378
        EditableFeatureAttributeDescriptor extraColumn1 = query.getExtraColumn().add("Extra1", DataTypes.INTEGER);
379
        EditableFeatureAttributeDescriptor extraColumn2 = query.getExtraColumn().add("Extra2", DataTypes.INTEGER);
380
//        EditableFeatureAttributeDescriptor extraColumn3 = query.getExtraColumn().add("LongMax", DataTypes.INTEGER);
381
        extraColumn1.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Compu1+1")));
382
        extraColumn2.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("20+Byte")));
383
//        extraColumn3.setFeatureAttributeEmulator(new DefaultFeatureAttributeEmulatorExpression(eFeatureType, ExpressionUtils.createExpression("Long")));
384
        query.getGroupByColumns().add("Decimal");
385
        query.getGroupByColumns().add("Extra1");
386
//        query.getGroupByColumns().add("Compu1");
387
        query.getAggregateFunctions().put("ID", "MIN");
388
        query.getAggregateFunctions().put("Byte", "MIN");
389
//        query.getAggregateFunctions().put("Long", "MIN");
390
//        query.getAggregateFunctions().put("LongMax", "MAX");
391
        query.getAggregateFunctions().put("Compu1", "MIN");
392
        query.getAggregateFunctions().put("Double", "SUM");
393
        query.getAggregateFunctions().put("Extra2", "SUM");
394
        query.getAggregateFunctions().put("Compu2", "SUM");
395
        h2Store.update(eFeatureType);
396
        h2Store.finishEditing();
397
        
398
        
399
        List<Feature> features0 = h2Store.getFeatures(query);
400
        ArrayList<Feature> features = new ArrayList<>();
401
        
402
        for (int i = 0; i < features0.size(); i++) {
403
            Feature feature = features0.get(i);
404
            features.add(feature.getCopy());
405
        }
406
        features0 = null;
407
        Feature feature = features.get(1);
408
        feature.get("Compu1");
409
        feature.get("Compu2");
410
        assertEquals("Compu2", 3602, feature.getInt("Compu2"));
411
        assertEquals("Compu1", 1, feature.getInt("Compu1"));
412

    
413
//        assertEquals("Long0",null,features.get(0).get("Long"));
414
//        assertEquals("Long1",null,features.get(1).get("Long"));
415
//        assertEquals("Long2",1000L,features.get(2).getLong("Long"));
416
//        assertEquals("Long3",1001L,features.get(3).getLong("Long"));
417
//        assertEquals("Long4",2000L,features.get(4).getLong("Long"));
418
//        assertEquals("Long5",2002L,features.get(5).getLong("Long"));
419
//        assertEquals("Long6",3000L,features.get(6).getLong("Long"));
420
//        assertEquals("Long7",4000L,features.get(7).getLong("Long"));
421
//        assertEquals("Long8",4001L,features.get(8).getLong("Long"));
422
//        assertEquals("Long9",5000L,features.get(9).getLong("Long"));
423
//        assertEquals("Long10",5002L,features.get(10).getLong("Long"));
424
//        assertEquals("Long11",6000L,features.get(11).getLong("Long"));
425
//        assertEquals("Long12",6003L,features.get(12).getLong("Long"));
426
//        assertEquals("Long13",7000L,features.get(13).getLong("Long"));
427
//        assertEquals("Long14",7004L,features.get(14).getLong("Long"));
428
//        assertEquals("Long15",8000L,features.get(15).getLong("Long"));
429
//        assertEquals("Long16",8005L,features.get(16).getLong("Long"));
430
//        assertEquals("Long17",9000L,features.get(17).getLong("Long"));
431
//        assertEquals("Long18",9006L,features.get(18).getLong("Long"));
432
        
433
//        for (int i = 0; i < features.size(); i++) {
434
//            Feature feature = features.get(i);
435
//            assertEquals("Long", feature.getInt("ID") * 2, feature.getInt("Compu1"));
436
//            assertEquals("Compu2", feature.getInt("Long") + 10 + feature.getInt("Compu1"), feature.getInt("Compu2"));
437
//        }
438
        DisposeUtils.dispose(h2Store);
439
        } catch(Throwable t) {
440
            LOGGER.warn("",t);
441
            throw t;
442
        }
443
    }
444
    
445
    
446

    
447
}