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

History | View | Annotate | Download (8.42 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.Tags;
24
import org.gvsig.tools.i18n.I18nManager;
25
import org.gvsig.tools.swing.api.ToolsSwingLocator;
26
import org.gvsig.tools.swing.api.ToolsSwingManager;
27
import org.gvsig.tools.util.UnmodifiableBasicMap;
28

    
29
/**
30
 *
31
 * @author jjdelcerro
32
 */
33
class TagsController {
34
    
35
    private final JTable tblTags;
36
    private final JComboBox cboName;
37
    private final JTextComponent txtValue;
38
    private final JButton btnAdd;
39
    private final JButton btnUpdate;
40
    private final JButton btnRemove;
41
    private final UnmodifiableBasicMap<String, String> tagDescriptions;
42
    private final JLabel lblDescription;
43

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

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

    
124
    public void clean() {
125
        this.tblTags.setModel(new DefaultTableModel());
126
        this.cboName.setSelectedIndex(-1);
127
        this.txtValue.setText("");
128
        this.tblTags.getSelectionModel().clearSelection();
129
        this.lblDescription.setText("");
130
    }
131

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

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

    
161
    public void setEditable(boolean editable) {
162
        this.tblTags.setEnabled(editable);
163
        this.cboName.setEnabled(editable);
164
        this.txtValue.setEditable(editable);
165
        this.btnAdd.setEnabled(editable);
166
        this.btnUpdate.setEnabled(editable);
167
        this.btnRemove.setEnabled(editable);
168
    }
169

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

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

    
201
    private void doUpdate() {
202
        this.lblDescription.setText("");
203
        int row = this.tblTags.getSelectedRow();
204
        if (row < 0) {
205
            return; // EEhh?? esto no deberia pasar
206
        }
207
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
208
        model.setValueAt(StringUtils.defaultIfBlank((String) this.cboName.getSelectedItem(), ""), row, 0);
209
        model.setValueAt(this.txtValue.getText(), row, 1);
210
    }
211

    
212
    private void doRemove() {
213
        this.lblDescription.setText("");
214
        int n = this.tblTags.getSelectedRow();
215
        if (n < 0) {
216
            return; // EEhh?? esto no deberia pasar
217
        }
218
        DefaultTableModel model = (DefaultTableModel) this.tblTags.getModel();
219
        model.removeRow(n);
220
        if (model.getRowCount() < 0) {
221
            this.tblTags.getSelectionModel().clearSelection();
222
        } else {
223
            if (--n < 0) {
224
                n = 0;
225
            }
226
            this.tblTags.getSelectionModel().setSelectionInterval(n, n);
227
        }
228
    }
229

    
230
    private void doChangeTagName() {
231
        String tagname = (String) this.cboName.getSelectedItem();
232
        if( StringUtils.isBlank(tagname) ) {
233
            this.lblDescription.setText("");
234
            return;
235
        }
236
        for (String tagname2 : tagDescriptions) {
237
            if( tagname.equalsIgnoreCase(tagname2) ) {
238
                String description = this.tagDescriptions.get(tagname2);
239
                this.lblDescription.setText("<html>"+description+"<html>");
240
                return;
241
            }
242
        }
243
        this.lblDescription.setText("");
244
    }
245
}