1 package fr.ifremer.tutti.ui.swing.content.operation.fishing;
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.content.operation.EditFishingOperationUI;
29 import fr.ifremer.tutti.ui.swing.util.TuttiUI;
30 import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
31 import java.awt.Color;
32 import java.awt.Container;
33 import java.awt.GridBagConstraints;
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.JPopupMenu;
47 import javax.swing.JScrollPane;
48 import javax.swing.ListSelectionModel;
49 import jaxx.runtime.JAXXBinding;
50 import jaxx.runtime.JAXXContext;
51 import jaxx.runtime.JAXXObject;
52 import jaxx.runtime.JAXXObjectDescriptor;
53 import jaxx.runtime.JAXXUtil;
54 import jaxx.runtime.SwingUtil;
55 import jaxx.runtime.binding.DefaultJAXXBinding;
56 import jaxx.runtime.context.DefaultJAXXContext;
57 import jaxx.runtime.swing.Table;
58 import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox;
59 import org.apache.commons.logging.Log;
60 import org.apache.commons.logging.LogFactory;
61 import org.jdesktop.swingx.JXTable;
62 import static org.nuiton.i18n.I18n.t;
63
64 public class GearUseFeatureTabUI extends Table implements TuttiUI<GearUseFeatureTabUIModel, GearUseFeatureTabUIHandler>, JAXXObject {
65
66
67
68
69
70 public static final String BINDING_ADD_ROW_ENABLED = "addRow.enabled";
71 public static final String BINDING_NEW_ROW_KEY_ENABLED = "newRowKey.enabled";
72 public static final String BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED = "removeCaracteristicMenu.enabled";
73
74
75
76
77
78 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1Wz28bRRSeOLHz0y0QJWmVIiVQqhaJSZCoVCkUmpg4OHXSKk7UiEiE8e7EnnS8M8y+TTayivgT+BPgzgWJGyfEgTMHLoh/ASEOXBFvdjdeO9nUUdQcVtG89773Y973jb//i+R9Q+YPWRhSE3ggWpyuL+/uPqkfcgc+4b5jhAZlSPw3kCO5PTLuds59IG/vVW34QhK+UFItrTzudUUvVcmYDyeS+03OAcibvRGO7y/UOualUAfmFLVTVBbqt//8nfvG/fq7HCGhxupGsJW5flFpJ0NVkhMukDcw0xFbkMxrYBlGeA2st2jPSpL5/iZr8S/JV2S4SgqaGQQD8tblW44wovhQAxm+vc3qki8CWTswVBwY3uKGQgAgaCCof4zZqaM8QDCqNDcMhPLogfCb1rLGmdnxeZkzCAxHqJ2K1hF6AUi+pVwugVRfEfKGhUvhx8BW/lTpAPuYtuMJE9T16HCDe0HqPYP51REvMcMc4Eb4IBzrAWSqJ9SeVYC3bNj1TvSox4+31PFjfgLkfs+NxmHcFThjWufMoyv4KQuJSWx9eBV1taJCCzTawSsw10U8IJM9yVdwOsrrdS3eXq85Rkn5lHn2nmZ6IlJTb9Rk4+z8JAcyq0yDHiJbnoPSMURI13cjqw2c1bixsz39IRdoyoV0WQf2SN4EeAzkxt55+myhKSbOjTPEsYCR9b/pyd9/+vPH8ilbxjD3VKZrF9lxi7Wx2wLCpr4eUyUAIRc2mF7aI6M+l6gUkRLcyiislpixOMz3ug2nNpx+yvwmQuSH//j5l+kvfhskuTIZk4q5ZWb9K2QUmganoKQb6o8fRRVNHI/g9zVbG+4I2o63uG8FZQhMwEPs/lZG950S6qO//jtZ++HR6QQGsKKbF7qnU8h/RgrCk8LjkWIkYpCpEOPa54GrUtJnyQCxBMpe24RAd6Lvu1ltX9vHXX7GRaMJO57A3mfaEe9pg0N6fPfeizCwGDTq0/63SLTGxEXJ6lw+E9C0fv2yFZoRJJDc/cULAMfrEYssJ+RL4XJARpJlQlpPxYvD3R6JQIXknh0I6vJ0e74jA1T4qy0NJ5l9deuF7jPBQRQyTIfSV7FiSAZxmt1J32mnOXGitaRIK1F3783NP5zzAilf4Bj3fdHSki9HWEA+b19FdeNK/DPquxyJVYxMHbs4mU0notav4yFUp3jWCLfCnOcNowIPWy20k15Sc1kZfmoutktKosiuVJdLj9FrxFcGYl3LHzCJvCPFTqB9K+zwqniLte5DSWuVzbXq6n5ttbpa2q482czsJUs/+zWGsjsh3n/gbXj41Hh2dx7Gg8/ASiZNM14l2urE92zGRJ2B03wPW+DArcTwEHnwwVVSIElAKbkt9HYE8uBKdYLQ3Zt6J+G98LfOO6/GXkiX86vKXuGqxqkvs60X/SDod8soQiP2nd8+0XgL1z50GbC5uvBcLOqjc4kG7Hf6EphDwolf/qNsjMm+GPa4/RKEm4jwP78ty+NgCwAA";
79 private static final Log log = LogFactory.getLog(GearUseFeatureTabUI.class);
80 private static final long serialVersionUID = 1L;
81
82
83
84
85
86 protected List<Object> $activeBindings = new ArrayList<Object>();
87 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
88 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
89 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
90 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
91 private boolean allComponentsCreated;
92 protected final JAXXContext delegateContext = new DefaultJAXXContext();
93
94
95
96
97
98 protected JButton addRow;
99 protected JXTable gearUseFeatureTable;
100 protected final GearUseFeatureTabUIHandler handler = createHandler();
101 protected GearUseFeatureTabUIModel model;
102 protected BeanFilterableComboBox<Caracteristic> newRowKey;
103 protected JMenuItem removeCaracteristicMenu;
104 protected JPopupMenu tablePopup;
105
106
107
108
109
110 private JScrollPane $JScrollPane0;
111 private GearUseFeatureTabUI $Table0 = this;
112
113
114
115
116
117 public GearUseFeatureTabUI(EditFishingOperationUI parentUI) {
118 TuttiUIUtil.setParentUI(this, parentUI);
119 $initialize();
120 }
121
122 public GearUseFeatureTabUI() {
123 $initialize();
124 }
125
126 public GearUseFeatureTabUI(JAXXContext parentContext) {
127 JAXXUtil.initContext(this, parentContext);
128 $initialize();
129 }
130
131
132
133
134
135 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
136 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
137 }
138
139
140
141
142
143 @Override
144 public void applyDataBinding(String $binding) {
145 if (allComponentsCreated && $bindings.containsKey($binding)) {
146 getDataBinding($binding).applyDataBinding();
147 }
148 processDataBinding($binding);
149 }
150
151 @Override
152 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
153 super.firePropertyChange(propertyName, oldValue, newValue);
154 }
155
156 @Override
157 public Map<String, Object> get$objectMap() {
158 return $objectMap;
159 }
160
161 @Override
162 public JAXXBinding getDataBinding(String bindingId) {
163 return $bindings.get(bindingId);
164 }
165
166 @Override
167 public JAXXBinding[] getDataBindings() {
168 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
169 }
170
171 @Override
172 public Object getObjectById(String id) {
173 return $objectMap.get(id);
174 }
175
176 @Override
177 public void processDataBinding(String $binding, boolean $force) {
178 if (!$force && $activeBindings.contains($binding)) {
179 return;
180 }
181 $activeBindings.add($binding);
182 try {
183 if (allComponentsCreated && $bindings.containsKey($binding)) {
184 getDataBinding($binding).processDataBinding();
185 }
186 } finally {
187 $activeBindings.remove($binding);
188 }
189 }
190
191 @Override
192 public void processDataBinding(String $binding) {
193 processDataBinding($binding, false);
194 }
195
196 @Override
197 public void registerDataBinding(JAXXBinding binding) {
198 $bindings.put(binding.getId(), binding);
199 }
200
201 @Override
202 public void removeDataBinding(String $binding) {
203 if (allComponentsCreated && $bindings.containsKey($binding)) {
204 getDataBinding($binding).removeDataBinding();
205 }
206 }
207
208
209
210
211
212 @Override
213 public <T> T getContextValue(Class<T> clazz) {
214 return delegateContext.getContextValue(clazz, null);
215 }
216
217 @Override
218 public <T> T getContextValue(Class<T> clazz, String name) {
219 return delegateContext.getContextValue(clazz, name);
220 }
221
222 @Override
223 public JAXXContext getDelegateContext() {
224 return delegateContext;
225 }
226
227 @Override
228 public <O extends Container> O getParentContainer(Class<O> clazz) {
229 return SwingUtil.getParentContainer(this, clazz);
230 }
231
232 @Override
233 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
234 return SwingUtil.getParentContainer(source, clazz);
235 }
236
237 @Override
238 public <T> void removeContextValue(Class<T> clazz) {
239 delegateContext.removeContextValue(clazz, null);
240 }
241
242 @Override
243 public <T> void removeContextValue(Class<T> clazz, String name) {
244 delegateContext.removeContextValue(clazz, name);
245 }
246
247 @Override
248 public <T> void setContextValue(T o) {
249 delegateContext.setContextValue(o, null);
250 }
251
252 @Override
253 public <T> void setContextValue(T o, String name) {
254 delegateContext.setContextValue(o, name);
255 }
256
257
258
259
260
261 public void doKeyPressed__on__gearUseFeatureTable(KeyEvent event) {
262 if (log.isDebugEnabled()) {
263 log.debug(event);
264 }
265 handler.openRowMenu(event, tablePopup);
266 }
267
268 public void doMouseClicked__on__gearUseFeatureTable(MouseEvent event) {
269 if (log.isDebugEnabled()) {
270 log.debug(event);
271 }
272 handler.autoSelectRowInTable(event, tablePopup);
273 }
274
275
276
277
278
279 public JButton getAddRow() {
280 return addRow;
281 }
282
283 public JXTable getGearUseFeatureTable() {
284 return gearUseFeatureTable;
285 }
286
287 public GearUseFeatureTabUIHandler getHandler() {
288 return handler;
289 }
290
291 public GearUseFeatureTabUIModel getModel() {
292 return model;
293 }
294
295 public BeanFilterableComboBox<Caracteristic> getNewRowKey() {
296 return newRowKey;
297 }
298
299 public JMenuItem getRemoveCaracteristicMenu() {
300 return removeCaracteristicMenu;
301 }
302
303 public JPopupMenu getTablePopup() {
304 return tablePopup;
305 }
306
307
308
309
310
311 protected JScrollPane get$JScrollPane0() {
312 return $JScrollPane0;
313 }
314
315
316
317
318
319 protected void addChildrenToTablePopup() {
320 if (!allComponentsCreated) {
321 return;
322 }
323 tablePopup.add(removeCaracteristicMenu);
324 }
325
326 protected void createAddRow() {
327 $objectMap.put("addRow", addRow = new JButton());
328
329 addRow.setName("addRow");
330 addRow.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.GearUseFeatureAddRowAction.class);
331 }
332
333 protected void createGearUseFeatureTable() {
334 $objectMap.put("gearUseFeatureTable", gearUseFeatureTable = new JXTable());
335
336 gearUseFeatureTable.setName("gearUseFeatureTable");
337 gearUseFeatureTable.setSortable(false);
338 gearUseFeatureTable.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyPressed", this, "doKeyPressed__on__gearUseFeatureTable"));
339 gearUseFeatureTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__gearUseFeatureTable"));
340 }
341
342 protected GearUseFeatureTabUIHandler createHandler() {
343 return new GearUseFeatureTabUIHandler();
344 }
345
346 protected void createModel() {
347 $objectMap.put("model", model = getContextValue(GearUseFeatureTabUIModel.class));
348 }
349
350 protected void createNewRowKey() {
351 $objectMap.put("newRowKey", newRowKey = new BeanFilterableComboBox<Caracteristic>(this));
352
353 newRowKey.setName("newRowKey");
354 newRowKey.setProperty("selectedCaracteristic");
355 newRowKey.setShowReset(true);
356 }
357
358 protected void createRemoveCaracteristicMenu() {
359 $objectMap.put("removeCaracteristicMenu", removeCaracteristicMenu = new JMenuItem());
360
361 removeCaracteristicMenu.setName("removeCaracteristicMenu");
362 removeCaracteristicMenu.setText(t("tutti.gearUseFeatureTable.action.removeCaracteristic"));
363 removeCaracteristicMenu.setToolTipText(t("tutti.gearUseFeatureTable.action.removeCaracteristic.tip"));
364 removeCaracteristicMenu.putClientProperty("simpleAction", fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.GearUseFeatureRemoveRowAction.class);
365 }
366
367 protected void createTablePopup() {
368 $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
369
370 tablePopup.setName("tablePopup");
371 }
372
373
374
375
376
377 private void $completeSetup() {
378 allComponentsCreated = true;
379 if (log.isDebugEnabled()) {
380 log.debug(this);
381 }
382
383 add(newRowKey, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
384 add(addRow, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
385 add($JScrollPane0, new GridBagConstraints(0, 1, 2, 1, 0.0, 1.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
386 addChildrenToTablePopup();
387
388 $JScrollPane0.getViewport().add(gearUseFeatureTable);
389
390
391 JAXXUtil.applyDataBinding(this, $bindings.keySet());
392
393
394 newRowKey.setBeanType(Caracteristic.class);
395 removeCaracteristicMenu.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.gearUseFeatureTable.action.removeCaracteristic.mnemonic"),'Z'));
396 removeCaracteristicMenu.setIcon(SwingUtil.createActionIcon("batch-delete"));
397 addRow.setIcon(SwingUtil.createActionIcon("add"));
398 gearUseFeatureTable.setSelectionBackground(null);
399 gearUseFeatureTable.setSelectionForeground(Color.BLACK);
400 gearUseFeatureTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
401 }
402
403 private void $initialize() {
404 if (allComponentsCreated) {
405 return;
406 }
407 if (log.isDebugEnabled()) {
408 log.debug(this);
409 }
410 handler.beforeInit(this);
411 $objectMap.put("$Table0", $Table0);
412 createModel();
413 createTablePopup();
414 createRemoveCaracteristicMenu();
415 createNewRowKey();
416 createAddRow();
417
418 $objectMap.put("$JScrollPane0", $JScrollPane0 = new JScrollPane());
419
420 $JScrollPane0.setName("$JScrollPane0");
421 createGearUseFeatureTable();
422
423 setName("$Table0");
424
425
426 $registerDefaultBindings();
427 $completeSetup();
428 handler.afterInit(this);
429 }
430
431 private void $registerDefaultBindings() {
432
433 registerDataBinding(new DefaultJAXXBinding(this, BINDING_REMOVE_CARACTERISTIC_MENU_ENABLED, true) {
434
435 @Override
436 public void applyDataBinding() {
437 if (model != null) {
438 model.addPropertyChangeListener("removeCaracteristicEnabled", this);
439 }
440 }
441
442 @Override
443 public void processDataBinding() {
444 if (model != null) {
445 removeCaracteristicMenu.setEnabled(model.isRemoveCaracteristicEnabled());
446 }
447 }
448
449 @Override
450 public void removeDataBinding() {
451 if (model != null) {
452 model.removePropertyChangeListener("removeCaracteristicEnabled", this);
453 }
454 }
455 });
456 registerDataBinding(new DefaultJAXXBinding(this, BINDING_NEW_ROW_KEY_ENABLED, true) {
457
458 @Override
459 public void applyDataBinding() {
460 if (newRowKey != null) {
461 newRowKey.addPropertyChangeListener("empty", this);
462 }
463 }
464
465 @Override
466 public void processDataBinding() {
467 if (newRowKey != null) {
468 newRowKey.setEnabled(!newRowKey.isEmpty());
469 }
470 }
471
472 @Override
473 public void removeDataBinding() {
474 if (newRowKey != null) {
475 newRowKey.removePropertyChangeListener("empty", this);
476 }
477 }
478 });
479 registerDataBinding(new DefaultJAXXBinding(this, BINDING_ADD_ROW_ENABLED, true) {
480
481 @Override
482 public void applyDataBinding() {
483 if (newRowKey != null) {
484 newRowKey.addPropertyChangeListener("selectedItem", this);
485 }
486 }
487
488 @Override
489 public void processDataBinding() {
490 if (newRowKey != null) {
491 addRow.setEnabled(newRowKey.getSelectedItem() != null);
492 }
493 }
494
495 @Override
496 public void removeDataBinding() {
497 if (newRowKey != null) {
498 newRowKey.removePropertyChangeListener("selectedItem", this);
499 }
500 }
501 });
502 }
503
504 }