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 @ 44296

History | View | Annotate | Download (2.48 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.fmap.dal.SQLBuilder;
8
import org.gvsig.fmap.geom.Geometry;
9
import org.gvsig.fmap.geom.GeometryUtils;
10

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

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

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