Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / featuretype / TagsController.java @ 44351

History | View | Annotate | Download (9.13 KB)

1
package org.gvsig.fmap.dal.swing.impl.featuretype;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.awt.event.ItemEvent;
6
import java.awt.event.ItemListener;
7
import java.util.ArrayList;
8
import java.util.List;
9
import java.util.Objects;
10
import javax.swing.DefaultComboBoxModel;
11
import javax.swing.JButton;
12
import javax.swing.JComboBox;
13
import javax.swing.JLabel;
14
import javax.swing.JTable;
15
import javax.swing.ListSelectionModel;
16
import javax.swing.event.ListSelectionEvent;
17
import javax.swing.event.ListSelectionListener;
18
import javax.swing.table.DefaultTableModel;
19
import javax.swing.table.TableModel;
20
import javax.swing.text.JTextComponent;
21
import org.apache.commons.lang3.StringUtils;
22
import org.gvsig.tools.ToolsLocator;
23
import org.gvsig.tools.dynobject.DynField;
24
import org.gvsig.tools.dynobject.DynObjectValueItem;
25
import org.gvsig.tools.dynobject.Tags;
26
import org.gvsig.tools.i18n.I18nManager;
27
import org.gvsig.tools.swing.api.ToolsSwingLocator;
28
import org.gvsig.tools.swing.api.ToolsSwingManager;
29
import org.gvsig.tools.util.LabeledValue;
30
import org.gvsig.tools.util.UnmodifiableBasicMap;
31

    
32
/**
33
 *
34
 * @author jjdelcerro
35
 */
36
@SuppressWarnings("Convert2Lambda")
37
class TagsController {
38
    
39
    private final JTable tblTags;
40
    private final JComboBox cboName;
41
    private final JComboBox cboValue;
42
    private final JButton btnAdd;
43
    private final JButton btnUpdate;
44
    private final JButton btnRemove;
45
    private final UnmodifiableBasicMap<String, DynField> tagDefinitions;
46
    private final JLabel lblDescription;
47

    
48
    public TagsController(
49
            JTable tblTags, 
50
            JComboBox cboName, 
51
            JComboBox cboValue, 
52
            JButton btnAdd, 
53
            JButton btnUpdate, 
54
            JButton btnRemove,
55
            JLabel lblDescription
56
        ) {
57
        this.tblTags = tblTags;
58
        this.cboName = cboName;
59
        this.cboValue = cboValue;
60
        this.btnAdd = btnAdd;
61
        this.btnUpdate = btnUpdate;
62
        this.btnRemove = btnRemove;
63
        this.lblDescription = lblDescription;
64
        this.tagDefinitions = ToolsLocator.getDynObjectManager().getTags();
65
        this.initComponents();
66
    }
67
    
68
    private void initComponents() {
69
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
70
        swingManager.setDefaultPopupMenu(this.cboName);
71
        swingManager.setDefaultPopupMenu(this.cboValue);
72
        
73
        swingManager.addClearButton(this.cboValue);
74

    
75
        swingManager.translate(this.btnAdd);
76
        swingManager.translate(this.btnUpdate);
77
        swingManager.translate(this.btnRemove);
78
        
79
        this.tblTags.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
80
        this.tblTags.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
81
            @Override
82
            public void valueChanged(ListSelectionEvent e) {
83
                if (e.getValueIsAdjusting()) {
84
                    return;
85
                }
86
                doTableSelecctionChanged();
87
            }
88
        });
89
        this.btnAdd.addActionListener(new ActionListener() {
90
            @Override
91
            public void actionPerformed(ActionEvent e) {
92
                doAdd();
93
            }
94
        });
95
        this.btnUpdate.addActionListener(new ActionListener() {
96
            @Override
97
            public void actionPerformed(ActionEvent e) {
98
                doUpdate();
99
            }
100
        });
101
        this.btnRemove.addActionListener(new ActionListener() {
102
            @Override
103
            public void actionPerformed(ActionEvent e) {
104
                doRemove();
105
            }
106
        });
107
        List<String> tagsNames = new ArrayList<>();
108
        for (String tag : this.tagDefinitions.keySet()) {
109
            tagsNames.add(tag);
110
        }
111
        tagsNames.sort(null);
112
        DefaultComboBoxModel model = new DefaultComboBoxModel();
113
        model.addElement(" ");
114
        for (String tag : tagsNames) {
115
            model.addElement(tag);
116
        }
117
        this.cboName.setModel(model);
118
        this.cboName.addItemListener(new ItemListener() {
119
            @Override
120
            public void itemStateChanged(ItemEvent e) {
121
                if( e.getStateChange()==ItemEvent.SELECTED ) {
122
                    doChangeTagName();
123
                }
124
            }
125
        });
126
    }
127

    
128
    public void clean() {
129
        this.tblTags.setModel(new DefaultTableModel());
130
        this.cboName.setSelectedIndex(-1);
131
        this.cboValue.setSelectedItem("");
132
        this.tblTags.getSelectionModel().clearSelection();
133
        this.lblDescription.setText("");
134
    }
135

    
136
    public Tags fetch(Tags tags) {
137
        TableModel model = this.tblTags.getModel();
138
        tags.removeAll();
139
        for (int row = 0; row < model.getRowCount(); row++) {
140
            String name = (String) model.getValueAt(row, 0);
141
            String value = (String) model.getValueAt(row, 1);
142
            if( StringUtils.isNotBlank(name) && StringUtils.isNotBlank(value) ) {
143
                tags.set(name,value);
144
            }
145
        }
146
        return tags;
147
    }
148

    
149
    public void set(Tags tags) {
150
        this.lblDescription.setText("");
151
        DefaultTableModel model = new DefaultTableModel();
152
        model.addColumn("_Name");
153
        model.addColumn("_Value");
154
        for (String tagName : tags) {
155
            model.addRow(new String[]{tagName, Objects.toString(tags.get(tagName), "")});
156
        }
157
        this.tblTags.setModel(model);
158
        if (model.getRowCount() > 0) {
159
            this.tblTags.getSelectionModel().setSelectionInterval(0, 0);
160
        } else {
161
            this.tblTags.getSelectionModel().clearSelection();
162
        }
163
    }
164

    
165
    public void setEditable(boolean editable) {
166
        this.tblTags.setEnabled(editable);
167
        this.cboName.setEnabled(editable);
168
        this.cboValue.setEditable(editable);
169
        this.btnAdd.setEnabled(editable);
170
        this.btnUpdate.setEnabled(editable);
171
        this.btnRemove.setEnabled(editable);
172
    }
173

    
174
    private void doTableSelecctionChanged() {
175
        int row = this.tblTags.getSelectedRow();
176
        if (row < 0) {
177
            this.cboName.setSelectedIndex(-1);
178
            this.cboValue.setSelectedItem("");
179
            this.btnAdd.setEnabled(true);
180
            this.btnUpdate.setEnabled(false);
181
            this.btnRemove.setEnabled(false);
182
            return;
183
        }
184
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
185
        this.cboName.setSelectedItem(model.getValueAt(row, 0));
186
        this.cboValue.setSelectedItem((String) model.getValueAt(row, 1));
187
        this.btnAdd.setEnabled(true);
188
        this.btnUpdate.setEnabled(true);
189
        this.btnRemove.setEnabled(true);
190
        doChangeTagName();
191
    }
192

    
193
    private void doAdd() {
194
        I18nManager i18n = ToolsLocator.getI18nManager();        
195
        this.lblDescription.setText("");
196
        String[] value = new String[] { 
197
            i18n.getTranslation("_Name"), 
198
            i18n.getTranslation("_Value")
199
        };
200
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
201
        model.addRow(value);
202
        this.tblTags.getSelectionModel().setSelectionInterval(0, model.getRowCount() - 1);
203
    }
204

    
205
    private void doUpdate() {
206
        this.lblDescription.setText("");
207
        int row = this.tblTags.getSelectedRow();
208
        if (row < 0) {
209
            return; // EEhh?? esto no deberia pasar
210
        }
211
        String name = StringUtils.defaultIfBlank((String) this.cboName.getSelectedItem(), "");
212
        Object value = this.cboValue.getSelectedItem();
213
        if( value instanceof LabeledValue ) {
214
            value = ((LabeledValue)value).getValue();
215
        }
216
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
217
        model.setValueAt(name, row, 0);
218
        model.setValueAt(Objects.toString(value,""), row, 1);
219
    }
220

    
221
    private void doRemove() {
222
        this.lblDescription.setText("");
223
        int n = this.tblTags.getSelectedRow();
224
        if (n < 0) {
225
            return; // EEhh?? esto no deberia pasar
226
        }
227
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
228
        model.removeRow(n);
229
        if (model.getRowCount() < 0) {
230
            this.tblTags.getSelectionModel().clearSelection();
231
        } else {
232
            if (--n < 0) {
233
                n = 0;
234
            }
235
            this.tblTags.getSelectionModel().setSelectionInterval(n, n);
236
        }
237
    }
238

    
239
    private void doChangeTagName() {
240
        String tagname = (String) this.cboName.getSelectedItem();
241
        if( StringUtils.isBlank(tagname) ) {
242
            this.lblDescription.setText("");
243
            return;
244
        }
245
        for (DynField tagDefinition : tagDefinitions) {
246
            if( tagname.equalsIgnoreCase(tagDefinition.getName()) ) {
247
                this.lblDescription.setText("<html>"+tagDefinition.getDescription()+"<html>");
248
                DefaultComboBoxModel model = new DefaultComboBoxModel();
249
                LabeledValue[] values = tagDefinition.getAvailableValues();
250
                if( values != null ) {
251
                    for (LabeledValue value : values) {
252
                        model.addElement(value);
253
                    }
254
                }
255
                this.cboValue.setModel(model);
256
                return;
257
            }
258
        }
259
        this.lblDescription.setText("");
260
    }
261
}