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