Statistics
| Revision:

gvsig-oracle / org.gvsig.oracle / trunk / org.gvsig.oracle / org.gvsig.oracle.provider / src / main / java / org / gvsig / oracle / dal / expressionbuilderformatter / OracleConstant.java @ 914

History | View | Annotate | Download (2.85 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.oracle.dal.expressionbuilderformatter;
7

    
8
import java.text.MessageFormat;
9
import org.gvsig.expressionevaluator.ExpressionBuilder;
10
import org.gvsig.expressionevaluator.ExpressionBuilder.Constant;
11
import org.gvsig.expressionevaluator.Formatter;
12
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
13
import org.gvsig.fmap.dal.SQLBuilder;
14
import org.gvsig.fmap.geom.Geometry;
15
import org.gvsig.oracle.dal.OracleSQLBuilder;
16

    
17
/**
18
 *
19
 * @author osc
20
 */
21
public class OracleConstant implements Formatter<ExpressionBuilder.Value> {
22

    
23
    private final Formatter<ExpressionBuilder.Value> formatter;
24
    private final OracleSQLBuilder builder;
25
    private final GeometryExpressionBuilder expbuilder;
26
    
27
    public OracleConstant(SQLBuilder builder, Formatter<ExpressionBuilder.Value> formatter) {
28
        this.builder = (OracleSQLBuilder) builder;
29
        this.formatter = formatter;
30
        this.expbuilder = builder.expression();
31
    }
32

    
33
    @Override
34
    public boolean canApply(ExpressionBuilder.Value value) {
35
        return value instanceof ExpressionBuilder.Constant;
36
    }
37

    
38
    @Override
39
    public String format(ExpressionBuilder.Value function) {
40
        Object value = ((Constant) function).value();
41
        if( value instanceof Boolean ) {
42
            if( (Boolean)value ) {
43
                return "(1=1)";
44
            }
45
            return "(1<>1)";
46
        } else if (value instanceof Geometry) {
47
            Geometry geom = (Geometry) value; //function;
48
            try {
49
                switch (this.builder.geometry_support_type()) {
50
                    case EWKB:
51
                        return MessageFormat.format(OracleSQLBuilder.ST_GEOMFROMEWKB,
52
                                this.builder.blob(geom.convertToEWKB()),
53
                                String.valueOf(this.expbuilder.srs_id(geom.getProjection())) //TODO projection from ?
54
                        );
55
                    case WKB:
56
                        return MessageFormat.format(OracleSQLBuilder.ST_GEOMFROMWKB,
57
                                this.builder.blob(geom.convertToWKB()),
58
                                String.valueOf(this.expbuilder.srs_id(geom.getProjection()))
59
                        );
60
                    case WKT:
61
                    default:
62
                        return MessageFormat.format(OracleSQLBuilder.ST_GEOMFROMTEXT,
63
                                geom.convertToWKT(),
64
                                String.valueOf(this.expbuilder.srs_id(geom.getProjection()))
65
                        );
66
                }
67
            } catch (Exception ex) {
68
                throw new RuntimeException("Can't convert geometry to string.", ex);
69
            }
70
        }
71
        return function.toString(null);
72
    }
73
}