Revision 41196

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/EvaluatorCreator.java
1
package org.gvsig.symbology.fmap.mapcontext.rendering.legend.styling;
2

  
3
import java.util.HashMap;
4
import java.util.Iterator;
5
import java.util.Map;
6

  
7
import org.gvsig.tools.evaluator.EvaluatorWithDescriptions;
8
import org.gvsig.tools.evaluator.sqljep.SQLJEPEvaluator;
9

  
10

  
11
/**
12
 * 
13
 * Utility class to centralize the creation of an
14
 * @link {@link EvaluatorWithDescriptions}
15
 * 
16
 * TODO Perhaps create a manager in Tools to perform this operation
17
 * 
18
 * @author jldominguez
19
 *
20
 */
21
public class EvaluatorCreator {
22

  
23
	private static Map<String, EvaluatorWithDescriptions> evCache =
24
			new HashMap<String, EvaluatorWithDescriptions>();
25
	
26
    /**
27
     * Create an {@link EvaluatorWithDescriptions} that uses
28
     * the string expression provided
29
     * 
30
     * @param expr
31
     * @return
32
     */
33
    public static EvaluatorWithDescriptions getEvaluator(String expr) {
34
    	
35
    	EvaluatorWithDescriptions resp = evCache.get(expr);
36
    	if (resp == null) {
37
    		resp = new SQLJEPEvaluator(expr);
38
    		if (evCache.size() > 100) {
39
    			removeOne(evCache);
40
    		}
41
    		evCache.put(expr, resp);
42
    	}
43
        return resp; 
44
    }
45
    
46
	private static void removeOne(
47
			Map<String, EvaluatorWithDescriptions> themap) {
48
		
49
		Iterator<String> iter = themap.keySet().iterator();
50
		int count = 50;
51
		String k = null;
52
		while (iter.hasNext() && count > 0) {
53
			k = iter.next();
54
			count--;
55
		}
56
		themap.remove(k);
57
	}
58

  
59
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.symbology/org.gvsig.symbology.lib/org.gvsig.symbology.lib.impl/src/main/java/org/gvsig/symbology/fmap/mapcontext/rendering/legend/styling/DefaultLabelingMethod.java
53 53
import org.gvsig.fmap.mapcontext.rendering.legend.styling.ILabelingMethod;
54 54
import org.gvsig.tools.ToolsLocator;
55 55
import org.gvsig.tools.dynobject.DynStruct;
56
import org.gvsig.tools.evaluator.AndEvaluator;
56 57
import org.gvsig.tools.evaluator.Evaluator;
57 58
import org.gvsig.tools.persistence.PersistenceManager;
58 59
import org.gvsig.tools.persistence.PersistentState;
......
114 115
			// nothing more to do
115 116
			return featureStore.getFeatureSet();
116 117
		}
117
		
118 118
		FeatureQuery featureQuery=featureStore.createFeatureQuery();
119 119
		
120 120
		if (usedFields != null) {
121 121
			featureQuery.setAttributeNames(usedFields);
122 122
		}
123 123

  
124
		Evaluator eva = null;
125
		
124 126
		if (viewPort != null) {
125 127
			FeatureType fty = featureStore.getDefaultFeatureType(); 
126
			Evaluator eva = new IntersectsEnvelopeEvaluator(
128
			eva = new IntersectsEnvelopeEvaluator(
127 129
					viewPort.getAdjustedEnvelope(),
128 130
					layer.getProjection(),
129 131
					fty, fty.getDefaultGeometryAttributeName());
130
			featureQuery.setFilter(eva);
132
			
131 133
		}
134
		
135
		if (lc.getSQLQuery() != null && lc.getSQLQuery().trim().length() > 0) {
136
		    Evaluator vp_eva = eva;
137
		    AndEvaluator and_eva = new AndEvaluator(vp_eva);
138
		    
139
		    String sql_str = lc.getSQLQuery();
140
		    /*
141
		     * SQL filter was validated in the dialog
142
		     */
143
	        Evaluator sql_eval = EvaluatorCreator.getEvaluator(sql_str);
144
	        and_eva.addEvaluator(sql_eval);
145
	        eva = and_eva; 
146
		}
132 147

  
148
		featureQuery.setFilter(eva);
133 149
		return (FeatureSet)featureStore.getFeatureSet(featureQuery);
134 150
	}
135 151

  

Also available in: Unified diff