Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.shp / src / test / java / org / gvsig / fmap / dal / store / shp / TestCreate.java @ 45641

History | View | Annotate | Download (9.38 KB)

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

    
3
import java.io.File;
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.apache.commons.lang3.StringUtils;
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.DataParameters;
13
import org.gvsig.fmap.dal.DataServerExplorer;
14
import org.gvsig.fmap.dal.DataStore;
15
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
16
import org.gvsig.fmap.dal.feature.EditableFeature;
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.FeatureStore;
21
import org.gvsig.fmap.dal.feature.FeatureType;
22
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
23
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
24
import org.gvsig.fmap.dal.store.dbf.utils.FieldFormatter;
25
import static org.gvsig.fmap.dal.store.shp.SHPStoreProvider.GEOMETRY_ATTIBUTE_NAME;
26
import org.gvsig.fmap.geom.Geometry;
27
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
28
import org.slf4j.Logger;
29
import org.slf4j.LoggerFactory;
30

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

    
49
    // TODO add test methods here. The name must begin with 'test'. For example:
50
    // public void testHello() {}
51
    
52
    protected String getProviderName() {
53
        return DataStore.SHAPE_PROVIDER_NAME;
54
    }
55
    
56
    protected String getTargetFilename() {
57
        return "testCreateTarget1.shp";
58
    }
59

    
60
    protected FeatureStore openTargetStore1() throws Exception {
61
        DataManager dataManager = DALLocator.getDataManager();
62
        File f = TestUtils.getResource(getTargetFilename());
63
        FeatureStore store;
64
        try {
65
            store = (FeatureStore) dataManager.openStore(
66
                    getProviderName(), 
67
                    "shpFile=",f,
68
                    DataParameters.CRS_PARAMTER_NAME, "EPSG:4326"
69
            );
70
        } catch(ValidateDataParametersException ex) {
71
            LOGGER.warn(ex.getLocalizedMessageStack());
72
            throw ex;
73
        }
74
        return store;
75
    }
76

    
77
    protected void createFrom(FeatureStore sourceStore) throws Exception {
78
        DataServerExplorer explorer = TestUtils.openServerExplorer();
79
        NewFeatureStoreParameters params = (NewFeatureStoreParameters) explorer.getAddParameters(
80
                getProviderName()
81
        );
82
        ((FilesystemStoreParameters)params).setFile(TestUtils.getResource(getTargetFilename()));
83
        params.setDynValue(DataParameters.CRS_PARAMTER_NAME, "EPSG:4326");
84
        params.setDynValue("GeometryType", Geometry.TYPES.POINT);
85
        EditableFeatureType ft = params.getDefaultFeatureType();
86
        ft.copyFrom(sourceStore.getDefaultFeatureType());
87
        explorer.add(getProviderName(), params, true);
88
    }
89
    
90
    protected void checkTypes(FeatureType sourceFeatureType) throws Exception {
91
//        DataType STRING_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.STRING);
92
//        DataType INT_TYPE = ToolsLocator.getDataTypesManager().get(DataTypes.INT);
93
        
94
        FeatureStore targetStore = openTargetStore1();
95
        FeatureType targetFeatureType = targetStore.getDefaultFeatureType();
96

    
97
        assertEquals("Feature type size",sourceFeatureType.size(), targetFeatureType.size());
98
        for (int i = 0; i < sourceFeatureType.size(); i++) {
99
            FeatureAttributeDescriptor sourceAttr = sourceFeatureType.get(i);
100
            FeatureAttributeDescriptor targetAttr = targetFeatureType.get(i);
101
            switch(sourceAttr.getType()) {
102
                case DataTypes.GEOMETRY:
103
                    if( targetAttr.getName().equalsIgnoreCase(GEOMETRY_ATTIBUTE_NAME) ) {
104
                        // Si no hay fichero DAL se le habra asignado el nombre por defecto.
105
                    } else {
106
                        assertEquals(
107
                                String.format("Field %s name mismatch", sourceAttr.getName()), 
108
                                sourceAttr.getName(), 
109
                                targetAttr.getName()
110
                        );
111
                    }
112
                    assertEquals(
113
                            String.format("Field %s type mismatch", sourceAttr.getName()), 
114
                            sourceAttr.getDataTypeName(), 
115
                            targetAttr.getDataTypeName()
116
                    );
117
                    assertEquals(
118
                            String.format("Field %s geometry type mismatch", sourceAttr.getName()), 
119
                            sourceAttr.getGeomType().getName(), 
120
                            targetAttr.getGeomType().getName()
121
                    );
122
                    assertEquals(
123
                            String.format("Field %s geometry SRS mismatch", sourceAttr.getName()), 
124
                            sourceAttr.getSRS().toString(), 
125
                            targetAttr.getSRS().toString()
126
                    );
127
                    assertEquals(
128
                            String.format("Field %s size mismatch", sourceAttr.getName()), 
129
                            sourceAttr.getSize(),
130
                            targetAttr.getSize()
131
                    );
132
                    assertEquals(
133
                            String.format("Field %s precision mismatch", sourceAttr.getName()), 
134
                            sourceAttr.getPrecision(),
135
                            targetAttr.getPrecision()
136
                    );
137
                    assertEquals(
138
                            String.format("Field %s scale mismatch", sourceAttr.getName()), 
139
                            sourceAttr.getScale(),
140
                            targetAttr.getScale()
141
                    );
142
                    break;
143
                default:
144
                    // Solo comprobams que pasa con las geometrias, los otros 
145
                    // tipos de datos confiamos que los comprueben los test
146
                    // del dbf.
147
                    break;
148
            }
149
        }
150
    }
151
    
152
    protected void copyFrom(FeatureStore sourceStore, int mode) throws Exception {
153
        FeatureStore targetStore = openTargetStore1();
154
        targetStore.edit(mode);
155
        try {
156
            for (Feature sourceFeature : sourceStore.getFeatureSet()) {
157
                EditableFeature targetFeature = targetStore.createNewFeature(sourceFeature);
158
                targetStore.insert(targetFeature);
159
            }
160
        } finally {
161
            targetStore.finishEditing();
162
        }
163
    }
164
    
165
    protected void checkData(FeatureStore sourceStore) throws Exception {
166
        FeatureStore targetStore = openTargetStore1();
167

    
168
        List<Feature> sourceFeatures = sourceStore.getFeatures();
169
        List<Feature> targetFeatures = targetStore.getFeatures();
170
        assertEquals("Count features", sourceFeatures.size(), targetFeatures.size());
171
        for (int i = 0; i < targetFeatures.size(); i++) {
172
            Feature sourceFeature = sourceFeatures.get(i);
173
            Feature targetFeature = targetFeatures.get(i);
174
            for (FeatureAttributeDescriptor sourceAttr : sourceStore.getDefaultFeatureType()) {
175
                switch(sourceAttr.getType()) {
176
                    case DataTypes.GEOMETRY:
177
                        assertEquals(
178
                                String.format("Feature %03d attribute %s", i, sourceAttr.getName()),
179
                                sourceFeature.get(sourceAttr.getName()),
180
                                targetFeature.get(sourceAttr.getName())
181
                        );
182
                        break;
183
                    default:
184
                      // Solo comprobams que pasa con las geometrias, los otros 
185
                      // tipos de datos confiamos que los comprueben los test
186
                      // del dbf.
187
                      break;
188
                }
189
            }
190
        }
191
    }
192
    
193
    
194
    public void testCreateWithDALFile() throws Exception {
195
        FeatureStore sourceStore = TestUtils.openSourceStore1();
196
        
197
        createFrom(sourceStore);        
198
        
199
        checkTypes(sourceStore.getDefaultFeatureType());
200
        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
201
        checkData(sourceStore);
202
        
203
        createFrom(sourceStore);
204
        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
205
        checkData(sourceStore);
206

    
207
    }
208
    
209
    public void testCreateWithoutDALFile() throws Exception {
210
        FeatureStore sourceStore = TestUtils.openSourceStore1();
211
        
212
        createFrom(sourceStore);        
213
        TestUtils.removeDALFile(getTargetFilename());
214
        
215
        checkTypes(sourceStore.getDefaultFeatureType());
216
        copyFrom(sourceStore, FeatureStore.MODE_APPEND);
217
        TestUtils.removeDALFile(getTargetFilename());
218
        checkData(sourceStore);
219
        
220
        createFrom(sourceStore);
221
        TestUtils.removeDALFile(getTargetFilename());
222
        copyFrom(sourceStore, FeatureStore.MODE_FULLEDIT);
223
        TestUtils.removeDALFile(getTargetFilename());
224
        checkData(sourceStore);
225

    
226
    }
227
}