Revision 46091 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/expressionbuilder/formatters/$Constant.java

View differences:

$Constant.java
34 34
import org.gvsig.fmap.dal.SQLBuilder;
35 35
import static org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase.PROP_SYMBOLTABLE;
36 36
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$CONSTANT;
37
import org.gvsig.expressionevaluator.GeometryExpressionBuilder;
38
import org.gvsig.fmap.geom.Geometry;
37 39

  
38 40
/**
39 41
 *
......
59 61

  
60 62
    @Override
61 63
    public String format(Value value) {
62
        return resolve(this.sqlbuilder.expression(), this.formatter, value);
64
        return resolve(this.sqlbuilder, this.formatter, value);
63 65
    }
64 66
    
65 67
    public static boolean isConstant(Value value) {
......
70 72
               StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function)value).name(),FUNCTION_$CONSTANT);
71 73
    }
72 74
    
73
    public static String resolve(Value value) {
74
        ExpressionBuilder builder = ExpressionUtils.createExpressionBuilder();
75
        return resolve(builder, null, value);
76
    }
77 75
    
78
    public static String resolve(ExpressionBuilder builder, Formatter<Value> formatter, Value value) {
76
    public static String resolve(SQLBuilder sqlbuilder, Formatter<Value> formatter, Value value) {
77
		GeometryExpressionBuilder builder = sqlbuilder.expression();
79 78
        if( value instanceof ExpressionBuilder.Constant) {
80 79
            Object x = ((ExpressionBuilder.Constant)value).value();
81 80
            return builder.constant(x).toString(formatter);
......
83 82
                StringUtils.equalsIgnoreCase(((ExpressionBuilder.Function)value).name(),FUNCTION_$CONSTANT) ) {
84 83
            SymbolTable symbolTable = (SymbolTable) value.getProperty(PROP_SYMBOLTABLE);
85 84
            Object x = ExpressionUtils.evaluate(symbolTable, value.toString());
85
			
86
			if( x instanceof Geometry && builder instanceof GeometryExpressionBuilder) {
87
				GeometryExpressionBuilder gbuilder = (GeometryExpressionBuilder) builder;
88
				Geometry geom = (Geometry) x;
89
				String hexwkb = geom.convertToHexWKBQuietly();
90
				
91
				Function v = gbuilder.ST_GeomFromWKB(
92
					gbuilder.decode(
93
						gbuilder.constant(hexwkb),
94
						gbuilder.constant("hex")
95
					),
96
					gbuilder.constant(
97
						sqlbuilder.srs_id(geom.getProjection())
98
					)
99
				);
100
				return v.toString(formatter);
101
			}
86 102
            return builder.constant(x).toString(formatter);
87 103
        } 
88 104
        throw new RuntimeException("Expected constant value or $$CONSTANT function ("+Objects.toString(value)+").");

Also available in: Unified diff