Statistics
| Revision:

gvsig-mssqlserver / trunk / org.gvsig.mssqlserver / org.gvsig.mssqlserver.provider / src / main / java / org / gvsig / mssqlserver / dal / expressionbuilderformatter / MSSQLConstant.java @ 213

History | View | Annotate | Download (3.12 KB)

1
package org.gvsig.mssqlserver.dal.expressionbuilderformatter;
2

    
3
import java.text.MessageFormat;
4
import java.util.List;
5
import java.util.Objects;
6
import org.apache.commons.lang3.StringUtils;
7
import org.cresques.cts.IProjection;
8
import org.gvsig.expressionevaluator.ExpressionBuilder;
9
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
10
import static org.gvsig.expressionevaluator.ExpressionBuilder.EMPTY_FORMATTER;
11
import org.gvsig.expressionevaluator.ExpressionBuilder.Function;
12
import org.gvsig.expressionevaluator.ExpressionBuilder.Value;
13
import org.gvsig.expressionevaluator.Formatter;
14
import org.gvsig.fmap.dal.SQLBuilder;
15
import org.gvsig.fmap.dal.feature.spi.SQLBuilderBase;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryUtils;
18

    
19
/**
20
 *
21
 * @author jjdelcerro
22
 */
23
class MSSQLConstant implements Formatter<Value> {
24

    
25
    private final Formatter<Value> formatter;
26
    private final SQLBuilder builder;
27
    private final ExpressionBuilder expbuilder;
28
    
29
    public MSSQLConstant(SQLBuilder builder, Formatter<Value> formatter) {
30
        this.builder = builder;
31
        this.formatter = formatter;
32
        this.expbuilder = builder.expression();
33
    }
34
    
35
    @Override
36
    public boolean canApply(Value value) {
37
        return value instanceof Constant;
38
    }
39

    
40
    @Override
41
    public String format(Value function) {
42
          Object value = ((Constant) function).value();
43

    
44
            if( value==null ) {
45
                return "NULL";
46
            }
47
            if( value instanceof byte[] ) {
48
                return this.expbuilder.bytearray_0x((byte[]) value);
49
            }
50
            if (value instanceof String) {
51
                return this.builder.as_string((String) value);
52
            }
53
            if( value instanceof Geometry ) {
54
                Geometry geometry = (Geometry) value;
55
                switch (this.builder.geometry_support_type()) {
56
                    case EWKB:
57
                    case WKB:
58
                        String p1 = this.expbuilder.bytearray_0x(GeometryUtils.toWKB(geometry));
59
                        String p2 = String.valueOf(this.expbuilder.srs_id(geometry.getProjection()));
60
                        String r = MessageFormat.format("geometry::STGeomFromWKB({0}, {1})", p1, p2);
61
                        return r;
62
                    case WKT:
63
                    default:
64
                        String p3 = this.expbuilder.bytearray_0x(GeometryUtils.toWKB(geometry));
65
                        String p4 = String.valueOf(this.expbuilder.srs_id(geometry.getProjection()));
66
                        String r1 = MessageFormat.format("geometry::STGeomFromText({0}, {1})", p3, p4);
67
                        return r1;
68
                }
69
            }
70
            if( value instanceof IProjection ) {
71
                return Objects.toString(this.expbuilder.srs_id((IProjection)(value)));
72
            }
73
            if (value instanceof Boolean) {
74
                // TODO correct values
75
                if (((Boolean) value)) {
76
                    return "(1=1)";
77
                } else {
78
                    return "(1<>1)";
79
                }
80
            }
81
            return Objects.toString(value, "");
82
        }
83
    }
84