Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / test / java / org / gvsig / expresionevaluator / impl / TestExpressionBuilder.java @ 44006

History | View | Annotate | Download (7.91 KB)

1
package org.gvsig.expresionevaluator.impl;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import junit.framework.TestCase;
6
import org.apache.commons.lang3.ArrayUtils;
7
import org.cresques.cts.IProjection;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Config;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.GeometrySupportType;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter;
12
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable;
13
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder;
14
import org.gvsig.fmap.crs.CRSFactory;
15
import org.gvsig.fmap.geom.Geometry;
16
import org.gvsig.fmap.geom.GeometryLocator;
17
import org.gvsig.fmap.geom.GeometryManager;
18
import org.gvsig.fmap.geom.exception.CreateGeometryException;
19
import org.gvsig.fmap.geom.primitive.Point;
20
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
21

    
22
public class TestExpressionBuilder extends TestCase {
23

    
24
    public TestExpressionBuilder(String testName) {
25
        super(testName);
26
    }
27

    
28
    @Override
29
    protected void setUp() throws Exception {
30
        super.setUp();
31
        new DefaultLibrariesInitializer().fullInitialize();
32
//        new ExpressionEvaluatorImplLibrary().initialize();
33
    }
34

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

    
40
    // TODO add test methods here. The name must begin with 'test'. For example:
41
    // public void testHello() {}
42
    
43
    List<String> getVariableNames(ExpressionBuilder builder) {
44
        List<String> vars = new ArrayList<>();
45
        for (Variable var : builder.getVariables()) {
46
            vars.add(var.getName());
47
        }
48
        return vars;
49
    }
50
    
51
    List<String> getParameterNames(ExpressionBuilder builder) {
52
        List<String> params = new ArrayList<>();
53
        for (Parameter param : builder.getParameters()) {
54
            String s;
55
            switch(param.getType()) {
56
                case Constant:
57
                    Object value = param.getValue();
58
                    if( value==null ) {
59
                        s = "null";
60
                    } else if( value instanceof String ) {
61
                        s = "'" + (String)value + "'";
62
                    } else {
63
                        s = value.toString();
64
                    }    
65
                    break;
66
                case Geometry:
67
                case Variable:
68
                default:
69
                    s = "\"" + param.getName() + "\"";
70
            }
71
            params.add(s);
72
        }
73
        return params;
74
    }
75
    
76
    public void test2() {
77
        ExpressionBuilder builder = new DefaultExpressionBuilder();
78
        
79
        builder.and(
80
          builder.eq(
81
            builder.lcase(builder.variable("colum_name_c")),
82
            builder.parameter("colum_name_p")
83
          )
84
        );
85
        builder.and(
86
            builder.group(
87
                builder.or(
88
                    builder.like(
89
                        builder.lcase( builder.variable("uno")),
90
                        builder.constant("%10")
91
                    ),
92
                    builder.lt(
93
                        builder.variable("dos"),
94
                        builder.constant(-3.5)
95
                    )
96
                )
97
            )
98
        );
99
        builder.and(
100
                builder.ST_Intersects(
101
                    builder.variable("geom1"), 
102
                    builder.ST_Envelope(
103
                        builder.ST_GeomFromWKB(
104
                                builder.parameter("geom2"), 
105
                                builder.parameter().value(4326).as_constant()
106
                        )
107
                    )
108
                )
109
        );
110
        builder.and(
111
            builder.gt(
112
                builder.variable("tres"),
113
                builder.constant(123456789)
114
            )
115
        );
116
        assertEquals(
117
                "( (LCASE(\"colum_name_c\")) = (?) ) AND ( ( (LCASE(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
118
                builder.toString()
119
        );
120
        assertEquals(
121
                "[colum_name_c, dos, geom1, tres, uno]",
122
                ArrayUtils.toString(getVariableNames(builder))
123
        );
124
        assertEquals(
125
                "[\"colum_name_p\", \"geom2\", 4326]",
126
                ArrayUtils.toString(getParameterNames(builder))
127
        );
128
    }
129
    
130
    public void test3() throws CreateGeometryException {
131
        ExpressionBuilder builder = new DefaultExpressionBuilder();
132
                
133
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
134
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
135
        
136
        Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D);
137
        builder.set(        
138
            builder.ST_Intersects(
139
              builder.geometry(point,proj),
140
              builder.variable("the_geom")
141
            )
142
        );
143
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKT);
144
        System.out.println(builder.toString());
145
        assertEquals(
146
                "ST_Intersects((ST_GeomFromText('POINT (10 20)', (4326))), (\"the_geom\"))",
147
                builder.toString()
148
        );
149
        builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKB);
150
        System.out.println(builder.toString());
151
        assertEquals(
152
                "ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (\"the_geom\"))",
153
                builder.toString()
154
        );
155
        assertEquals(
156
                "[the_geom]",
157
                ArrayUtils.toString(getVariableNames(builder))
158
        );
159
        assertEquals(
160
                "[]",
161
                ArrayUtils.toString(getParameterNames(builder))
162
        );
163
    }
164
    
165
    public void test4() throws CreateGeometryException {
166
        ExpressionBuilder builder = new DefaultExpressionBuilder();
167
                
168
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
169
        
170
        builder.and(
171
                builder.ST_Intersects(
172
                    builder.variable("geom1"), 
173
                    builder.ST_Envelope(
174
                        builder.ST_GeomFromWKB(
175
                                builder.parameter("geom2"), 
176
                                builder.parameter().value(proj).as_constant()
177
                        )
178
                    )
179
                )
180
        );
181
        
182
        System.out.println(builder.toString());
183
        assertEquals(
184
                "ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?)))))",
185
                builder.toString()
186
        );
187
        assertEquals(
188
                "[geom1]",
189
                ArrayUtils.toString(getVariableNames(builder))
190
        );
191
        assertEquals(
192
                "[\"geom2\", 4326]",
193
                ArrayUtils.toString(getParameterNames(builder))
194
        );
195
    }
196
        
197
    public void test5() throws CreateGeometryException {
198
        ExpressionBuilder builder = new DefaultExpressionBuilder();
199
                
200
        IProjection proj = CRSFactory.getCRS("EPSG:4326");
201
        
202
        builder.and(
203
                builder.eq(
204
                        builder.ST_SRID( builder.variable("geom") ),
205
                        builder.srs(proj)
206
                )
207
        );
208
        
209
        System.out.println(builder.toString());
210
        assertEquals(
211
                "( (ST_SRID(\"geom\")) = (4326) )",
212
                builder.toString()
213
        );
214
        assertEquals(
215
                "[geom]",
216
                ArrayUtils.toString(getVariableNames(builder))
217
        );
218
        assertEquals(
219
                "[]",
220
                ArrayUtils.toString(getParameterNames(builder))
221
        );
222
    }
223
}