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

History | View | Annotate | Download (8.7 KB)

1
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 java.util.Map;
9
import javax.swing.ImageIcon;
10
import javax.swing.JButton;
11
import javax.swing.JMenuItem;
12
import javax.swing.JPopupMenu;
13
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
import org.gvsig.expressionevaluator.ExpressionUtils;
19
import org.gvsig.expressionevaluator.SymbolTable;
20
import org.gvsig.expressionevaluator.swing.Element;
21
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.ExpressionBuilderConfig;
29
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
30
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
31
import org.gvsig.tools.i18n.I18nManager;
32
import org.gvsig.tools.swing.api.ToolsSwingManager;
33
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
    private final ExpressionBuilderConfig config;
60
    private final ExpressionEvaluatorSwingManager manager;
61
    private final ActionListener buttonAction;
62
    private final JMenuItem menuItem;
63
    private final AbstractAutomaticExpressionChecker automaticExpressionChecker;
64
    private boolean returnNullWhenEmptyExpression;
65
    
66
    public DefaultExpressionPickerController(ExpressionEvaluatorSwingManager manager, JTextComponent text, JButton button) {
67
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
68
        I18nManager i18n = ToolsLocator.getI18nManager();
69

    
70
        this.manager = manager;
71
        this.config = new DefaultExpressionBuilderConfig(manager);
72
        this.text = text;
73
        this.button = button;
74
        this.value = null;
75
        this.returnNullWhenEmptyExpression = true;
76
        this.button.setIcon(this.getIcon("picker-expression"));
77
        this.buttonAction = new ActionListener() {
78
            @Override
79
            public void actionPerformed(ActionEvent e) {
80
                doSelectExpression();
81
            }
82
        };
83
        this.button.addActionListener(this.buttonAction);
84

    
85
        swingManager.addClearButton(this.text);
86
        swingManager.setDefaultPopupMenu(this.text);
87
        JPopupMenu popupMenu = this.text.getComponentPopupMenu();
88
        this.menuItem = new JMenuItem(i18n.getTranslation("_Show_expression_builder"));
89
        this.menuItem.addActionListener(buttonAction);
90
        popupMenu.add(this.menuItem);
91
        
92
        this.automaticExpressionChecker = new AbstractAutomaticExpressionChecker(config, text) {
93
            @Override
94
            protected Expression getExpression() {
95
                return get();
96
            }
97
        };
98
    }
99
    
100
    private void doSelectExpression() {
101
        Expression theValue = this.get();
102

    
103
        DefaultJExpressionBuilder panel = new DefaultJExpressionBuilder(this.manager, this.config);
104
        panel.setExpression(theValue);
105
        
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
        String s = this.text.getText();
122
        if( this.returnNullWhenEmptyExpression ) {
123
            if( ExpressionUtils.isEmpty(this.value) &&  StringUtils.isBlank(s) ) {
124
                return null;
125
            }
126
        }
127
        if( this.value == null ) {
128
            this.value = ExpressionEvaluatorLocator.getManager().createExpression();
129
        }
130
        this.value.setPhrase(StringUtils.defaultIfBlank(this.text.getText(),null));
131
        return this.value;
132
    }
133

    
134
    @Override
135
    public void set(Expression value) {
136
        if( value==null ) {
137
            this.text.setText("");
138
            this.value = null;
139
            this.returnNullWhenEmptyExpression = true;
140
        } else {
141
            this.value = value;
142
            this.text.setText(this.value.getPhrase());
143
            this.returnNullWhenEmptyExpression = false;
144
        }
145
    }
146

    
147
    @Override
148
    public boolean isEmpty() {
149
        boolean empty = StringUtils.isBlank(this.text.getText());
150
        return empty;
151
    }
152

    
153
    
154
    @Override
155
    public void coerceAndSet(Object value) {
156
        try {
157
            DataTypesManager.Coercion toExpression = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.EXPRESSION);
158
            this.set((Expression) toExpression.coerce(value));
159
        } catch (CoercionException ex) {
160
            throw new IllegalArgumentException("Can't converto to color", ex);
161
        }
162
    }
163

    
164
    @Override
165
    public void setEnabled(boolean enabled) {
166
        this.text.setEnabled(enabled);
167
        this.button.setEnabled(enabled);
168
    }
169

    
170
    @Override
171
    public boolean isEnabled() {
172
        return this.text.isEnabled();
173
    }
174

    
175
    @Override
176
    public void setEditable(boolean editable) {
177
        super.setEditable(editable);
178
        this.text.setEditable(editable);
179
        this.button.setEnabled(editable);
180
    }
181

    
182
    @Override
183
    public int getSimpleElementsLimit() {
184
        return this.config.getSimpleElementsLimit();
185
    }
186

    
187
    @Override
188
    public void setSimpleElementsLimit(int limit) {
189
        this.config.setSimpleElementsLimit(limit);
190
    }
191
    
192
    @Override
193
    public List<Element> getElements() {
194
        return this.config.getElements();
195
    }
196

    
197
    @Override
198
    public void addElement(Element element) {
199
        this.config.addElement(element);
200
    }
201
    
202
    @Override
203
    public Collection<SymbolTable> getSymbolTables() {
204
        return this.config.getSymbolTables();
205
    }
206

    
207
    @Override
208
    public void addSymbolTable(String name) {
209
        this.config.addSymbolTable(name);
210
    }
211
    
212
    @Override
213
    public void addSymbolTable(SymbolTable symbolTable) {
214
        this.config.addSymbolTable(symbolTable);
215
    }
216

    
217
    @Override
218
    public void removeAllSymbolTables() {
219
        this.config.removeAllSymbolTables();
220
    }
221

    
222
    @Override
223
    public void removeSymbolTable(String name) {
224
        this.config.removeSymbolTable(name);
225
    }
226

    
227
    @Override
228
    public void setScriptsEnabled(boolean enabled) {
229
        this.config.setScriptsEnabled(enabled);
230
    }
231

    
232
    @Override
233
    public boolean getScriptsEnabled() {
234
        return this.config.getScriptsEnabled();
235
    }
236

    
237
    @Override
238
    public SymbolTable getPreviewSymbolTable() {
239
        return this.config.getPreviewSymbolTable();
240
    }
241

    
242
    @Override
243
    public void setPreviewSymbolTable(SymbolTable symbolTable) {
244
        this.config.setPreviewSymbolTable(symbolTable);
245
    }
246

    
247
    @Override
248
    public void setSQLCompatible(boolean sqlCompatible) {
249
        this.config.setSQLCompatible(sqlCompatible);
250
    }
251

    
252
    @Override
253
    public boolean isSQLCompatible() {
254
        return this.config.isSQLCompatible();
255
    }
256

    
257
    @Override
258
    public Object getProperty(String string) {
259
        return this.config.getProperty(string);
260
    }
261

    
262
    @Override
263
    public void setProperty(String string, Object o) {
264
        this.config.setProperty(string, o);
265
    }
266

    
267
    @Override
268
    public Map<String, Object> getProperties() {
269
        return this.config.getProperties();
270
    }
271
}