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 |
} |