1 package fr.ifremer.tutti.ui.swing.util.caracteristics;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
28 import fr.ifremer.tutti.ui.swing.util.TuttiUI;
29 import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
30 import java.awt.Color;
31 import java.awt.Container;
32 import java.awt.GridBagConstraints;
33 import java.awt.GridLayout;
34 import java.awt.Insets;
35 import java.awt.event.KeyEvent;
36 import java.awt.event.KeyListener;
37 import java.awt.event.MouseEvent;
38 import java.awt.event.MouseListener;
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
42 import java.util.Map;
43 import java.util.TreeMap;
44 import javax.swing.JButton;
45 import javax.swing.JMenuItem;
46 import javax.swing.JPanel;
47 import javax.swing.JPopupMenu;
48 import javax.swing.JScrollPane;
49 import javax.swing.ListSelectionModel;
50 import jaxx.runtime.JAXXBinding;
51 import jaxx.runtime.JAXXContext;
52 import jaxx.runtime.JAXXObject;
53 import jaxx.runtime.JAXXObjectDescriptor;
54 import jaxx.runtime.JAXXUtil;
55 import jaxx.runtime.SwingUtil;
56 import jaxx.runtime.binding.DefaultJAXXBinding;
57 import jaxx.runtime.context.DefaultJAXXContext;
58 import jaxx.runtime.swing.Table;
59 import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
60 import org.apache.commons.logging.Log;
61 import org.apache.commons.logging.LogFactory;
62 import org.jdesktop.swingx.JXTable;
63 import static org.nuiton.i18n.I18n.t;
64
65 public class CaracteristicMapEditorUI extends Table implements TuttiUI<CaracteristicMapEditorUIModel, CaracteristicMapEditorUIHandler>, JAXXObject {
66
67
68
69
70
71 public static final String BINDING_ADD_ROW_ENABLED = "addRow.enabled";
72 public static final String BINDING_NEW_ROW_KEY_ENABLED = "newRowKey.enabled";
73 public static final String BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED = "removeCaracteristicMenu.enabled";
74
75
76
77
78
79 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAALVXTW8bRRieOLHz3UCjJC0pUhJClR7YFKSiolDa2I2pEycpcapGWCgd707sScc7y+xsspEVxE/gJ5Qr4oLEjRPiwJkDF8RfQBUHroh3Zp1db72u80UOq2TeeZ/383l28/1fKO0KNLuPfd8Qni1pnRiryzs7m5V9YsqHxDUFdSQXKPjpSaFUGQ1b4bkr0TvlonJfbLov5njd4TaxW7yXimjIlUeMuDVCpERvxz1M110sheYl3/HECWqYVBLqi79fpr6xvv42hZDvQHbDUMpMN6+okr4iSlFLoqsQ6QAvMmxXIQ1B7SrkO6rOcgy77gauky/RV6i/iDIOFgAm0dzpS9YY2t93JOqf38YVRm5LlN8TBt0TpE6EIT0pqeFRwz2E6IYnKTNMLLApiaCupKZr5Fr/XMfOikUhypOC42jwjETpOrcIk2jtcoDXFVqEPiRV3o+540EVk6o5fhN0VR+uE9uLbk9BeH5A4thwQ6KJmKs6K0hSV25jofegTQ63+OEaOZLoTmyegRvRKRoVgm0jC488ZRBE5QeDqPAs9xXQYIiXwZYFeBKNx4JnoTncjl8dnV8tmYIz9hjbakpTMY/IFPeaNhObqEcNVi6qxj5w5rnkTgDlG6s72qoApkOcgflVBc4g8NV4i9WpjinRcEXnrY9OHEdMbJuERRW9pR6z0fRcfEDarQJNx9oLRDQiIkZM6SmjtPDgWKJr5XbuboEpYO21V1irALX138nx33/688f8CVXHIPZE4tUWpQEKOYI7REiqQo8FPFVLvAg9XiqjQZcwkCktQzcSEis1zZAcxHtTuQcceITdGkCk+//4+ZfJZ7/1olQeDTGOrTxW9wvQ55qALnBm+c79BzqjkcMBeL6hcoMVBdvhFnGVmvVJ4REfqr+RUH2YQmXw13/GSz88OOlAD2R0veP1qAvpz1GG2ozaRMtVU4kS5WnYcYln8UhxkjQIKf4ms6bJX0M/P0gq+8ouUOkpodWafGJTqH2qoVXHqBIZHS/cOvY9hfGhrlP9dhc5DgQeZbhC2FMqa+pet2iZmoaUKHXndgfANjJ0gksBu5rLBKoyESwOsWIKBfJMbNUQeClMNmZDFTKou1J35FFiXa1y5XTpYC8wEcJRbhdMbkvUC91sDfpuI4oJHS01k1QKuXBrZvbejO0xdgxt3HVp3WFkWWNJ9EXjbJof5PCK9geataylMgA2TLU3iTU3JbVbwX2guUGrAS6LzedVwT0bKs00mqVE5jwX5MQ82shxBhKfLS7n1uDWgMuFDNQ0vYcZ0A6Nho7qTaV6V4QySq2HzCgVNj4truyWVoorue3C5kZiLa9T724FKu2l79+112144dlqhT4L+q/eUQXbogfU8jDbrLhEHGCVWC5pFEbC+9Koh5ixpRmpYGnW3oPyiCRKfYgPFHl0WWGBU5Jztk2dbQ1cvLR6JHVal/1mUzqou9V+eSW4BYxr3/Znl7ftQeTTLHynL5qzL8jDczU0eMF32olMYA63YekCMYBiuzX49INMG3MXyVWBzB2/uk/3LwKpV+h/VL+cDtN1GWKfW2ffgOy5WqA+4TrNv08Zw+l/dG78aPbZc85eZ5k8+XvnB0yce/ny5l6CIF2n3vIR3W3m8PEyoP492T5yoKdXPrawxDMVClXb1U/asHvUc/IUmBmGj7gnlf1FMsrcKVD6qBn8G9ABY7wrhjr+7jUI1y+McPPCCAuA8B/G6Abj3xAAAA==";
80 private static final Log log = LogFactory.getLog(CaracteristicMapEditorUI.class);
81 private static final long serialVersionUID = 1L;
82
83
84
85
86
87 protected List<Object> $activeBindings = new ArrayList<Object>();
88 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
89 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
90 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
91 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
92 private boolean allComponentsCreated;
93 protected final JAXXContext delegateContext = new DefaultJAXXContext();
94
95
96
97
98
99 protected JButton addRow;
100 protected JButton cancelButton;
101 protected JXTable caracteristicMapEditorTable;
102 protected final CaracteristicMapEditorUIHandler handler = createHandler();
103 protected CaracteristicMapEditorUIModel model;
104 protected BeanFilterableComboBox<Caracteristic> newRowKey;
105 protected JMenuItem removeCaracteristicMenu;
106 protected JButton saveButton;
107 protected JPopupMenu tablePopup;
108
109
110
111
112
113 private JPanel $JPanel0;
114 private JScrollPane $JScrollPane0;
115 private CaracteristicMapEditorUI $Table0 = this;
116
117
118
119
120
121 public CaracteristicMapEditorUI(TuttiUI parentUI) {
122 TuttiUIUtil.setParentUI(this, parentUI);
123 $initialize();
124 }
125
126 public CaracteristicMapEditorUI() {
127 $initialize();
128 }
129
130 public CaracteristicMapEditorUI(JAXXContext parentContext) {
131 JAXXUtil.initContext(this, parentContext);
132 $initialize();
133 }
134
135
136
137
138
139 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
140 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
141 }
142
143
144
145
146
147 @Override
148 public void applyDataBinding(String $binding) {
149 if (allComponentsCreated && $bindings.containsKey($binding)) {
150 getDataBinding($binding).applyDataBinding();
151 }
152 processDataBinding($binding);
153 }
154
155 @Override
156 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
157 super.firePropertyChange(propertyName, oldValue, newValue);
158 }
159
160 @Override
161 public Map<String, Object> get$objectMap() {
162 return $objectMap;
163 }
164
165 @Override
166 public JAXXBinding getDataBinding(String bindingId) {
167 return $bindings.get(bindingId);
168 }
169
170 @Override
171 public JAXXBinding[] getDataBindings() {
172 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
173 }
174
175 @Override
176 public Object getObjectById(String id) {
177 return $objectMap.get(id);
178 }
179
180 @Override
181 public void processDataBinding(String $binding, boolean $force) {
182 if (!$force && $activeBindings.contains($binding)) {
183 return;
184 }
185 $activeBindings.add($binding);
186 try {
187 if (allComponentsCreated && $bindings.containsKey($binding)) {
188 getDataBinding($binding).processDataBinding();
189 }
190 } finally {
191 $activeBindings.remove($binding);
192 }
193 }
194
195 @Override
196 public void processDataBinding(String $binding) {
197 processDataBinding($binding, false);
198 }
199
200 @Override
201 public void registerDataBinding(JAXXBinding binding) {
202 $bindings.put(binding.getId(), binding);
203 }
204
205 @Override
206 public void removeDataBinding(String $binding) {
207 if (allComponentsCreated && $bindings.containsKey($binding)) {
208 getDataBinding($binding).removeDataBinding();
209 }
210 }
211
212
213
214
215
216 @Override
217 public <T> T getContextValue(Class<T> clazz) {
218 return delegateContext.getContextValue(clazz, null);
219 }
220
221 @Override
222 public <T> T getContextValue(Class<T> clazz, String name) {
223 return delegateContext.getContextValue(clazz, name);
224 }
225
226 @Override
227 public JAXXContext getDelegateContext() {
228 return delegateContext;
229 }
230
231 @Override
232 public <O extends Container> O getParentContainer(Class<O> clazz) {
233 return SwingUtil.getParentContainer(this, clazz);
234 }
235
236 @Override
237 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
238 return SwingUtil.getParentContainer(source, clazz);
239 }
240
241 @Override
242 public <T> void removeContextValue(Class<T> clazz) {
243 delegateContext.removeContextValue(clazz, null);
244 }
245
246 @Override
247 public <T> void removeContextValue(Class<T> clazz, String name) {
248 delegateContext.removeContextValue(clazz, name);
249 }
250
251 @Override
252 public <T> void setContextValue(T o) {
253 delegateContext.setContextValue(o, null);
254 }
255
256 @Override
257 public <T> void setContextValue(T o, String name) {
258 delegateContext.setContextValue(o, name);
259 }
260
261
262
263
264
265 public void doKeyPressed__on__caracteristicMapEditorTable(KeyEvent event) {
266 if (log.isDebugEnabled()) {
267 log.debug(event);
268 }
269 handler.openRowMenu(event, tablePopup);
270 }
271
272 public void doMouseClicked__on__caracteristicMapEditorTable(MouseEvent event) {
273 if (log.isDebugEnabled()) {
274 log.debug(event);
275 }
276 handler.autoSelectRowInTable(event, tablePopup);
277 }
278
279
280
281
282
283 public JButton getAddRow() {
284 return addRow;
285 }
286
287 public JButton getCancelButton() {
288 return cancelButton;
289 }
290
291 public JXTable getCaracteristicMapEditorTable() {
292 return caracteristicMapEditorTable;
293 }
294
295 public CaracteristicMapEditorUIHandler getHandler() {
296 return handler;
297 }
298
299 public CaracteristicMapEditorUIModel getModel() {
300 return model;
301 }
302
303 public BeanFilterableComboBox<Caracteristic> getNewRowKey() {
304 return newRowKey;
305 }
306
307 public JMenuItem getRemoveCaracteristicMenu() {
308 return removeCaracteristicMenu;
309 }
310
311 public JButton getSaveButton() {
312 return saveButton;
313 }
314
315 public JPopupMenu getTablePopup() {
316 return tablePopup;
317 }
318
319
320
321
322
323 protected JPanel get$JPanel0() {
324 return $JPanel0;
325 }
326
327 protected JScrollPane get$JScrollPane0() {
328 return $JScrollPane0;
329 }
330
331
332
333
334
335 protected void addChildrenToTablePopup() {
336 if (!allComponentsCreated) {
337 return;
338 }
339 tablePopup.add(removeCaracteristicMenu);
340 }
341
342 protected void createAddRow() {
343 $objectMap.put("addRow", addRow = new JButton());
344
345 addRow.setName("addRow");
346 addRow.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.util.caracteristics.actions.CaracteristicEditorAddRowAction.class);
347 }
348
349 protected void createCancelButton() {
350 $objectMap.put("cancelButton", cancelButton = new JButton());
351
352 cancelButton.setName("cancelButton");
353 cancelButton.setText(t("tutti.editIndividualObservationCaracteristics.action.cancel"));
354 cancelButton.setToolTipText(t("tutti.editIndividualObservationCaracteristics.action.cancel.tip"));
355 cancelButton.putClientProperty("help", "tutti.editIndividualObservationCaracteristics.action.cancel.help");
356 cancelButton.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.util.caracteristics.actions.CaracteristicEditorCancelAction.class);
357 }
358
359 protected void createCaracteristicMapEditorTable() {
360 $objectMap.put("caracteristicMapEditorTable", caracteristicMapEditorTable = new JXTable());
361
362 caracteristicMapEditorTable.setName("caracteristicMapEditorTable");
363 caracteristicMapEditorTable.setSortable(false);
364 caracteristicMapEditorTable.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyPressed", this, "doKeyPressed__on__caracteristicMapEditorTable"));
365 caracteristicMapEditorTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__caracteristicMapEditorTable"));
366 }
367
368 protected CaracteristicMapEditorUIHandler createHandler() {
369 return new CaracteristicMapEditorUIHandler();
370 }
371
372 protected void createModel() {
373 $objectMap.put("model", model = getContextValue(CaracteristicMapEditorUIModel.class));
374 }
375
376 protected void createNewRowKey() {
377 $objectMap.put("newRowKey", newRowKey = new BeanFilterableComboBox<Caracteristic>(this));
378
379 newRowKey.setName("newRowKey");
380 newRowKey.setProperty("selectedCaracteristic");
381 newRowKey.setShowReset(true);
382 }
383
384 protected void createRemoveCaracteristicMenu() {
385 $objectMap.put("removeCaracteristicMenu", removeCaracteristicMenu = new JMenuItem());
386
387 removeCaracteristicMenu.setName("removeCaracteristicMenu");
388 removeCaracteristicMenu.setText(t("tutti.editIndividualObservationCaracteristics.action.removeCaracteristic"));
389 removeCaracteristicMenu.setToolTipText(t("tutti.editIndividualObservationCaracteristics.action.removeCaracteristic.tip"));
390 removeCaracteristicMenu.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.util.caracteristics.actions.CaracteristicEditorRemoveRowAction.class);
391 }
392
393 protected void createSaveButton() {
394 $objectMap.put("saveButton", saveButton = new JButton());
395
396 saveButton.setName("saveButton");
397 saveButton.setText(t("tutti.editIndividualObservationCaracteristics.action.save"));
398 saveButton.setToolTipText(t("tutti.editIndividualObservationCaracteristics.action.save.tip"));
399 saveButton.putClientProperty("help", "tutti.editIndividualObservationCaracteristics.action.save.help");
400 saveButton.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.util.caracteristics.actions.CaracteristicEditorSaveAction.class);
401 }
402
403 protected void createTablePopup() {
404 $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
405
406 tablePopup.setName("tablePopup");
407 }
408
409
410
411
412
413 private void $completeSetup() {
414 allComponentsCreated = true;
415 if (log.isDebugEnabled()) {
416 log.debug(this);
417 }
418
419 add(newRowKey, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
420 add(addRow, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
421 add($JScrollPane0, new GridBagConstraints(0, 1, 2, 1, 0.0, 1.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
422 add($JPanel0, new GridBagConstraints(0, 2, 2, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
423 addChildrenToTablePopup();
424
425 $JScrollPane0.getViewport().add(caracteristicMapEditorTable);
426
427 $JPanel0.add(cancelButton);
428 $JPanel0.add(saveButton);
429
430
431 JAXXUtil.applyDataBinding(this, $bindings.keySet());
432
433
434 newRowKey.setBeanType(Caracteristic.class);
435 removeCaracteristicMenu.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editIndividualObservationCaracteristics.action.removeCaracteristic.mnemonic"),'Z'));
436 removeCaracteristicMenu.setIcon(SwingUtil.createActionIcon("batch-delete"));
437 addRow.setIcon(SwingUtil.createActionIcon("add"));
438 caracteristicMapEditorTable.setSelectionBackground(null);
439 caracteristicMapEditorTable.setSelectionForeground(Color.BLACK);
440 caracteristicMapEditorTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
441 cancelButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editIndividualObservationCaracteristics.action.cancel.mnemonic"),'Z'));
442 cancelButton.setIcon(SwingUtil.createActionIcon("cancel"));
443 saveButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.editIndividualObservationCaracteristics.action.save.mnemonic"),'Z'));
444 saveButton.setIcon(SwingUtil.createActionIcon("save"));
445 }
446
447 private void $initialize() {
448 if (allComponentsCreated) {
449 return;
450 }
451 if (log.isDebugEnabled()) {
452 log.debug(this);
453 }
454 handler.beforeInit(this);
455 $objectMap.put("$Table0", $Table0);
456 createModel();
457 createTablePopup();
458 createRemoveCaracteristicMenu();
459 createNewRowKey();
460 createAddRow();
461
462 $objectMap.put("$JScrollPane0", $JScrollPane0 = new JScrollPane());
463
464 $JScrollPane0.setName("$JScrollPane0");
465 createCaracteristicMapEditorTable();
466
467 $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
468
469 $JPanel0.setName("$JPanel0");
470 $JPanel0.setLayout(new GridLayout(1, 0));
471 SwingUtil.setComponentHeight($JPanel0,50);
472 createCancelButton();
473 createSaveButton();
474
475 setName("$Table0");
476
477
478 $registerDefaultBindings();
479 $completeSetup();
480 handler.afterInit(this);
481 }
482
483 private void $registerDefaultBindings() {
484
485 registerDataBinding(new DefaultJAXXBinding(this, BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED, true) {
486
487 @Override
488 public void applyDataBinding() {
489 if (model != null) {
490 model.addPropertyChangeListener("removeCaracteristicEnabled", this);
491 }
492 }
493
494 @Override
495 public void processDataBinding() {
496 if (model != null) {
497 removeCaracteristicMenu.setEnabled(model.isRemoveCaracteristicEnabled());
498 }
499 }
500
501 @Override
502 public void removeDataBinding() {
503 if (model != null) {
504 model.removePropertyChangeListener("removeCaracteristicEnabled", this);
505 }
506 }
507 });
508 registerDataBinding(new DefaultJAXXBinding(this, BINDING_NEW_ROW_KEY_ENABLED, true) {
509
510 @Override
511 public void applyDataBinding() {
512 if (newRowKey != null) {
513 newRowKey.addPropertyChangeListener("empty", this);
514 }
515 }
516
517 @Override
518 public void processDataBinding() {
519 if (newRowKey != null) {
520 newRowKey.setEnabled(!newRowKey.isEmpty());
521 }
522 }
523
524 @Override
525 public void removeDataBinding() {
526 if (newRowKey != null) {
527 newRowKey.removePropertyChangeListener("empty", this);
528 }
529 }
530 });
531 registerDataBinding(new DefaultJAXXBinding(this, BINDING_ADD_ROW_ENABLED, true) {
532
533 @Override
534 public void applyDataBinding() {
535 if (newRowKey != null) {
536 newRowKey.addPropertyChangeListener("selectedItem", this);
537 }
538 }
539
540 @Override
541 public void processDataBinding() {
542 if (newRowKey != null) {
543 addRow.setEnabled(newRowKey.getSelectedItem() != null);
544 }
545 }
546
547 @Override
548 public void removeDataBinding() {
549 if (newRowKey != null) {
550 newRowKey.removePropertyChangeListener("selectedItem", this);
551 }
552 }
553 });
554 }
555
556 }