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