Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.swing / org.gvsig.expressionevaluator.swing.impl / src / main / java / org / gvsig / expressionevaluator / swing / impl / DefaultExpressionEvaluatorSwingManager.java @ 44080

History | View | Annotate | Download (7.05 KB)

1 43939 jjdelcerro
package org.gvsig.expressionevaluator.swing.impl;
2
3
import java.util.ArrayList;
4 43983 jjdelcerro
import java.util.Collection;
5 44034 jjdelcerro
import java.util.Collections;
6
import java.util.Comparator;
7 43939 jjdelcerro
import java.util.HashMap;
8
import java.util.List;
9
import java.util.Map;
10 43983 jjdelcerro
import javax.swing.JButton;
11
import javax.swing.text.JTextComponent;
12 44034 jjdelcerro
import org.apache.commons.lang3.StringUtils;
13 43939 jjdelcerro
import org.gvsig.expressionevaluator.Function;
14 43983 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTable;
15 44076 jjdelcerro
import org.gvsig.expressionevaluator.swing.CalculatorController;
16 43939 jjdelcerro
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
17
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
18 43983 jjdelcerro
import org.gvsig.expressionevaluator.swing.Element;
19
import org.gvsig.expressionevaluator.swing.Element.ConstantElement;
20
import org.gvsig.expressionevaluator.swing.Element.FunctionElement;
21
import org.gvsig.expressionevaluator.swing.Element.GroupElement;
22
import org.gvsig.expressionevaluator.swing.Element.VariableElement;
23
import org.gvsig.expressionevaluator.swing.ElementFactory;
24
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
25
import org.gvsig.expressionevaluator.swing.JExpressionPicker;
26
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultConstantValueElement;
27
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultFunctionElement;
28
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultGroupElement;
29
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultVariableElement;
30 44012 jjdelcerro
import org.gvsig.tools.ToolsLocator;
31
import org.gvsig.tools.i18n.I18nManager;
32 43939 jjdelcerro
33 43983 jjdelcerro
public class DefaultExpressionEvaluatorSwingManager
34
        implements ExpressionEvaluatorSwingManager {
35 43939 jjdelcerro
36 43983 jjdelcerro
    private Map<String, ElementFactory> elementsFactories;
37 43939 jjdelcerro
38
    public DefaultExpressionEvaluatorSwingManager() {
39 43983 jjdelcerro
        this.elementsFactories = new HashMap<>();
40 43939 jjdelcerro
    }
41 43983 jjdelcerro
42
    @Override
43
    public List<Element> createElements(Collection<SymbolTable> symbolTables) {
44 44012 jjdelcerro
        I18nManager i18n = ToolsLocator.getI18nManager();
45 43939 jjdelcerro
        Map<String, Function> functions = new HashMap<>();
46
47 43983 jjdelcerro
        for (SymbolTable symbolTable : symbolTables) {
48
            for (Function function : symbolTable.functions()) {
49
                functions.put(function.name().toUpperCase(), function);
50
            }
51
        }
52
53
        Map<String, GroupElement> functionGroups = new HashMap<>();
54
        Map<String, GroupElement> operatorGroups = new HashMap<>();
55 43939 jjdelcerro
        for (Function function : functions.values()) {
56 43983 jjdelcerro
            if (function.isOperator()) {
57 43939 jjdelcerro
                String groupName = function.group();
58
                GroupElement group = operatorGroups.get(groupName);
59 43983 jjdelcerro
                if (group == null) {
60 43939 jjdelcerro
                    group = new DefaultGroupElement(groupName);
61
                    operatorGroups.put(groupName, group);
62
                }
63
                group.addElement(new DefaultFunctionElement(function));
64
            } else {
65
                String groupName = function.group();
66
                GroupElement group = functionGroups.get(groupName);
67 43983 jjdelcerro
                if (group == null) {
68 43939 jjdelcerro
                    group = new DefaultGroupElement(groupName);
69
                    functionGroups.put(groupName, group);
70
                }
71
                group.addElement(new DefaultFunctionElement(function));
72
            }
73
        }
74 44012 jjdelcerro
        GroupElement builtinFunctions = this.createGroupElement(i18n.getTranslation("_Functions"));
75 43939 jjdelcerro
        for (GroupElement group : functionGroups.values()) {
76
            builtinFunctions.addElement(group);
77
        }
78 44012 jjdelcerro
        GroupElement operatorFunctions = this.createGroupElement(i18n.getTranslation("_Operators"));
79 43939 jjdelcerro
        for (GroupElement group : operatorGroups.values()) {
80
            operatorFunctions.addElement(group);
81
        }
82 43983 jjdelcerro
        List<Element> elements = new ArrayList<>();
83
        elements.add(operatorFunctions);
84
        elements.add(builtinFunctions);
85
        return elements;
86 43939 jjdelcerro
    }
87 43983 jjdelcerro
88 43939 jjdelcerro
    @Override
89 43983 jjdelcerro
    public void registerElement(ElementFactory factory) {
90
        if (this.elementsFactories == null) {
91
            this.elementsFactories = new HashMap<>();
92 43939 jjdelcerro
        }
93 43983 jjdelcerro
        this.elementsFactories.put(factory.getName().toLowerCase(), factory);
94 43939 jjdelcerro
    }
95 43983 jjdelcerro
96 43939 jjdelcerro
    @Override
97 44034 jjdelcerro
    public Collection<ElementFactory> getElementFactories() {
98
        if (this.elementsFactories == null) {
99
            this.elementsFactories = new HashMap<>();
100
        }
101
        List<ElementFactory> factories = new ArrayList<>();
102
        factories.addAll(this.elementsFactories.values());
103
        Collections.sort(factories, new Comparator<ElementFactory>() {
104
            @Override
105
            public int compare(ElementFactory o1, ElementFactory o2) {
106
                return StringUtils.compare(o1.getName(), o2.getName());
107
            }
108
        });
109
        return factories;
110
    }
111
112
    @Override
113 43983 jjdelcerro
    public JExpressionBuilder createJExpressionBuilder() {
114
        DefaultJExpressionBuilder x = new DefaultJExpressionBuilder(
115
                this,
116
                new DefaultExpressionBuilderConfig(this)
117
        );
118
        return x;
119 43969 jjdelcerro
    }
120 43983 jjdelcerro
121 43969 jjdelcerro
    @Override
122 43983 jjdelcerro
    public Element createElement(String name, Object... parameters) {
123
        ElementFactory factory = this.elementsFactories.get(name.toLowerCase());
124
        if( factory==null ) {
125
            throw new RuntimeException("Can't locate element factory '"+name+"'.");
126
        }
127
        return factory.createElement(parameters);
128 43970 jjdelcerro
    }
129
130
    @Override
131 43983 jjdelcerro
    public GroupElement createGroupElement(String name) {
132
        GroupElement e = new DefaultGroupElement(name);
133
        return e;
134 43969 jjdelcerro
    }
135 43983 jjdelcerro
136 43969 jjdelcerro
    @Override
137 43983 jjdelcerro
    public GroupElement createGroupElement(String name, List<Element> elements) {
138
        GroupElement e = new DefaultGroupElement(this, name, elements);
139
        return e;
140
    }
141
142
    @Override
143
    public FunctionElement createFunctionElement(Function function) {
144
        FunctionElement e = new DefaultFunctionElement(function);
145
        return e;
146
    }
147
148
    @Override
149
    public ConstantElement createConstantElement(Object value) {
150
        ConstantElement e = new DefaultConstantValueElement(value, null);
151
        return e;
152
    }
153
154
    @Override
155
    public ConstantElement createConstantElement(Object value, String description) {
156
        ConstantElement e = new DefaultConstantValueElement(value, description);
157
        return e;
158
    }
159
160
    @Override
161
    public VariableElement createVariableElement(String label, String source, String name, String typeName, String description) {
162
        VariableElement e = new DefaultVariableElement(label, source, name, typeName, description);
163
        return e;
164
    }
165
166
    @Override
167
    public ExpressionPickerController createExpressionPickerController(JTextComponent text, JButton button) {
168
        ExpressionPickerController c = new DefaultExpressionPickerController(this, text, button);
169
        return c;
170
    }
171
172
    @Override
173
    public JExpressionPicker createJExpressionPicker() {
174
        JExpressionPicker x = new DefaultJExpressionPicker(this);
175 43939 jjdelcerro
        return x;
176
    }
177
178 44076 jjdelcerro
    @Override
179
    public CalculatorController createCalculatorController(JTextComponent text, int dataType) {
180 44080 jjdelcerro
        DefaultCalculatorController controller = new DefaultCalculatorController(this,text,dataType);
181 44076 jjdelcerro
        return controller;
182
    }
183
184 43939 jjdelcerro
}