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