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

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