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

History | View | Annotate | Download (7.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 javax.swing.ImageIcon;
9
import javax.swing.JButton;
10
import javax.swing.JMenuItem;
11
import javax.swing.JPopupMenu;
12
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
import org.gvsig.expressionevaluator.SymbolTable;
18
import org.gvsig.expressionevaluator.swing.Element;
19
import org.gvsig.tools.ToolsLocator;
20
import org.gvsig.tools.dataTypes.CoercionException;
21
import org.gvsig.tools.dataTypes.DataTypesManager;
22
import org.gvsig.tools.swing.api.ToolsSwingLocator;
23
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
24
import org.gvsig.tools.swing.icontheme.IconTheme;
25
import org.gvsig.tools.swing.icontheme.IconThemeManager;
26
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
27
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
28
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
29
import org.gvsig.tools.i18n.I18nManager;
30
import org.gvsig.tools.swing.api.ToolsSwingManager;
31
import org.gvsig.tools.swing.api.windowmanager.Dialog;
32
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
33
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
34

    
35
/**
36
 *
37
 * @author jjdelcerro
38
 */
39
public class DefaultExpressionPickerController 
40
        extends AbstractPickerController<Expression>
41
        implements ExpressionPickerController 
42
    {
43

    
44
    public static void selfRegister() {
45
        URL imageResource = DefaultExpressionPickerController.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-expression.png");
46
        if (imageResource != null) {
47
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
48
            IconTheme theme = iconThemeManager.getCurrent();
49
            ImageIcon icon = new ImageIcon(imageResource);
50
            theme.registerDefault("tools", "picker", "picker-expression", icon, imageResource);
51
        }
52
    }
53
    
54
    private final JButton button;
55
    private final JTextComponent text;
56
    private Expression value;
57
    private final ExpressionBuilderConfig config;
58
    private final ExpressionEvaluatorSwingManager manager;
59
    private final ActionListener buttonAction;
60
    private final JMenuItem menuItem;
61
    private final AbstractAutomaticExpressionChecker automaticExpressionChecker;
62
    
63
    public DefaultExpressionPickerController(ExpressionEvaluatorSwingManager manager, JTextComponent text, JButton button) {
64
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
65
        I18nManager i18n = ToolsLocator.getI18nManager();
66

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

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

    
99
        DefaultJExpressionBuilder panel = new DefaultJExpressionBuilder(this.manager, this.config);
100
        panel.setExpression(theValue);
101
        
102
        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
103
        Dialog dialog = windowManager.createDialog(
104
                panel.asJComponent(),
105
                "Expression builder",
106
                null, 
107
                WindowManager_v2.BUTTONS_OK_CANCEL
108
        );
109
        dialog.show(WindowManager.MODE.DIALOG);
110
        if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
111
            this.set(panel.getExpression());
112
        }
113
    }
114
    
115
    @Override
116
    public Expression get() {
117
        String s = this.text.getText();
118
        if( StringUtils.isBlank(s) ) {
119
            return null;
120
        }
121
        if( value == null ) {
122
            value = ExpressionEvaluatorLocator.getManager().createExpression();
123
        }
124
        this.value.setPhrase(this.text.getText());
125
        return this.value;
126
    }
127

    
128
    @Override
129
    public void set(Expression value) {
130
        if( value==null ) {
131
            this.text.setText("");
132
            this.value = null;
133
        } else {
134
            this.value = value;
135
            this.text.setText(this.value.getPhrase());
136
        }
137
    }
138

    
139
    @Override
140
    public boolean isEmpty() {
141
        boolean empty = StringUtils.isBlank(this.text.getText());
142
        return empty;
143
    }
144

    
145
    
146
    @Override
147
    public void coerceAndSet(Object value) {
148
        try {
149
            DataTypesManager.Coercion toExpression = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.EXPRESSION);
150
            this.set((Expression) toExpression.coerce(value));
151
        } catch (CoercionException ex) {
152
            throw new IllegalArgumentException("Can't converto to color", ex);
153
        }
154
    }
155

    
156
    @Override
157
    public void setEnabled(boolean enabled) {
158
        this.text.setEnabled(enabled);
159
        this.button.setEnabled(enabled);
160
    }
161

    
162
    @Override
163
    public boolean isEnabled() {
164
        return this.text.isEnabled();
165
    }
166

    
167
    @Override
168
    public void setEditable(boolean editable) {
169
        super.setEditable(editable);
170
        this.text.setEditable(editable);
171
        this.button.setEnabled(editable);
172
    }
173

    
174
    @Override
175
    public int getSimpleElementsLimit() {
176
        return this.config.getSimpleElementsLimit();
177
    }
178

    
179
    @Override
180
    public void setSimpleElementsLimit(int limit) {
181
        this.config.setSimpleElementsLimit(limit);
182
    }
183
    
184
    @Override
185
    public List<Element> getElements() {
186
        return this.config.getElements();
187
    }
188

    
189
    @Override
190
    public void addElement(Element element) {
191
        this.config.addElement(element);
192
    }
193
    
194
    @Override
195
    public Collection<SymbolTable> getSymbolTables() {
196
        return this.config.getSymbolTables();
197
    }
198

    
199
    @Override
200
    public void addSymbolTable(String name) {
201
        this.config.addSymbolTable(name);
202
    }
203
    
204
    @Override
205
    public void addSymbolTable(SymbolTable symbolTable) {
206
        this.config.addSymbolTable(symbolTable);
207
    }
208

    
209
    @Override
210
    public void removeAllSymbolTables() {
211
        this.config.removeAllSymbolTables();
212
    }
213

    
214
    @Override
215
    public void removeSymbolTable(String name) {
216
        this.config.removeSymbolTable(name);
217
    }
218

    
219
    @Override
220
    public void setScriptsEnabled(boolean enabled) {
221
        this.config.setScriptsEnabled(enabled);
222
    }
223

    
224
    @Override
225
    public boolean getScriptsEnabled() {
226
        return this.config.getScriptsEnabled();
227
    }
228

    
229
    @Override
230
    public SymbolTable getPreviewSymbolTable() {
231
        return this.config.getPreviewSymbolTable();
232
    }
233

    
234
    @Override
235
    public void setPreviewSymbolTable(SymbolTable symbolTable) {
236
        this.config.setPreviewSymbolTable(symbolTable);
237
    }
238

    
239
    
240
}