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

View differences:

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