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 @ 44259

History | View | Annotate | Download (7.97 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.ElementFactory;
23 44191 jjdelcerro
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
24 43983 jjdelcerro
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
25 44126 jjdelcerro
import org.gvsig.expressionevaluator.swing.FunctionAdditionalPanelFactory;
26 43983 jjdelcerro
import org.gvsig.expressionevaluator.swing.JExpressionPicker;
27
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultConstantValueElement;
28
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultFunctionElement;
29
import org.gvsig.expressionevaluator.swing.impl.elements.DefaultGroupElement;
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 44191 jjdelcerro
    private final Map<String, ElementFactory> elementsFactories;
37
    private final Map<String, FunctionAdditionalPanelFactory> functionAdditionalPanelFactories;
38 43939 jjdelcerro
39
    public DefaultExpressionEvaluatorSwingManager() {
40 43983 jjdelcerro
        this.elementsFactories = new HashMap<>();
41 44126 jjdelcerro
        this.functionAdditionalPanelFactories = new HashMap<>();
42 43939 jjdelcerro
    }
43 43983 jjdelcerro
44
    @Override
45 44259 jjdelcerro
    public List<Element> createElements(Collection<SymbolTable> symbolTables) {
46 44012 jjdelcerro
        I18nManager i18n = ToolsLocator.getI18nManager();
47 43939 jjdelcerro
        Map<String, Function> functions = new HashMap<>();
48
49 43983 jjdelcerro
        for (SymbolTable symbolTable : symbolTables) {
50
            for (Function function : symbolTable.functions()) {
51
                functions.put(function.name().toUpperCase(), function);
52
            }
53
        }
54
55
        Map<String, GroupElement> functionGroups = new HashMap<>();
56
        Map<String, GroupElement> operatorGroups = new HashMap<>();
57 43939 jjdelcerro
        for (Function function : functions.values()) {
58 43983 jjdelcerro
            if (function.isOperator()) {
59 43939 jjdelcerro
                String groupName = function.group();
60
                GroupElement group = operatorGroups.get(groupName);
61 43983 jjdelcerro
                if (group == null) {
62 44259 jjdelcerro
                    group = new DefaultGroupElement(groupName);
63 43939 jjdelcerro
                    operatorGroups.put(groupName, group);
64
                }
65 44259 jjdelcerro
                group.addElement(new DefaultFunctionElement(function));
66 43939 jjdelcerro
            } else {
67
                String groupName = function.group();
68
                GroupElement group = functionGroups.get(groupName);
69 43983 jjdelcerro
                if (group == null) {
70 44259 jjdelcerro
                    group = new DefaultGroupElement(groupName);
71 43939 jjdelcerro
                    functionGroups.put(groupName, group);
72
                }
73 44259 jjdelcerro
                group.addElement(new DefaultFunctionElement(function));
74 43939 jjdelcerro
            }
75
        }
76 44259 jjdelcerro
        GroupElement builtinFunctions = this.createGroupElement(i18n.getTranslation("_Functions"));
77 43939 jjdelcerro
        for (GroupElement group : functionGroups.values()) {
78
            builtinFunctions.addElement(group);
79
        }
80 44259 jjdelcerro
        GroupElement operatorFunctions = this.createGroupElement(i18n.getTranslation("_Operators"));
81 43939 jjdelcerro
        for (GroupElement group : operatorGroups.values()) {
82
            operatorFunctions.addElement(group);
83
        }
84 43983 jjdelcerro
        List<Element> elements = new ArrayList<>();
85
        elements.add(operatorFunctions);
86
        elements.add(builtinFunctions);
87
        return elements;
88 43939 jjdelcerro
    }
89 43983 jjdelcerro
90 43939 jjdelcerro
    @Override
91 43983 jjdelcerro
    public void registerElement(ElementFactory factory) {
92
        this.elementsFactories.put(factory.getName().toLowerCase(), factory);
93 43939 jjdelcerro
    }
94 43983 jjdelcerro
95 43939 jjdelcerro
    @Override
96 44034 jjdelcerro
    public Collection<ElementFactory> getElementFactories() {
97
        List<ElementFactory> factories = new ArrayList<>();
98
        factories.addAll(this.elementsFactories.values());
99
        Collections.sort(factories, new Comparator<ElementFactory>() {
100
            @Override
101
            public int compare(ElementFactory o1, ElementFactory o2) {
102
                return StringUtils.compare(o1.getName(), o2.getName());
103
            }
104
        });
105
        return factories;
106
    }
107
108
    @Override
109 43983 jjdelcerro
    public JExpressionBuilder createJExpressionBuilder() {
110
        DefaultJExpressionBuilder x = new DefaultJExpressionBuilder(
111
                this,
112
                new DefaultExpressionBuilderConfig(this)
113
        );
114
        return x;
115 43969 jjdelcerro
    }
116 43983 jjdelcerro
117 43969 jjdelcerro
    @Override
118 43983 jjdelcerro
    public Element createElement(String name, Object... parameters) {
119
        ElementFactory factory = this.elementsFactories.get(name.toLowerCase());
120
        if( factory==null ) {
121
            throw new RuntimeException("Can't locate element factory '"+name+"'.");
122
        }
123
        return factory.createElement(parameters);
124 43970 jjdelcerro
    }
125
126
    @Override
127 44259 jjdelcerro
    public GroupElement createGroupElement(String name) {
128
        GroupElement e = new DefaultGroupElement(name);
129 43983 jjdelcerro
        return e;
130 43969 jjdelcerro
    }
131 43983 jjdelcerro
132 43969 jjdelcerro
    @Override
133 44259 jjdelcerro
    public GroupElement createGroupElement(String name, List<Element> elements) {
134
        GroupElement e = new DefaultGroupElement(this, name, elements);
135 43983 jjdelcerro
        return e;
136
    }
137
138
    @Override
139 44259 jjdelcerro
    public FunctionElement createFunctionElement(Function function) {
140
        FunctionElement e = new DefaultFunctionElement(function);
141 43983 jjdelcerro
        return e;
142
    }
143
144
    @Override
145 44259 jjdelcerro
    public ConstantElement createConstantElement(Object value, String label) {
146
        ConstantElement e = new DefaultConstantValueElement(
147
                value,
148
                label,
149
                null
150
        );
151 43983 jjdelcerro
        return e;
152
    }
153
154
    @Override
155 44259 jjdelcerro
    public ConstantElement createConstantElement(Object value, String label, String description) {
156
        ConstantElement e = new DefaultConstantValueElement(
157
                value,
158
                StringUtils.defaultIfEmpty(label, ""),
159
                description
160
        );
161 43983 jjdelcerro
        return e;
162
    }
163 44259 jjdelcerro
//
164
//    @Override
165
//    public VariableElement createVariableElement(ExpressionBuilderConfig config, String label, String source, String name, String typeName, String description) {
166
//        VariableElement e = new DefaultVariableElement(config, label, source, name, typeName, description);
167
//        return e;
168
//    }
169 43983 jjdelcerro
170
    @Override
171
    public ExpressionPickerController createExpressionPickerController(JTextComponent text, JButton button) {
172
        ExpressionPickerController c = new DefaultExpressionPickerController(this, text, button);
173
        return c;
174
    }
175
176
    @Override
177
    public JExpressionPicker createJExpressionPicker() {
178
        JExpressionPicker x = new DefaultJExpressionPicker(this);
179 43939 jjdelcerro
        return x;
180
    }
181
182 44076 jjdelcerro
    @Override
183
    public CalculatorController createCalculatorController(JTextComponent text, int dataType) {
184 44080 jjdelcerro
        DefaultCalculatorController controller = new DefaultCalculatorController(this,text,dataType);
185 44076 jjdelcerro
        return controller;
186
    }
187
188 44126 jjdelcerro
    @Override
189
    public void registerAdditionalPanel(FunctionAdditionalPanelFactory factory) {
190
        if( factory == null ) {
191
            throw new IllegalArgumentException("factory can't be null");
192
        }
193
        this.functionAdditionalPanelFactories.put(factory.getName().toUpperCase(),factory);
194
    }
195
196
    @Override
197
    public Collection<FunctionAdditionalPanelFactory> getFunctionAdditionalPanelFactories() {
198
        return this.functionAdditionalPanelFactories.values();
199
    }
200
201
    @Override
202
    public FunctionAdditionalPanelFactory getFunctionAdditionalPanelFactory(String functionName) {
203
        FunctionAdditionalPanelFactory factory = this.functionAdditionalPanelFactories.get(functionName.toUpperCase());
204
        return factory;
205
    }
206
207 43939 jjdelcerro
}