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

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