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 / EvaluatorCreator.java @ 40911

History | View | Annotate | Download (1.54 KB)

1
package org.gvsig.labeling.lang;
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
        static {
27
                for (int i=0; i<200; i++) {
28
                        String e = "XXX" + i;
29
                        SQLJEPEvaluator p = new SQLJEPEvaluator(e);
30
                        evCache.put(e, p);
31
                }
32
        }
33
        
34
        
35
    /**
36
     * Create an {@link EvaluatorWithDescriptions} that uses
37
     * the string expression provided
38
     * 
39
     * @param expr
40
     * @return
41
     */
42
    public static EvaluatorWithDescriptions getEvaluator(String expr) {
43
            
44
            EvaluatorWithDescriptions resp = evCache.get(expr);
45
            if (resp == null) {
46
                    resp = new SQLJEPEvaluator(expr);
47
                    if (evCache.size() > 100) {
48
                            removeOne(evCache);
49
                    }
50
                    evCache.put(expr, resp);
51
            }
52
        return resp; 
53
    }
54
    
55
        private static void removeOne(
56
                        Map<String, EvaluatorWithDescriptions> themap) {
57
                
58
                Iterator<String> iter = themap.keySet().iterator();
59
                int count = 50;
60
                String k = null;
61
                while (iter.hasNext() && count > 0) {
62
                        k = iter.next();
63
                        count--;
64
                }
65
                themap.remove(k);
66
        }
67

    
68
}