Statistics
| Revision:

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
}