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 @ 44198
History | View | Annotate | Download (14.8 KB)
1 |
package org.gvsig.expresionevaluator.impl; |
---|---|
2 |
|
3 |
import junit.framework.TestCase; |
4 |
import org.apache.commons.lang3.ArrayUtils; |
5 |
import org.cresques.cts.IProjection; |
6 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
7 |
import org.gvsig.expressionevaluator.ExpressionBuilder.GeometrySupportType; |
8 |
import org.gvsig.expressionevaluator.impl.DefaultExpressionBuilder; |
9 |
import org.gvsig.fmap.crs.CRSFactory; |
10 |
import org.gvsig.fmap.geom.Geometry; |
11 |
import org.gvsig.fmap.geom.GeometryLocator; |
12 |
import org.gvsig.fmap.geom.GeometryManager; |
13 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
14 |
import org.gvsig.fmap.geom.primitive.Point; |
15 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
16 |
|
17 |
public class TestExpressionBuilder extends TestCase { |
18 |
|
19 |
public TestExpressionBuilder(String testName) { |
20 |
super(testName);
|
21 |
} |
22 |
|
23 |
@Override
|
24 |
protected void setUp() throws Exception { |
25 |
super.setUp();
|
26 |
new DefaultLibrariesInitializer().fullInitialize();
|
27 |
} |
28 |
|
29 |
@Override
|
30 |
protected void tearDown() throws Exception { |
31 |
super.tearDown();
|
32 |
} |
33 |
|
34 |
// TODO add test methods here. The name must begin with 'test'. For example:
|
35 |
// public void testHello() {}
|
36 |
|
37 |
public void test2() { |
38 |
ExpressionBuilder builder = new DefaultExpressionBuilder();
|
39 |
|
40 |
builder.and( |
41 |
builder.eq( |
42 |
builder.lower(builder.variable("colum_name_c")),
|
43 |
builder.parameter("colum_name_p")
|
44 |
) |
45 |
); |
46 |
builder.and( |
47 |
builder.group( |
48 |
builder.or( |
49 |
builder.like( |
50 |
builder.lower( builder.variable("uno")),
|
51 |
builder.constant("%10")
|
52 |
), |
53 |
builder.lt( |
54 |
builder.variable("dos"),
|
55 |
builder.constant(-3.5)
|
56 |
) |
57 |
) |
58 |
) |
59 |
); |
60 |
builder.and( |
61 |
builder.ST_Intersects( |
62 |
builder.variable("geom1"),
|
63 |
builder.ST_Envelope( |
64 |
builder.ST_GeomFromWKB( |
65 |
builder.parameter("geom2"),
|
66 |
builder.parameter().value(4326).as_constant()
|
67 |
) |
68 |
) |
69 |
) |
70 |
); |
71 |
builder.and( |
72 |
builder.gt( |
73 |
builder.variable("tres"),
|
74 |
builder.constant(123456789)
|
75 |
) |
76 |
); |
77 |
assertEquals( |
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) )",
|
79 |
builder.toString() |
80 |
); |
81 |
assertEquals( |
82 |
"[colum_name_c, dos, geom1, tres, uno]",
|
83 |
ArrayUtils.toString(builder.variables_names()) |
84 |
); |
85 |
assertEquals( |
86 |
"[\"colum_name_p\", \"geom2\", 4326]",
|
87 |
ArrayUtils.toString(builder.parameters_names()) |
88 |
); |
89 |
} |
90 |
|
91 |
public void test3() throws CreateGeometryException { |
92 |
ExpressionBuilder builder = new DefaultExpressionBuilder();
|
93 |
|
94 |
GeometryManager geometryManager = GeometryLocator.getGeometryManager(); |
95 |
IProjection proj = CRSFactory.getCRS("EPSG:4326");
|
96 |
|
97 |
Point point = geometryManager.createPoint(10, 20, Geometry.SUBTYPES.GEOM2D); |
98 |
builder.set( |
99 |
builder.ST_Intersects( |
100 |
builder.geometry(point,proj), |
101 |
builder.variable("the_geom")
|
102 |
) |
103 |
); |
104 |
builder.geometry_support_type(GeometrySupportType.WKT); |
105 |
System.out.println(builder.toString());
|
106 |
assertEquals( |
107 |
"ST_Intersects((ST_GeomFromText(('POINT (10 20)'), (4326))), (\"the_geom\"))",
|
108 |
builder.toString() |
109 |
); |
110 |
builder.geometry_support_type(GeometrySupportType.WKB); |
111 |
System.out.println(builder.toString());
|
112 |
assertEquals( |
113 |
"ST_Intersects((ST_GeomFromWKB((DECODE('000000000140240000000000004034000000000000','hex')), (4326))), (\"the_geom\"))",
|
114 |
builder.toString() |
115 |
); |
116 |
assertEquals( |
117 |
"[the_geom]",
|
118 |
ArrayUtils.toString(builder.variables_names()) |
119 |
); |
120 |
assertEquals( |
121 |
"[]",
|
122 |
ArrayUtils.toString(builder.parameters_names()) |
123 |
); |
124 |
} |
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 |
|
326 |
public void test4() throws CreateGeometryException { |
327 |
ExpressionBuilder builder = new DefaultExpressionBuilder();
|
328 |
|
329 |
IProjection proj = CRSFactory.getCRS("EPSG:4326");
|
330 |
|
331 |
builder.and( |
332 |
builder.ST_Intersects( |
333 |
builder.variable("geom1"),
|
334 |
builder.ST_Envelope( |
335 |
builder.ST_GeomFromWKB( |
336 |
builder.parameter("geom2"),
|
337 |
builder.parameter().value(proj).as_constant() |
338 |
) |
339 |
) |
340 |
) |
341 |
); |
342 |
|
343 |
System.out.println(builder.toString());
|
344 |
assertEquals( |
345 |
"ST_Intersects((\"geom1\"), (ST_Envelope(ST_GeomFromWKB((?), (?)))))",
|
346 |
builder.toString() |
347 |
); |
348 |
assertEquals( |
349 |
"[geom1]",
|
350 |
ArrayUtils.toString(builder.variables_names()) |
351 |
); |
352 |
assertEquals( |
353 |
"[\"geom2\", 4326]",
|
354 |
ArrayUtils.toString(builder.parameters_names()) |
355 |
); |
356 |
} |
357 |
|
358 |
public void test5() throws CreateGeometryException { |
359 |
ExpressionBuilder builder = new DefaultExpressionBuilder();
|
360 |
|
361 |
IProjection proj = CRSFactory.getCRS("EPSG:4326");
|
362 |
|
363 |
builder.and( |
364 |
builder.eq( |
365 |
builder.ST_SRID( builder.variable("geom") ),
|
366 |
builder.srs(proj) |
367 |
) |
368 |
); |
369 |
|
370 |
System.out.println(builder.toString());
|
371 |
assertEquals( |
372 |
"( (ST_SRID(\"geom\")) = (4326) )",
|
373 |
builder.toString() |
374 |
); |
375 |
assertEquals( |
376 |
"[geom]",
|
377 |
ArrayUtils.toString(builder.variables_names()) |
378 |
); |
379 |
assertEquals( |
380 |
"[]",
|
381 |
ArrayUtils.toString(builder.parameters_names()) |
382 |
); |
383 |
} |
384 |
} |