Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.db / org.gvsig.fmap.dal.db.h2 / src / test / java / org / gvsig / fmap / dal / store / h2 / TestCreate.java @ 45063

History | View | Annotate | Download (13.2 KB)

1
package org.gvsig.fmap.dal.store.h2;
2

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

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

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

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

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

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

    
271
    }
272

    
273
    public void testFilterByDate() throws Exception {
274
        FeatureStore sourceStore = TestUtils.openSourceStore1();
275
        JDBCServerExplorer explorer = TestUtils.openServerExplorer(DBNAME);
276
        
277
        createFrom(explorer, sourceStore);        
278
        copyFrom(explorer, sourceStore, FeatureStore.MODE_APPEND);
279
      
280
        FeatureStore h2Store = openTargetStore1(explorer);
281
        ExpressionBuilder expbuilder = ExpressionUtils.createExpressionBuilder();
282

    
283
        String filter = expbuilder.or(
284
          expbuilder.and(
285
            expbuilder.gt(
286
                    expbuilder.column("Time"), 
287
                    expbuilder.time("01:02:03")
288
            ),
289
            expbuilder.lt(
290
                    expbuilder.column("Time"), 
291
                    expbuilder.time(new Date())
292
            )
293
          ),
294
          expbuilder.and(
295
            expbuilder.gt(
296
                    expbuilder.column("Date"), 
297
                    expbuilder.date("2019-02-17")
298
            ),
299
            expbuilder.lt(
300
                    expbuilder.column("Date"), 
301
                    expbuilder.date(new Date())
302
            )
303
          )
304
        ).toString();
305
        FeatureQuery query = sourceStore.createFeatureQuery();
306
        query.addFilter(filter);
307
        List<Feature> features = h2Store.getFeatures(query);
308
        int sz = features.size();
309
    }
310

    
311
}