Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.db / org.gvsig.fmap.dal.db.h2 / src / main / java / org / gvsig / fmap / dal / store / h2 / expressionbuilderformatter / Constant.java @ 44644

History | View | Annotate | Download (2.85 KB)

1
package org.gvsig.fmap.dal.store.h2.expressionbuilderformatter;
2

    
3
import java.text.MessageFormat;
4
import org.gvsig.expressionevaluator.ExpressionBuilder;
5
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
6
import org.gvsig.expressionevaluator.Formatter;
7
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
8
import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.EWKB;
9
import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKB;
10
import static org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType.WKT;
11
import org.gvsig.fmap.dal.SQLBuilder;
12
import org.gvsig.fmap.geom.Geometry;
13
import org.gvsig.fmap.geom.GeometryUtils;
14

    
15
/**
16
 *
17
 * @author jjdelcerro
18
 */
19
public class Constant implements Formatter<Value> {
20
    
21
    private static final String FORMAT_ST_GEOMFROMWKB = "ST_GeomFromWKB(({0}), ({1}))";
22
    private static final String FORMAT_ST_GEOMFROMEWKB = "ST_GeomFromEWKB(({0}), ({1}))";
23

    
24
    private final SQLBuilder sqlbuilder;
25
    private final Formatter<Value> formatter;
26
    
27
    public Constant(SQLBuilder sqlbuilder, Formatter<Value> formatter) {
28
        this.sqlbuilder = sqlbuilder;
29
        this.formatter = formatter;
30
    }
31
    
32
    @Override
33
    public boolean canApply(ExpressionBuilder.Value value) {
34
        if (value instanceof ExpressionBuilder.Constant) {
35
            Object x = ((ExpressionBuilder.Constant)value).value();
36
            if( x instanceof byte[] ) {
37
                return true;
38
            }
39
            if( x instanceof Geometry ) {
40
                return true;
41
            }
42
        }
43
        return false;
44
    }
45

    
46
    @Override
47
    public String format(Value constant) {
48
        Object x = ((ExpressionBuilder.Constant)constant).value();
49
        GeometryExpressionBuilder builder = this.sqlbuilder.expression();
50
        if( x instanceof byte[] ) {
51
            return builder.bytearray_x((byte[]) x);
52
        }
53
        if( x instanceof Geometry ) {
54
            Geometry geometry = (Geometry) x;
55
            switch (builder.geometry_support_type()) {
56
                case EWKB:
57
                    return MessageFormat.format(
58
                            FORMAT_ST_GEOMFROMEWKB,
59
                            builder.bytearray_x(GeometryUtils.toEWKB(geometry)),
60
                            String.valueOf(builder.srs_id(geometry.getProjection()))
61
                    );
62
                case WKB:
63
                    return MessageFormat.format(
64
                            FORMAT_ST_GEOMFROMWKB,
65
                            builder.bytearray_x(GeometryUtils.toWKB(geometry)),
66
                            String.valueOf(builder.srs_id(geometry.getProjection()))
67
                    );
68
                case WKT:
69
                default:
70
                    return constant.toString(null);
71
            }
72
            
73
        }
74
        return null;
75
    }
76
    
77
}