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

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