Revision 44198 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
TestExpressionBuilder.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expresionevaluator.impl; |
2 | 2 |
|
3 |
import java.util.ArrayList; |
|
4 |
import java.util.List; |
|
5 | 3 |
import junit.framework.TestCase; |
6 | 4 |
import org.apache.commons.lang3.ArrayUtils; |
7 | 5 |
import org.cresques.cts.IProjection; |
8 | 6 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
9 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Config; |
|
10 | 7 |
import org.gvsig.expressionevaluator.ExpressionBuilder.GeometrySupportType; |
11 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Parameter; |
|
12 |
import org.gvsig.expressionevaluator.ExpressionBuilder.Variable; |
|
13 | 8 |
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder; |
14 | 9 |
import org.gvsig.fmap.crs.CRSFactory; |
15 | 10 |
import org.gvsig.fmap.geom.Geometry; |
... | ... | |
29 | 24 |
protected void setUp() throws Exception { |
30 | 25 |
super.setUp(); |
31 | 26 |
new DefaultLibrariesInitializer().fullInitialize(); |
32 |
// new ExpressionEvaluatorImplLibrary().initialize(); |
|
33 | 27 |
} |
34 | 28 |
|
35 | 29 |
@Override |
... | ... | |
40 | 34 |
// TODO add test methods here. The name must begin with 'test'. For example: |
41 | 35 |
// public void testHello() {} |
42 | 36 |
|
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 | 37 |
public void test2() { |
77 | 38 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
78 | 39 |
|
79 | 40 |
builder.and( |
80 | 41 |
builder.eq( |
81 |
builder.lcase(builder.variable("colum_name_c")),
|
|
42 |
builder.lower(builder.variable("colum_name_c")),
|
|
82 | 43 |
builder.parameter("colum_name_p") |
83 | 44 |
) |
84 | 45 |
); |
... | ... | |
86 | 47 |
builder.group( |
87 | 48 |
builder.or( |
88 | 49 |
builder.like( |
89 |
builder.lcase( builder.variable("uno")),
|
|
50 |
builder.lower( builder.variable("uno")),
|
|
90 | 51 |
builder.constant("%10") |
91 | 52 |
), |
92 | 53 |
builder.lt( |
... | ... | |
114 | 75 |
) |
115 | 76 |
); |
116 | 77 |
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) )",
|
|
78 |
"( (LOWER(\"colum_name_c\")) = (?) ) AND ( ( (LOWER(\"uno\")) LIKE ('%10') ) OR ( (\"dos\") < (-3.5) ) ) AND ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?))))) AND ( (\"tres\") > (123456789) )",
|
|
118 | 79 |
builder.toString() |
119 | 80 |
); |
120 | 81 |
assertEquals( |
121 | 82 |
"[colum_name_c, dos, geom1, tres, uno]", |
122 |
ArrayUtils.toString(getVariableNames(builder))
|
|
83 |
ArrayUtils.toString(builder.variables_names())
|
|
123 | 84 |
); |
124 | 85 |
assertEquals( |
125 | 86 |
"[\"colum_name_p\", \"geom2\", 4326]", |
126 |
ArrayUtils.toString(getParameterNames(builder))
|
|
87 |
ArrayUtils.toString(builder.parameters_names())
|
|
127 | 88 |
); |
128 | 89 |
} |
129 | 90 |
|
... | ... | |
140 | 101 |
builder.variable("the_geom") |
141 | 102 |
) |
142 | 103 |
); |
143 |
builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKT);
|
|
104 |
builder.geometry_support_type(GeometrySupportType.WKT);
|
|
144 | 105 |
System.out.println(builder.toString()); |
145 | 106 |
assertEquals( |
146 |
"ST_Intersects((ST_GeomFromText('POINT (10 20)', (4326))), (\"the_geom\"))",
|
|
107 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (\"the_geom\"))",
|
|
147 | 108 |
builder.toString() |
148 | 109 |
); |
149 |
builder.getConfig().set(Config.geometry_type_support, GeometrySupportType.WKB);
|
|
110 |
builder.geometry_support_type(GeometrySupportType.WKB);
|
|
150 | 111 |
System.out.println(builder.toString()); |
151 | 112 |
assertEquals( |
152 | 113 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (\"the_geom\"))", |
... | ... | |
154 | 115 |
); |
155 | 116 |
assertEquals( |
156 | 117 |
"[the_geom]", |
157 |
ArrayUtils.toString(getVariableNames(builder))
|
|
118 |
ArrayUtils.toString(builder.variables_names())
|
|
158 | 119 |
); |
159 | 120 |
assertEquals( |
160 | 121 |
"[]", |
161 |
ArrayUtils.toString(getParameterNames(builder))
|
|
122 |
ArrayUtils.toString(builder.parameters_names())
|
|
162 | 123 |
); |
163 | 124 |
} |
164 | 125 |
|
126 |
public void testParameter() throws CreateGeometryException { |
|
127 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
128 |
|
|
129 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
130 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
131 |
|
|
132 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
133 |
builder.set( |
|
134 |
builder.ST_Intersects( |
|
135 |
builder.geometry(point,proj), |
|
136 |
builder.parameter("the_geom") |
|
137 |
) |
|
138 |
); |
|
139 |
builder.geometry_support_type(GeometrySupportType.WKT); |
|
140 |
System.out.println(builder.toString()); |
|
141 |
assertEquals( |
|
142 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (?))", |
|
143 |
builder.toString() |
|
144 |
); |
|
145 |
builder.geometry_support_type(GeometrySupportType.WKB); |
|
146 |
System.out.println(builder.toString()); |
|
147 |
assertEquals( |
|
148 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (?))", |
|
149 |
builder.toString() |
|
150 |
); |
|
151 |
assertEquals( |
|
152 |
"[]", |
|
153 |
ArrayUtils.toString(builder.variables_names()) |
|
154 |
); |
|
155 |
assertEquals( |
|
156 |
"[\"the_geom\"]", |
|
157 |
ArrayUtils.toString(builder.parameters_names()) |
|
158 |
); |
|
159 |
} |
|
160 |
|
|
161 |
public void testParameterGeomWhitoutSRS() throws CreateGeometryException { |
|
162 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
163 |
|
|
164 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
165 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
166 |
|
|
167 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
168 |
builder.set( |
|
169 |
builder.ST_Intersects( |
|
170 |
builder.geometry(point,proj), |
|
171 |
builder.parameter("the_geom").as_geometry_variable() |
|
172 |
) |
|
173 |
); |
|
174 |
try { |
|
175 |
builder.toString(); |
|
176 |
fail("Geometry parameter without SRS not detected."); |
|
177 |
} catch(IllegalArgumentException ex) { |
|
178 |
// Do nothing, it's ok that fail if not SRS is specified. |
|
179 |
} |
|
180 |
} |
|
181 |
|
|
182 |
public void testPatameterGeomWithSRS1() throws CreateGeometryException { |
|
183 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
184 |
|
|
185 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
186 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
187 |
|
|
188 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
189 |
builder.set( |
|
190 |
builder.ST_Intersects( |
|
191 |
builder.geometry(point,proj), |
|
192 |
builder.parameter("the_geom").srs(proj) |
|
193 |
) |
|
194 |
); |
|
195 |
builder.geometry_support_type(GeometrySupportType.WKT); |
|
196 |
System.out.println(builder.toString()); |
|
197 |
assertEquals( |
|
198 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (4326))))", |
|
199 |
builder.toString() |
|
200 |
); |
|
201 |
builder.geometry_support_type(GeometrySupportType.WKB); |
|
202 |
System.out.println(builder.toString()); |
|
203 |
assertEquals( |
|
204 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (4326))))", |
|
205 |
builder.toString() |
|
206 |
); |
|
207 |
assertEquals( |
|
208 |
"[]", |
|
209 |
ArrayUtils.toString(builder.variables_names()) |
|
210 |
); |
|
211 |
assertEquals( |
|
212 |
"[\"the_geom\"]", |
|
213 |
ArrayUtils.toString(builder.parameters_names()) |
|
214 |
); |
|
215 |
} |
|
216 |
|
|
217 |
public void testParameterGeomWithSRS2() throws CreateGeometryException { |
|
218 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
219 |
|
|
220 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
221 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
222 |
|
|
223 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
224 |
builder.set( |
|
225 |
builder.ST_Intersects( |
|
226 |
builder.geometry(point,proj), |
|
227 |
builder.parameter("the_geom").srs(builder.constant(4326)) |
|
228 |
) |
|
229 |
); |
|
230 |
builder.geometry_support_type(GeometrySupportType.WKT); |
|
231 |
System.out.println(builder.toString()); |
|
232 |
assertEquals( |
|
233 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (4326))))", |
|
234 |
builder.toString() |
|
235 |
); |
|
236 |
builder.geometry_support_type(GeometrySupportType.WKB); |
|
237 |
System.out.println(builder.toString()); |
|
238 |
assertEquals( |
|
239 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (4326))))", |
|
240 |
builder.toString() |
|
241 |
); |
|
242 |
assertEquals( |
|
243 |
"[]", |
|
244 |
ArrayUtils.toString(builder.variables_names()) |
|
245 |
); |
|
246 |
assertEquals( |
|
247 |
"[\"the_geom\"]", |
|
248 |
ArrayUtils.toString(builder.parameters_names()) |
|
249 |
); |
|
250 |
} |
|
251 |
|
|
252 |
public void testParameterGeomWithParameterSRS() throws CreateGeometryException { |
|
253 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
254 |
|
|
255 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
256 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
257 |
|
|
258 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
259 |
builder.set( |
|
260 |
builder.ST_Intersects( |
|
261 |
builder.geometry(point,proj), |
|
262 |
builder.parameter("the_geom").srs( |
|
263 |
builder.parameter().value(proj) |
|
264 |
) |
|
265 |
) |
|
266 |
); |
|
267 |
builder.geometry_support_type(GeometrySupportType.WKT); |
|
268 |
System.out.println(builder.toString()); |
|
269 |
assertEquals( |
|
270 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (?))))", |
|
271 |
builder.toString() |
|
272 |
); |
|
273 |
builder.geometry_support_type(GeometrySupportType.WKB); |
|
274 |
System.out.println(builder.toString()); |
|
275 |
assertEquals( |
|
276 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (?))))", |
|
277 |
builder.toString() |
|
278 |
); |
|
279 |
assertEquals( |
|
280 |
"[]", |
|
281 |
ArrayUtils.toString(builder.variables_names()) |
|
282 |
); |
|
283 |
assertEquals( |
|
284 |
"[\"the_geom\", 4326]", |
|
285 |
ArrayUtils.toString(builder.parameters_names()) |
|
286 |
); |
|
287 |
} |
|
288 |
|
|
289 |
public void testParameterGeomConstant() throws CreateGeometryException { |
|
290 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
|
291 |
|
|
292 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
|
293 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
294 |
|
|
295 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
296 |
Point point2 = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
|
297 |
point2.setProjection(proj); |
|
298 |
builder.set( |
|
299 |
builder.ST_Intersects( |
|
300 |
builder.geometry(point,proj), |
|
301 |
builder.parameter().value(point2) |
|
302 |
) |
|
303 |
); |
|
304 |
builder.geometry_support_type(GeometrySupportType.WKT); |
|
305 |
System.out.println(builder.toString()); |
|
306 |
assertEquals( |
|
307 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (ST_GeomFromText((?), (?))))", |
|
308 |
builder.toString() |
|
309 |
); |
|
310 |
builder.geometry_support_type(GeometrySupportType.WKB); |
|
311 |
System.out.println(builder.toString()); |
|
312 |
assertEquals( |
|
313 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (ST_GeomFromWKB((?), (?))))", |
|
314 |
builder.toString() |
|
315 |
); |
|
316 |
assertEquals( |
|
317 |
"[]", |
|
318 |
ArrayUtils.toString(builder.variables_names()) |
|
319 |
); |
|
320 |
assertEquals( |
|
321 |
"[0x000000000140240000000000004034000000000000, 4326]", |
|
322 |
ArrayUtils.toString(builder.parameters_names()) |
|
323 |
); |
|
324 |
} |
|
325 |
|
|
165 | 326 |
public void test4() throws CreateGeometryException { |
166 | 327 |
ExpressionBuilder builder = new DefaultExpressionBuilder(); |
167 | 328 |
|
... | ... | |
186 | 347 |
); |
187 | 348 |
assertEquals( |
188 | 349 |
"[geom1]", |
189 |
ArrayUtils.toString(getVariableNames(builder))
|
|
350 |
ArrayUtils.toString(builder.variables_names())
|
|
190 | 351 |
); |
191 | 352 |
assertEquals( |
192 | 353 |
"[\"geom2\", 4326]", |
193 |
ArrayUtils.toString(getParameterNames(builder))
|
|
354 |
ArrayUtils.toString(builder.parameters_names())
|
|
194 | 355 |
); |
195 | 356 |
} |
196 | 357 |
|
... | ... | |
213 | 374 |
); |
214 | 375 |
assertEquals( |
215 | 376 |
"[geom]", |
216 |
ArrayUtils.toString(getVariableNames(builder))
|
|
377 |
ArrayUtils.toString(builder.variables_names())
|
|
217 | 378 |
); |
218 | 379 |
assertEquals( |
219 | 380 |
"[]", |
220 |
ArrayUtils.toString(getParameterNames(builder))
|
|
381 |
ArrayUtils.toString(builder.parameters_names())
|
|
221 | 382 |
); |
222 | 383 |
} |
223 | 384 |
} |
Also available in: Unified diff