svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.labeling.app / org.gvsig.labeling.app.mainplugin / src / main / java / org / gvsig / labeling / lang / LabelClassUtils.java @ 40911
History | View | Annotate | Download (4.07 KB)
1 |
package org.gvsig.labeling.lang; |
---|---|
2 |
|
3 |
import org.gvsig.fmap.dal.exception.DataException; |
4 |
import org.gvsig.fmap.dal.feature.Feature; |
5 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
6 |
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelClass; |
7 |
import org.gvsig.tools.ToolsLocator; |
8 |
import org.gvsig.tools.evaluator.Evaluator; |
9 |
import org.gvsig.tools.evaluator.EvaluatorData; |
10 |
import org.gvsig.tools.evaluator.EvaluatorException; |
11 |
import org.gvsig.tools.evaluator.EvaluatorWithDescriptions; |
12 |
import org.gvsig.tools.persistence.PersistenceManager; |
13 |
import org.gvsig.tools.persistence.Persistent; |
14 |
import org.gvsig.tools.persistence.PersistentContext; |
15 |
import org.gvsig.tools.persistence.PersistentState; |
16 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
17 |
import org.gvsig.tools.persistence.spi.PersistentContextServices; |
18 |
import org.slf4j.Logger; |
19 |
import org.slf4j.LoggerFactory; |
20 |
|
21 |
public class LabelClassUtils { |
22 |
|
23 |
private static Logger logger = |
24 |
LoggerFactory.getLogger(LabelClassUtils.class); |
25 |
|
26 |
private static PersistenceManager persman = |
27 |
ToolsLocator.getPersistenceManager(); |
28 |
|
29 |
public static boolean isUseSqlQuery(ILabelClass lbl) { |
30 |
String str = lbl.getSQLQuery();
|
31 |
return str != null && str.trim().length() > 0; |
32 |
} |
33 |
|
34 |
|
35 |
public static Object clone(Persistent persi) { |
36 |
|
37 |
PersistentContext context = null;
|
38 |
Object resp = null; |
39 |
PersistentState state = null;
|
40 |
try {
|
41 |
state = persman.getState(persi, true);
|
42 |
} catch (PersistenceException e) {
|
43 |
logger.error("While cloning ILabelClass", e);
|
44 |
return persi;
|
45 |
} |
46 |
context = state.getContext(); |
47 |
if (context instanceof PersistentContextServices) { |
48 |
/*
|
49 |
* Ensure that previous instances are not used,
|
50 |
* so objects are recreated
|
51 |
*/
|
52 |
((PersistentContextServices) context).clear(); |
53 |
} |
54 |
try {
|
55 |
resp = persman.create(state); |
56 |
} catch (Exception e) { |
57 |
logger.error("While cloning ILabelClass", e);
|
58 |
return persi;
|
59 |
} |
60 |
return resp;
|
61 |
} |
62 |
|
63 |
public static Object evaluate(String expr, EvaluatorData data) { |
64 |
|
65 |
Evaluator ev = EvaluatorCreator.getEvaluator(expr); |
66 |
Object resp_obj = null; |
67 |
try {
|
68 |
resp_obj = ev.evaluate(data); |
69 |
} catch (EvaluatorException e) {
|
70 |
/*
|
71 |
* Parse exception or field not found or
|
72 |
* divison by zero, etc. Malformed expression, not valid
|
73 |
*/
|
74 |
return null; |
75 |
} catch (Exception e) { |
76 |
/*
|
77 |
* All other exceptions. Should not happen often.
|
78 |
* We assume a strange exception (NPE, etc) and decide it's not a valid expression
|
79 |
*/
|
80 |
return null; |
81 |
} |
82 |
return resp_obj;
|
83 |
} |
84 |
|
85 |
|
86 |
public static boolean validExpression( |
87 |
String str, FeatureStore sto, boolean must_be_boolean) { |
88 |
|
89 |
Feature dummyfeat = null;;
|
90 |
try {
|
91 |
dummyfeat = sto.createNewFeature(true);
|
92 |
} catch (DataException e1) {
|
93 |
logger.error("While getting dummy feature in labeling expression.", e1);
|
94 |
return false; |
95 |
} |
96 |
|
97 |
|
98 |
EvaluatorWithDescriptions evde = EvaluatorCreator.getEvaluator(str); |
99 |
Object resp_obj = null; |
100 |
try {
|
101 |
/*
|
102 |
* Try evaluate feature with default values
|
103 |
*/
|
104 |
resp_obj = evde.evaluate(dummyfeat.getEvaluatorData()); |
105 |
} catch (EvaluatorException e) {
|
106 |
/*
|
107 |
* Parse exception or field not found or
|
108 |
* divison by zero, etc.
|
109 |
* Malformed expression, not valid
|
110 |
*/
|
111 |
return false; |
112 |
} catch (Exception e) { |
113 |
/*
|
114 |
* All other exceptions.
|
115 |
* Should not happen often.
|
116 |
* We assume a strange
|
117 |
* exception (NPE, etc) and decide it's not a valid
|
118 |
* expression
|
119 |
*
|
120 |
*/
|
121 |
return false; |
122 |
} |
123 |
|
124 |
if (must_be_boolean) {
|
125 |
return resp_obj.getClass() == Boolean.class; |
126 |
} else {
|
127 |
return true; |
128 |
} |
129 |
|
130 |
} |
131 |
|
132 |
|
133 |
} |