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
$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