Revision 44644 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/TestCodeFormatter.java
TestCodeFormatter.java | ||
---|---|---|
1 | 1 |
package org.gvsig.expresionevaluator.impl; |
2 | 2 |
|
3 | 3 |
import java.text.MessageFormat; |
4 |
import static junit.framework.Assert.assertEquals; |
|
5 | 4 |
import junit.framework.TestCase; |
6 | 5 |
import org.apache.commons.lang3.StringUtils; |
7 |
import org.cresques.cts.IProjection; |
|
8 | 6 |
import org.gvsig.expressionevaluator.Code; |
9 | 7 |
import org.gvsig.expressionevaluator.Code.Caller; |
10 | 8 |
import org.gvsig.expressionevaluator.Code.Constant; |
... | ... | |
15 | 13 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
16 | 14 |
import org.gvsig.expressionevaluator.Formatter; |
17 | 15 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
18 |
import org.gvsig.fmap.crs.CRSFactory; |
|
19 |
import org.gvsig.fmap.geom.Geometry; |
|
20 |
import org.gvsig.fmap.geom.GeometryUtils; |
|
21 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
|
22 |
import org.gvsig.fmap.geom.primitive.Point; |
|
23 | 16 |
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer; |
24 | 17 |
|
25 | 18 |
public class TestCodeFormatter extends TestCase { |
... | ... | |
41 | 34 |
return builder.bytearray_x((byte[]) ((Constant)code).value()); |
42 | 35 |
} |
43 | 36 |
} |
44 |
|
|
45 |
private class Formatter_constant_geometry implements Formatter<Code> { |
|
46 |
|
|
47 |
@Override |
|
48 |
public boolean canApply(Code code) { |
|
49 |
if( code instanceof Constant ) { |
|
50 |
return ((Constant)code).value() instanceof Geometry; |
|
51 |
} |
|
52 |
return false; |
|
53 |
} |
|
54 |
|
|
55 |
@Override |
|
56 |
public String format(Code code) { |
|
57 |
Geometry geometry = (Geometry) ((Constant)code).value(); |
|
58 |
return MessageFormat.format( |
|
59 |
"ST_GeomFromWKB(({0}), ({1}))", |
|
60 |
builder.bytearray_x(GeometryUtils.toWKB(geometry)), |
|
61 |
String.valueOf(builder.srs_id(geometry.getProjection())) |
|
62 |
); |
|
63 |
|
|
64 |
} |
|
65 |
} |
|
66 |
|
|
67 | 37 |
|
68 | 38 |
private class Formatter_ST_intersects_H2Spatial implements Formatter<Code> { |
69 | 39 |
// Need for H2Spatial |
... | ... | |
492 | 462 |
Code code = compileExpression(source); |
493 | 463 |
assertEquals("ST_Area(\"GEOMETRY\")", code.toString(formatter())); |
494 | 464 |
} |
495 |
|
|
496 |
public void test3() throws CreateGeometryException { |
|
497 |
ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder(); |
|
498 |
|
|
499 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
500 |
Point point = GeometryUtils.createPoint(10, 20); |
|
501 |
|
|
502 |
builder.set( |
|
503 |
builder.ST_Intersects( |
|
504 |
builder.geometry(point,proj), |
|
505 |
builder.variable("the_geom") |
|
506 |
) |
|
507 |
); |
|
508 |
Code code = compileExpression(builder.toString()); |
|
509 |
assertEquals( |
|
510 |
"ST_Intersects(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")", |
|
511 |
code.toString() |
|
512 |
); |
|
513 |
assertEquals( |
|
514 |
"( ((ST_GeomFromWKB(x'000000000140240000000000004034000000000000', 4326)) && (\"the_geom\")) AND ST_Intersects((ST_GeomFromWKB(x'000000000140240000000000004034000000000000', 4326)),(\"the_geom\") ))", |
|
515 |
code.toString(formatter()) |
|
516 |
); |
|
517 |
} |
|
518 | 465 |
|
519 |
public void test4() throws CreateGeometryException { |
|
520 |
ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder(); |
|
521 |
|
|
522 |
IProjection proj = CRSFactory.getCRS("EPSG:4326"); |
|
523 |
Point point = GeometryUtils.createPoint(10, 20); |
|
524 |
|
|
525 |
builder.set( |
|
526 |
builder.function("ST_Intersects2", |
|
527 |
builder.geometry(point,proj), |
|
528 |
builder.variable("the_geom") |
|
529 |
) |
|
530 |
); |
|
531 |
Code code = compileExpression(builder.toString()); |
|
532 |
assertEquals( |
|
533 |
"ST_Intersects2(ST_GeomFromWKB(DECODE('000000000140240000000000004034000000000000', 'hex'), 4326), \"the_geom\")", |
|
534 |
code.toString() |
|
535 |
); |
|
536 |
assertEquals( |
|
537 |
"(ST_Intersects(ST_GeomFromWKB(x'000000000140240000000000004034000000000000', 4326),\"the_geom\") AND ROWID IN ( SELECT ROWID FROM SpatialIndex WHERE f_table_name = 'mytable' AND f_geometry_column = 'the_geom' AND search_frame = \"mytable\".\"the_geom\"))", |
|
538 |
code.toString(formatter()) |
|
539 |
); |
|
540 |
} |
|
541 |
|
|
542 | 466 |
} |
Also available in: Unified diff