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 / DefaultExpressionPickerController.java @ 44267

History | View | Annotate | Download (9.36 KB)

1 43983 jjdelcerro
package org.gvsig.expressionevaluator.swing.impl;
2
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.net.URL;
6
import java.util.Collection;
7
import java.util.List;
8 44267 jjdelcerro
import java.util.Map;
9 43983 jjdelcerro
import javax.swing.ImageIcon;
10
import javax.swing.JButton;
11 44094 jjdelcerro
import javax.swing.JMenuItem;
12 44080 jjdelcerro
import javax.swing.JPopupMenu;
13 43983 jjdelcerro
import javax.swing.text.JTextComponent;
14
import org.apache.commons.lang3.StringUtils;
15
import org.gvsig.expressionevaluator.DataTypes;
16
import org.gvsig.expressionevaluator.Expression;
17
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
18 44263 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
19 44163 jjdelcerro
import org.gvsig.expressionevaluator.ExpressionUtils;
20 43983 jjdelcerro
import org.gvsig.expressionevaluator.SymbolTable;
21
import org.gvsig.expressionevaluator.swing.Element;
22 44259 jjdelcerro
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
23 43983 jjdelcerro
import org.gvsig.tools.ToolsLocator;
24
import org.gvsig.tools.dataTypes.CoercionException;
25
import org.gvsig.tools.dataTypes.DataTypesManager;
26
import org.gvsig.tools.swing.api.ToolsSwingLocator;
27
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
28
import org.gvsig.tools.swing.icontheme.IconTheme;
29
import org.gvsig.tools.swing.icontheme.IconThemeManager;
30
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
31
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
32 44080 jjdelcerro
import org.gvsig.tools.i18n.I18nManager;
33
import org.gvsig.tools.swing.api.ToolsSwingManager;
34 43983 jjdelcerro
import org.gvsig.tools.swing.api.windowmanager.Dialog;
35
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
36
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
37
38
/**
39
 *
40
 * @author jjdelcerro
41
 */
42
public class DefaultExpressionPickerController
43
        extends AbstractPickerController<Expression>
44
        implements ExpressionPickerController
45
    {
46
47
    public static void selfRegister() {
48
        URL imageResource = DefaultExpressionPickerController.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-expression.png");
49
        if (imageResource != null) {
50
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
51
            IconTheme theme = iconThemeManager.getCurrent();
52
            ImageIcon icon = new ImageIcon(imageResource);
53
            theme.registerDefault("tools", "picker", "picker-expression", icon, imageResource);
54
        }
55
    }
56
57
    private final JButton button;
58
    private final JTextComponent text;
59
    private Expression value;
60 44098 jjdelcerro
    private final ExpressionBuilderConfig config;
61 43983 jjdelcerro
    private final ExpressionEvaluatorSwingManager manager;
62 44094 jjdelcerro
    private final ActionListener buttonAction;
63
    private final JMenuItem menuItem;
64 44148 jjdelcerro
    private final AbstractAutomaticExpressionChecker automaticExpressionChecker;
65 44163 jjdelcerro
    private boolean returnNullWhenEmptyExpression;
66 44267 jjdelcerro
    private final HistoryController historyController;
67
    private final BookmarksController bookmarksController;
68 43983 jjdelcerro
69 44267 jjdelcerro
    public DefaultExpressionPickerController(ExpressionEvaluatorSwingManager manager,
70
            JTextComponent text,
71
            JButton button,
72
            JButton btnHistory,
73
            JButton btnBookmarks
74
        ) {
75 44080 jjdelcerro
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
76
        I18nManager i18n = ToolsLocator.getI18nManager();
77
78 43983 jjdelcerro
        this.manager = manager;
79
        this.config = new DefaultExpressionBuilderConfig(manager);
80
        this.text = text;
81
        this.button = button;
82 44148 jjdelcerro
        this.value = null;
83 44163 jjdelcerro
        this.returnNullWhenEmptyExpression = true;
84 43983 jjdelcerro
        this.button.setIcon(this.getIcon("picker-expression"));
85 44094 jjdelcerro
        this.buttonAction = new ActionListener() {
86 43983 jjdelcerro
            @Override
87
            public void actionPerformed(ActionEvent e) {
88
                doSelectExpression();
89
            }
90 44094 jjdelcerro
        };
91
        this.button.addActionListener(this.buttonAction);
92 43983 jjdelcerro
93 44080 jjdelcerro
        swingManager.addClearButton(this.text);
94
        swingManager.setDefaultPopupMenu(this.text);
95
        JPopupMenu popupMenu = this.text.getComponentPopupMenu();
96 44094 jjdelcerro
        this.menuItem = new JMenuItem(i18n.getTranslation("_Show_expression_builder"));
97
        this.menuItem.addActionListener(buttonAction);
98
        popupMenu.add(this.menuItem);
99 44148 jjdelcerro
100 44267 jjdelcerro
        this.historyController = new HistoryController(btnHistory) {
101
            @Override
102
            public void updateExpression(Expression expression) {
103
                set(expression);
104
            }
105
        };
106
        popupMenu.add(this.historyController.createMenu());
107
108
        this.bookmarksController = new BookmarksController(btnBookmarks) {
109
            @Override
110
            public void updateExpression(Expression expression) {
111
                set(expression);
112
            }
113
114
            @Override
115
            public Expression getExpressionWithOutHistory() {
116
                return get();
117
            }
118
        };
119
        popupMenu.add(this.bookmarksController.createMenu());
120
121 44148 jjdelcerro
        this.automaticExpressionChecker = new AbstractAutomaticExpressionChecker(config, text) {
122
            @Override
123
            protected Expression getExpression() {
124 44263 jjdelcerro
                return getWithOutHistory();
125 44148 jjdelcerro
            }
126
        };
127 43983 jjdelcerro
    }
128
129
    private void doSelectExpression() {
130 44148 jjdelcerro
        Expression theValue = this.get();
131 43983 jjdelcerro
132
        DefaultJExpressionBuilder panel = new DefaultJExpressionBuilder(this.manager, this.config);
133 44148 jjdelcerro
        panel.setExpression(theValue);
134 43983 jjdelcerro
135
        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
136
        Dialog dialog = windowManager.createDialog(
137
                panel.asJComponent(),
138
                "Expression builder",
139
                null,
140
                WindowManager_v2.BUTTONS_OK_CANCEL
141
        );
142
        dialog.show(WindowManager.MODE.DIALOG);
143
        if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
144
            this.set(panel.getExpression());
145
        }
146
    }
147
148
    @Override
149
    public Expression get() {
150 44263 jjdelcerro
        Expression expression = this.getWithOutHistory();
151
        ExpressionEvaluatorManager theManager = ExpressionEvaluatorLocator.getManager();
152
        theManager.getHistory().add(expression);
153
        return expression;
154
    }
155
156
    @Override
157
    public Expression getWithOutHistory() {
158 44152 jjdelcerro
        String s = this.text.getText();
159 44163 jjdelcerro
        if( this.returnNullWhenEmptyExpression ) {
160
            if( ExpressionUtils.isEmpty(this.value) &&  StringUtils.isBlank(s) ) {
161
                return null;
162
            }
163 44148 jjdelcerro
        }
164 44163 jjdelcerro
        if( this.value == null ) {
165
            this.value = ExpressionEvaluatorLocator.getManager().createExpression();
166 44152 jjdelcerro
        }
167 44163 jjdelcerro
        this.value.setPhrase(StringUtils.defaultIfBlank(this.text.getText(),null));
168 43983 jjdelcerro
        return this.value;
169
    }
170
171
    @Override
172
    public void set(Expression value) {
173 44079 jjdelcerro
        if( value==null ) {
174
            this.text.setText("");
175 44148 jjdelcerro
            this.value = null;
176 44163 jjdelcerro
            this.returnNullWhenEmptyExpression = true;
177 44079 jjdelcerro
        } else {
178 44080 jjdelcerro
            this.value = value;
179 44079 jjdelcerro
            this.text.setText(this.value.getPhrase());
180 44163 jjdelcerro
            this.returnNullWhenEmptyExpression = false;
181 44079 jjdelcerro
        }
182 43983 jjdelcerro
    }
183
184
    @Override
185
    public boolean isEmpty() {
186
        boolean empty = StringUtils.isBlank(this.text.getText());
187
        return empty;
188
    }
189
190
191
    @Override
192
    public void coerceAndSet(Object value) {
193
        try {
194
            DataTypesManager.Coercion toExpression = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.EXPRESSION);
195
            this.set((Expression) toExpression.coerce(value));
196
        } catch (CoercionException ex) {
197
            throw new IllegalArgumentException("Can't converto to color", ex);
198
        }
199
    }
200
201
    @Override
202
    public void setEnabled(boolean enabled) {
203
        this.text.setEnabled(enabled);
204
        this.button.setEnabled(enabled);
205
    }
206
207
    @Override
208
    public boolean isEnabled() {
209
        return this.text.isEnabled();
210
    }
211
212
    @Override
213
    public void setEditable(boolean editable) {
214
        super.setEditable(editable);
215
        this.text.setEditable(editable);
216
        this.button.setEnabled(editable);
217
    }
218
219
    @Override
220 44259 jjdelcerro
    public Preferences getPreferences() {
221
        return this.config.getPreferences();
222 43983 jjdelcerro
    }
223
224
    @Override
225
    public List<Element> getElements() {
226
        return this.config.getElements();
227
    }
228
229
    @Override
230 44034 jjdelcerro
    public void addElement(Element element) {
231
        this.config.addElement(element);
232
    }
233
234
    @Override
235 43983 jjdelcerro
    public Collection<SymbolTable> getSymbolTables() {
236
        return this.config.getSymbolTables();
237
    }
238 43987 jjdelcerro
239
    @Override
240
    public void addSymbolTable(String name) {
241
        this.config.addSymbolTable(name);
242
    }
243 43983 jjdelcerro
244
    @Override
245
    public void addSymbolTable(SymbolTable symbolTable) {
246
        this.config.addSymbolTable(symbolTable);
247
    }
248
249
    @Override
250
    public void removeAllSymbolTables() {
251
        this.config.removeAllSymbolTables();
252
    }
253
254 43984 jjdelcerro
    @Override
255
    public void removeSymbolTable(String name) {
256
        this.config.removeSymbolTable(name);
257
    }
258
259
    @Override
260 44098 jjdelcerro
    public SymbolTable getPreviewSymbolTable() {
261
        return this.config.getPreviewSymbolTable();
262
    }
263
264
    @Override
265
    public void setPreviewSymbolTable(SymbolTable symbolTable) {
266
        this.config.setPreviewSymbolTable(symbolTable);
267
    }
268 44267 jjdelcerro
269
    @Override
270
    public Object getProperty(String name) {
271
        return this.config.getProperty(name);
272
    }
273
274
    @Override
275
    public void setProperty(String name, Object value) {
276
        this.config.setProperty(name, value);
277
    }
278
279
    @Override
280
    public Map<String, Object> getProperties() {
281
        return this.config.getProperties();
282
    }
283 43983 jjdelcerro
}