Revision 46105 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/test/java/org/gvsig/fmap/dal/store/jdbc2/AbstractTestComputedAttributes.java

View differences:

AbstractTestComputedAttributes.java
19 19
import org.slf4j.LoggerFactory;
20 20

  
21 21
public abstract class AbstractTestComputedAttributes extends TestCase {
22
    
22

  
23 23
    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractTestComputedAttributes.class);
24 24

  
25 25
    protected AbstractTestUtils utils;
......
27 27
    public AbstractTestComputedAttributes(String testName) {
28 28
        super(testName);
29 29
    }
30
    
30

  
31 31
    @Override
32 32
    protected void setUp() throws Exception {
33 33
        super.setUp();
34 34
        new DefaultLibrariesInitializer().fullInitialize();
35 35
    }
36
    
36

  
37 37
    @Override
38 38
    protected void tearDown() throws Exception {
39 39
        super.tearDown();
40 40
    }
41
    
41

  
42 42
    public AbstractTestUtils utils() {
43 43
        if (this.utils == null) {
44 44
            this.utils = this.createUtils();
......
47 47
    }
48 48

  
49 49
    protected abstract AbstractTestUtils createUtils();
50
    
50

  
51 51
    // TODO add test methods here. The name must begin with 'test'. For example:
52 52
    // public void testHello() {}
53
    
54 53
    public void testComputed1() throws Exception {
55
        if( !utils().isTheDatabaseAvailable() ) {
56
            return;
57
        }
58
        FeatureStore sourceStore = utils().openSourceStore2();
59
        JDBCServerExplorer explorer = utils().openServerExplorer("testCreate");
54
        try {
55
            if (!utils().isTheDatabaseAvailable()) {
56
                return;
57
            }
58
            FeatureStore sourceStore = utils().openSourceStore2();
59
            JDBCServerExplorer explorer = utils().openServerExplorer("testCreate");
60
            utils().initWorkspace("testCreate");
61
            
62
            utils().info_jdbc(explorer);
60 63

  
61
        utils().info_jdbc(explorer);
64
            utils().drop_tables(explorer, "testCreateTarget2");
65
            utils().create_table_from(explorer, "testCreateTarget2", sourceStore);
66
            utils().insert_into_from(explorer, "testCreateTarget2", sourceStore, FeatureStore.MODE_APPEND);
62 67

  
63
        utils().drop_tables(explorer, "testCreateTarget2");
64
        utils().create_table_from(explorer, "testCreateTarget2", sourceStore);
65
        utils().insert_into_from(explorer, "testCreateTarget2", sourceStore, FeatureStore.MODE_APPEND);
66
      
67
        FeatureStore dbstore = utils().openStore(explorer,"testCreateTarget2");
68
        dbstore.edit();
69
        FeatureType featureType = dbstore.getDefaultFeatureType();
70
        EditableFeatureType eFeatureType = featureType.getEditable();
71
        eFeatureType.add("Compu1", 
72
                DataTypes.INTEGER, 
73
                new DefaultFeatureAttributeEmulatorExpression(
74
                        eFeatureType, 
75
                        ExpressionUtils.createExpression("ID*2")
76
                ));
77
        eFeatureType.add("Compu2", 
78
                DataTypes.INTEGER, 
79
                new DefaultFeatureAttributeEmulatorExpression(
80
                        eFeatureType, 
81
                        ExpressionUtils.createExpression("Poblacion+10000+Compu1")
82
                ));
83
        dbstore.update(eFeatureType);
84
        dbstore.finishEditing();
85
        List<Feature> features = dbstore.getFeatures();
86
        for (int i = 0; i < features.size(); i++) {
87
            Feature feature = features.get(i);
88
            assertEquals("Compu1 "+i, feature.getInt("ID") * 2, feature.getInt("Compu1"));
89
            if(feature.get("Poblacion")==null) {
90
                assertEquals("Compu2 "+i, null, feature.get("Compu2"));
91
            } else {
92
                assertEquals("Compu2 "+i, feature.getInt("Poblacion") + 10000 + feature.getInt("Compu1"), feature.getInt("Compu2"));
68
            FeatureStore dbstore = utils().openStore(explorer, "testCreateTarget2");
69
            dbstore.edit();
70
            FeatureType featureType = dbstore.getDefaultFeatureType();
71
            EditableFeatureType eFeatureType = featureType.getEditable();
72
            eFeatureType.add("Compu1",
73
                    DataTypes.INTEGER,
74
                    new DefaultFeatureAttributeEmulatorExpression(
75
                            eFeatureType,
76
                            ExpressionUtils.createExpression("ID*2")
77
                    ));
78
            eFeatureType.add("Compu2",
79
                    DataTypes.INTEGER,
80
                    new DefaultFeatureAttributeEmulatorExpression(
81
                            eFeatureType,
82
                            ExpressionUtils.createExpression("Poblacion+10000+Compu1")
83
                    ));
84
            dbstore.update(eFeatureType);
85
            dbstore.finishEditing();
86
            List<Feature> features = dbstore.getFeatures();
87
            for (int i = 0; i < features.size(); i++) {
88
                Feature feature = features.get(i);
89
                assertEquals("Compu1 " + i, feature.getInt("ID") * 2, feature.getInt("Compu1"));
90
                if (feature.get("Poblacion") == null) {
91
                    assertEquals("Compu2 " + i, null, feature.get("Compu2"));
92
                } else {
93
                    assertEquals("Compu2 " + i, feature.getInt("Poblacion") + 10000 + feature.getInt("Compu1"), feature.getInt("Compu2"));
94
                }
93 95
            }
96
            DisposeUtils.dispose(dbstore);
97
        } catch (Throwable th) {
98
            LOGGER.warn("", th);
99
            throw th;
94 100
        }
95
        DisposeUtils.dispose(dbstore);
96 101
    }
97
    
102

  
98 103
    @SuppressWarnings("UnusedAssignment")
99 104
    public void testComputed2() throws Exception {
100
        if( !utils().isTheDatabaseAvailable() ) {
101
            return;
102
        }
103
        String testTableName = "testComputedAttributes2";
104
        JDBCServerExplorer explorer = utils().openServerExplorer("computedAttr");
105
        try {
106
            if (!utils().isTheDatabaseAvailable()) {
107
                return;
108
            }
109
            String testTableName = "testComputedAttributes2";
110
            JDBCServerExplorer explorer = utils().openServerExplorer("computedAttr");
105 111

  
106
        utils().info_jdbc(explorer);
107
        utils().drop_tables(explorer, testTableName);
108
        
109
        FeatureStore sourceStore = utils().openSourceStore2();
110
        
111
        utils().create_table_from(explorer, testTableName, sourceStore);
112
        utils().insert_into_from(explorer, testTableName, sourceStore, FeatureStore.MODE_APPEND);
113
      
114
        FeatureStore dbstore = utils().openStore(explorer,testTableName);
115
        
116
        dbstore.edit();
117
        FeatureType featureType = dbstore.getDefaultFeatureType();
118
        EditableFeatureType eFeatureType = featureType.getEditable();
119
        FeatureQuery query = sourceStore.createFeatureQuery();
120
        eFeatureType.add("CompuID", 
121
                DataTypes.INTEGER, 
122
                new DefaultFeatureAttributeEmulatorExpression(
123
                        eFeatureType, 
124
                        ExpressionUtils.createExpression("MOD(ID,10)")
125
                ));
126
        eFeatureType.add("CompuPob", 
127
                DataTypes.INTEGER, 
128
                new DefaultFeatureAttributeEmulatorExpression(
129
                        eFeatureType, 
130
                        ExpressionUtils.createExpression("Poblacion+1")
131
                ));
132
        eFeatureType.add("CompuProv", 
133
                DataTypes.STRING, 
134
                new DefaultFeatureAttributeEmulatorExpression(
135
                        eFeatureType, 
136
                        ExpressionUtils.createExpression("UPPER(Provincia)")
137
                ));
138
        EditableFeatureAttributeDescriptor extraColumn1 = 
139
                query.getExtraColumn().add("ExtraID900", DataTypes.INTEGER);
140
        EditableFeatureAttributeDescriptor extraColumn2 = 
141
                query.getExtraColumn().add("ExtraPobDen", DataTypes.INTEGER);
142
        EditableFeatureAttributeDescriptor extraColumn3 = 
143
                query.getExtraColumn().add("ExtraAno", DataTypes.INTEGER);
112
            utils().info_jdbc(explorer);
113
            utils().drop_tables(explorer, testTableName);
144 114

  
145
        extraColumn1.setFeatureAttributeEmulator(
146
                new DefaultFeatureAttributeEmulatorExpression(
147
                        eFeatureType, 
148
                        ExpressionUtils.createExpression("CompuID+900")));
149
        extraColumn2.setFeatureAttributeEmulator(
150
                new DefaultFeatureAttributeEmulatorExpression(
151
                        eFeatureType, 
152
                        ExpressionUtils.createExpression("CompuPob+Densidad")));
153
        extraColumn3.setFeatureAttributeEmulator(
154
                new DefaultFeatureAttributeEmulatorExpression(
155
                        eFeatureType, 
156
                        ExpressionUtils.createExpression("EXTRACT(YEAR FROM Fecha)")));
157
	
158
        query.getGroupByColumns().add("Comunidad");
159
        query.getGroupByColumns().add("CompuProv");
160
        query.getGroupByColumns().add("ExtraAno");
161
        query.getAggregateFunctions().put("ID", "MIN");
162
        query.getAggregateFunctions().put("Poblacion", "MIN");
163
        query.getAggregateFunctions().put("CompuID", "MIN");
164
        query.getAggregateFunctions().put("CompuPob", "SUM");
165
        query.getAggregateFunctions().put("ExtraID900", "SUM");
166
        query.getAggregateFunctions().put("ExtraPobDen", "SUM");
167
        dbstore.update(eFeatureType);
168
        dbstore.finishEditing();
169
        
170
        
171
        List<Feature> features0 = dbstore.getFeatures(query);
172
        ArrayList<Feature> features = new ArrayList<>();
173
        
174
        System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
175
        for (int i = 0; i < features0.size(); i++) {
176
            Feature feature = features0.get(i);
177
            features.add(feature.getCopy());
178
	    System.out.print(feature.toString());
179
	    System.out.print(","+feature.get("ExtraID900"));
180
	    System.out.print(","+feature.get("ExtraPobDen"));
181
	    System.out.println(","+feature.get("ExtraAno"));
115
            FeatureStore sourceStore = utils().openSourceStore2();
116

  
117
            utils().create_table_from(explorer, testTableName, sourceStore);
118
            utils().insert_into_from(explorer, testTableName, sourceStore, FeatureStore.MODE_APPEND);
119

  
120
            FeatureStore dbstore = utils().openStore(explorer, testTableName);
121

  
122
            dbstore.edit();
123
            FeatureType featureType = dbstore.getDefaultFeatureType();
124
            EditableFeatureType eFeatureType = featureType.getEditable();
125
            FeatureQuery query = sourceStore.createFeatureQuery();
126
            eFeatureType.add("CompuID",
127
                    DataTypes.INTEGER,
128
                    new DefaultFeatureAttributeEmulatorExpression(
129
                            eFeatureType,
130
                            ExpressionUtils.createExpression("MOD(ID,10)")
131
                    ));
132
            eFeatureType.add("CompuPob",
133
                    DataTypes.INTEGER,
134
                    new DefaultFeatureAttributeEmulatorExpression(
135
                            eFeatureType,
136
                            ExpressionUtils.createExpression("Poblacion+1")
137
                    ));
138
            eFeatureType.add("CompuProv",
139
                    DataTypes.STRING,
140
                    new DefaultFeatureAttributeEmulatorExpression(
141
                            eFeatureType,
142
                            ExpressionUtils.createExpression("UPPER(Provincia)")
143
                    ));
144
            EditableFeatureAttributeDescriptor extraColumn1
145
                    = query.getExtraColumn().add("ExtraID900", DataTypes.INTEGER);
146
            EditableFeatureAttributeDescriptor extraColumn2
147
                    = query.getExtraColumn().add("ExtraPobDen", DataTypes.INTEGER);
148
            EditableFeatureAttributeDescriptor extraColumn3
149
                    = query.getExtraColumn().add("ExtraAno", DataTypes.INTEGER);
150

  
151
            extraColumn1.setFeatureAttributeEmulator(
152
                    new DefaultFeatureAttributeEmulatorExpression(
153
                            eFeatureType,
154
                            ExpressionUtils.createExpression("CompuID+900")));
155
            extraColumn2.setFeatureAttributeEmulator(
156
                    new DefaultFeatureAttributeEmulatorExpression(
157
                            eFeatureType,
158
                            ExpressionUtils.createExpression("CompuPob+Densidad")));
159
            extraColumn3.setFeatureAttributeEmulator(
160
                    new DefaultFeatureAttributeEmulatorExpression(
161
                            eFeatureType,
162
                            ExpressionUtils.createExpression("EXTRACT(YEAR FROM Fecha)")));
163

  
164
            query.getGroupByColumns().add("Comunidad");
165
            query.getGroupByColumns().add("CompuProv");
166
            query.getGroupByColumns().add("ExtraAno");
167
            query.getAggregateFunctions().put("ID", "MIN");
168
            query.getAggregateFunctions().put("Poblacion", "MIN");
169
            query.getAggregateFunctions().put("CompuID", "MIN");
170
            query.getAggregateFunctions().put("CompuPob", "SUM");
171
            query.getAggregateFunctions().put("ExtraID900", "SUM");
172
            query.getAggregateFunctions().put("ExtraPobDen", "SUM");
173
            dbstore.update(eFeatureType);
174
            dbstore.finishEditing();
175

  
176
            List<Feature> features0 = dbstore.getFeatures(query);
177
            ArrayList<Feature> features = new ArrayList<>();
178

  
179
            System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
180
            for (int i = 0; i < features0.size(); i++) {
181
                Feature feature = features0.get(i);
182
                features.add(feature.getCopy());
183
                System.out.print(feature.toString());
184
                System.out.print("," + feature.get("ExtraID900"));
185
                System.out.print("," + feature.get("ExtraPobDen"));
186
                System.out.println("," + feature.get("ExtraAno"));
187
            }
188
            System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
189

  
190
            features0 = null;
191
            String[] header = new String[]{"ID", "Comunidad", "Provincia", "Ciudad", "Poblacion", "Densidad", "Fecha", "CompuID", "CompuPob", "CompuProv", "ExtraID900", "ExtraPobDen", "ExtraAno"};
192
            ArrayList<Object[]> values = new ArrayList<>();
193
            values.add(new Object[]{0, null, null, null, null, null, null, 0, null, "", 900, null, null});
194
            values.add(new Object[]{5, "GVA", null, null, 200, null, null, 5, 201, "ALICANTE", 905, 206, 2019});
195
            values.add(new Object[]{6, "GVA", null, null, 20, null, null, 6, 422, "ALICANTE", 1813, 1135, 2020});
196
            values.add(new Object[]{8, "GVA", null, null, 100, null, null, 8, 702, "CASTELLON", 1817, 719, 2019});
197
            values.add(new Object[]{1, "GVA", null, null, 500, null, null, 1, 1502, "VALENCIA", 1803, 1505, 2019});
198
            values.add(new Object[]{3, "GVA", null, null, 50, null, null, 3, 352, "VALENCIA", 1807, 359, 2020});
199
            for (int i = 0; i < features.size(); i++) {
200
                for (int j = 0; j < header.length; j++) {
201
                    assertEquals("feature[" + i + "][" + header[j] + "]:", values.get(i)[j], features.get(i).get(header[j]));
202
                }
203
            }
204

  
205
            DisposeUtils.dispose(dbstore);
206
        } catch (Throwable th) {
207
            LOGGER.warn("", th);
208
            throw th;
182 209
        }
183
        System.out.println("ID,Comunidad,Provincia,Ciudad,Poblacion,Densidad,Fecha,CompuID,CompuPob,CompuProv,ExtraID900,ExtraPobDen,ExtraAno");
184
	
185
        features0 = null;
186
	String[] header = new String[]{"ID","Comunidad","Provincia","Ciudad","Poblacion","Densidad","Fecha","CompuID","CompuPob","CompuProv","ExtraID900","ExtraPobDen","ExtraAno"};
187
	ArrayList<Object[]> values = new ArrayList<>();
188
	values.add(new Object[]{0, null, null, null, null, null, null, 0, null,"",900,null,null});
189
	values.add(new Object[]{1, "GVA", null, null, 500, null, null, 1, 1502, "VALENCIA",1803,1505,2019});
190
	values.add(new Object[]{3, "GVA", null, null, 50, null, null, 3, 352, "VALENCIA",1807,359,2020});
191
	values.add(new Object[]{5, "GVA", null, null, 200, null, null, 5, 201, "ALICANTE",905,206,2019});
192
	values.add(new Object[]{6, "GVA", null, null, 20, null, null, 6, 422, "ALICANTE",1813,1135,2020});
193
	values.add(new Object[]{8, "GVA", null, null, 100, null, null, 8, 702, "CASTELLON",1817,719,2019});
194
	for (int i = 0; i < features.size(); i++) {
195
		for (int j = 0; j < header.length; j++) {
196
			assertEquals("feature["+i+"]["+header[j]+"]:", values.get(i)[j],features.get(i).get(header[j]));
197
		}
198
	}
199

  
200
        DisposeUtils.dispose(dbstore);
201 210
    }
202 211

  
203 212
}

Also available in: Unified diff