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

History | View | Annotate | Download (12.4 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.fmap.dal.DALLocator;
8
import org.gvsig.fmap.dal.DataTypes;
9
import org.gvsig.fmap.dal.DataManager;
10
import org.gvsig.fmap.dal.DataStore;
11
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
12
import org.gvsig.fmap.dal.feature.EditableFeature;
13
import org.gvsig.fmap.dal.feature.EditableFeatureType;
14
import org.gvsig.fmap.dal.feature.Feature;
15
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
16
import org.gvsig.fmap.dal.feature.FeatureStore;
17
import org.gvsig.fmap.dal.feature.FeatureType;
18
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
19
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
20
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
21
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
24

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

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

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

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

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

    
268
    }
269
    
270
//    public void testCreateWithoutDALFile() throws Exception {
271
//        FeatureStore sourceStore = TestUtils.openSourceStore1();
272
//        
273
//        createFrom(sourceStore);        
274
//        TestUtils.removeDALResource(getTargetName());
275
//        
276
//        checkTypes(sourceStore.getDefaultFeatureType());
277
//        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
278
//        TestUtils.removeDALResource(getTargetName());
279
//        checkData(sourceStore);
280
//        
281
//        createFrom(sourceStore);
282
//        TestUtils.removeDALResource(getTargetName());
283
//        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
284
//        TestUtils.removeDALResource(getTargetName());
285
//        checkData(sourceStore);
286
//
287
//    }
288
}