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

History | View | Annotate | Download (6.17 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.text.JTextComponent;
11
import org.apache.commons.lang3.StringUtils;
12
import org.gvsig.expressionevaluator.DataTypes;
13
import org.gvsig.expressionevaluator.Expression;
14
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
15
import org.gvsig.expressionevaluator.SymbolTable;
16
import org.gvsig.expressionevaluator.swing.Element;
17
import org.gvsig.tools.ToolsLocator;
18
import org.gvsig.tools.dataTypes.CoercionException;
19
import org.gvsig.tools.dataTypes.DataTypesManager;
20
import org.gvsig.tools.swing.api.ToolsSwingLocator;
21
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
22
import org.gvsig.tools.swing.icontheme.IconTheme;
23
import org.gvsig.tools.swing.icontheme.IconThemeManager;
24
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig;
25
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
26
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
27
import org.gvsig.tools.swing.api.windowmanager.Dialog;
28
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
29
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
30

    
31
/**
32
 *
33
 * @author jjdelcerro
34
 */
35
public class DefaultExpressionPickerController 
36
        extends AbstractPickerController<Expression>
37
        implements ExpressionPickerController 
38
    {
39

    
40
    public static void selfRegister() {
41
        URL imageResource = DefaultExpressionPickerController.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-expression.png");
42
        if (imageResource != null) {
43
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
44
            IconTheme theme = iconThemeManager.getCurrent();
45
            ImageIcon icon = new ImageIcon(imageResource);
46
            theme.registerDefault("tools", "picker", "picker-expression", icon, imageResource);
47
        }
48
    }
49
    
50
    private final JButton button;
51
    private final JTextComponent text;
52
    private Expression value;
53
    private ExpressionBuilderConfig config;
54
    private final ExpressionEvaluatorSwingManager manager;
55
    
56
    public DefaultExpressionPickerController(ExpressionEvaluatorSwingManager manager, JTextComponent text, JButton button) {
57
        this.manager = manager;
58
        this.config = new DefaultExpressionBuilderConfig(manager);
59
        this.text = text;
60
        this.button = button;
61
        this.value = ExpressionEvaluatorLocator.getManager().createExpression();
62
        this.button.setIcon(this.getIcon("picker-expression"));
63
        this.button.addActionListener(new ActionListener() {
64
            @Override
65
            public void actionPerformed(ActionEvent e) {
66
                doSelectExpression();
67
            }
68
        });
69

    
70
    }
71
    
72
    private void doSelectExpression() {
73
        this.value.setPhrase(this.text.getText());
74

    
75
        DefaultJExpressionBuilder panel = new DefaultJExpressionBuilder(this.manager, this.config);
76
        panel.setExpression(this.value);
77
        
78
        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
79
        Dialog dialog = windowManager.createDialog(
80
                panel.asJComponent(),
81
                "Expression builder",
82
                null, 
83
                WindowManager_v2.BUTTONS_OK_CANCEL
84
        );
85
        dialog.show(WindowManager.MODE.DIALOG);
86
        if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
87
            this.set(panel.getExpression());
88
        }
89
    }
90
    
91
    @Override
92
    public Expression get() {
93
        this.value.setPhrase(this.text.getText());
94
        return this.value;
95
    }
96

    
97
    @Override
98
    public void set(Expression value) {
99
        this.value = value; 
100
        if( value==null ) {
101
            this.text.setText("");
102
        } else {
103
            this.text.setText(this.value.getPhrase());
104
        }
105
    }
106

    
107
    @Override
108
    public boolean isEmpty() {
109
        boolean empty = StringUtils.isBlank(this.text.getText());
110
        return empty;
111
    }
112

    
113
    
114
    @Override
115
    public void coerceAndSet(Object value) {
116
        try {
117
            DataTypesManager.Coercion toExpression = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.EXPRESSION);
118
            this.set((Expression) toExpression.coerce(value));
119
        } catch (CoercionException ex) {
120
            throw new IllegalArgumentException("Can't converto to color", ex);
121
        }
122
    }
123

    
124
    @Override
125
    public void setEnabled(boolean enabled) {
126
        this.text.setEnabled(enabled);
127
        this.button.setEnabled(enabled);
128
    }
129

    
130
    @Override
131
    public boolean isEnabled() {
132
        return this.text.isEnabled();
133
    }
134

    
135
    @Override
136
    public void setEditable(boolean editable) {
137
        super.setEditable(editable);
138
        this.text.setEditable(editable);
139
        this.button.setEnabled(editable);
140
    }
141

    
142
    @Override
143
    public int getSimpleElementsLimit() {
144
        return this.config.getSimpleElementsLimit();
145
    }
146

    
147
    @Override
148
    public void setSimpleElementsLimit(int limit) {
149
        this.config.setSimpleElementsLimit(limit);
150
    }
151
    
152
    @Override
153
    public List<Element> getElements() {
154
        return this.config.getElements();
155
    }
156

    
157
    @Override
158
    public void addElement(Element element) {
159
        this.config.addElement(element);
160
    }
161
    
162
    @Override
163
    public Collection<SymbolTable> getSymbolTables() {
164
        return this.config.getSymbolTables();
165
    }
166

    
167
    @Override
168
    public void addSymbolTable(String name) {
169
        this.config.addSymbolTable(name);
170
    }
171
    
172
    @Override
173
    public void addSymbolTable(SymbolTable symbolTable) {
174
        this.config.addSymbolTable(symbolTable);
175
    }
176

    
177
    @Override
178
    public void removeAllSymbolTables() {
179
        this.config.removeAllSymbolTables();
180
    }
181

    
182
    @Override
183
    public void removeSymbolTable(String name) {
184
        this.config.removeSymbolTable(name);
185
    }
186

    
187
    @Override
188
    public void setScriptsEnabled(boolean enabled) {
189
        this.config.setScriptsEnabled(enabled);
190
    }
191

    
192
    @Override
193
    public boolean getScriptsEnabled() {
194
        return this.config.getScriptsEnabled();
195
    }
196

    
197
    
198
}