1 package fr.ifremer.dali.ui.swing.content.manage.referential.taxon.menu;
2
3 import fr.ifremer.dali.dto.referential.TaxonDTO;
4 import fr.ifremer.dali.dto.referential.TaxonomicLevelDTO;
5 import fr.ifremer.dali.ui.swing.DaliHelpBroker;
6 import fr.ifremer.dali.ui.swing.DaliUIContext;
7 import fr.ifremer.dali.ui.swing.content.manage.filter.element.menu.ApplyFilterUI;
8 import fr.ifremer.dali.ui.swing.content.manage.referential.menu.ReferentialMenuUI;
9 import fr.ifremer.dali.ui.swing.util.DaliUI;
10 import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
11 import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
12 import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
13 import java.awt.BorderLayout;
14 import java.awt.Component;
15 import java.awt.Container;
16 import java.awt.GridBagConstraints;
17 import java.awt.GridLayout;
18 import java.awt.Insets;
19 import java.awt.LayoutManager;
20 import java.awt.event.KeyEvent;
21 import java.awt.event.KeyListener;
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.TreeMap;
27 import javax.swing.BorderFactory;
28 import javax.swing.Box;
29 import javax.swing.BoxLayout;
30 import javax.swing.JButton;
31 import javax.swing.JLabel;
32 import javax.swing.JPanel;
33 import javax.swing.JTextField;
34 import javax.swing.SwingConstants;
35 import jaxx.runtime.JAXXBinding;
36 import jaxx.runtime.JAXXContext;
37 import jaxx.runtime.JAXXObject;
38 import jaxx.runtime.JAXXObjectDescriptor;
39 import jaxx.runtime.JAXXUtil;
40 import jaxx.runtime.SwingUtil;
41 import jaxx.runtime.binding.DefaultJAXXBinding;
42 import jaxx.runtime.context.DefaultJAXXContext;
43 import jaxx.runtime.swing.Table;
44 import jaxx.runtime.swing.help.JAXXHelpUI;
45 import org.apache.commons.logging.Log;
46 import org.apache.commons.logging.LogFactory;
47 import static org.nuiton.i18n.I18n.t;
48
49 public class TaxonMenuUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, ReferentialMenuUI<TaxonMenuUIModel, TaxonMenuUIHandler>, JAXXObject {
50
51
52
53
54
55 public static final String BINDING_LEVEL_COMBO_SELECTED_ITEM = "levelCombo.selectedItem";
56 public static final String BINDING_NAME_EDITOR_TEXT = "nameEditor.text";
57
58
59
60
61
62 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1WTW8bRRgemziJ89E2H41SNUCbViIBMS4gcSBAm49adeRQ1LhSRA4w3h07U8a729lxs5ZVxC8AfgIcuCEkJG6cEAfOHLgg/gJCPXBFvO/setcbb2JDiJTJ7sz78Tzv+86z+eYPUvAVuf6IBQFVbUeLFqe7mwcH9+uPuKV3uG8p4WlXkfAnlyf5QzJtx/u+JjcOq+heitxL227Lcx3u9HlvVMmUrzuS+0eca02eT3tYvl/aj483Aq+telFjUFlRv3z2Z/4L+9Ov8oQEHqC7CFSuDfNKmIxVSV7YmsxDpiesJJnTBBhKOE3AO4t725L5/nusxR+TT8hElYx7TEEwTVZHp2xiGP/A02Ty5u77zOHylia7DUVFQ/EWV9RmUtC2oP4xZKeW62gIRlvMYU1OFW9wTCuYpJoFrkNb3GnTGj7uwdPDiueZDOOaFFquzaUm9/+/4HsYMckwXlfux1xp8tKpKXbg7R74bBnLxLWIoQ19KDrWN4gcwpqgVTE2nmWeJztlITVXDyuaVEZl1DAulEswxV2ks9kfCxPMx3ku+GBpaeE6EbLl1ASFKWqsLnnar9fJ1/B9EZfl+GxK8idcVll9kKnZRLOrJ6xhhuquJu/00XzcZrYSTf5GP9do0midM4feDYC5zW3jvOUG6cA9iK9nQCw6MNYxmBdxuZEgwsO7toA51mQphb/GA10WXNppj8txFbfaWruOH3d0MV22aUtypkIjTRZSscNdNHw5tp/xwdw6So5odK7I1VSjQERoIiLJLc8dkoJqwzZ09nBQdx7AUag4yycUBwOa07+XFn794ffvyz2ZmYPclzNN+1QSrr+nXA8uisDUF0ONaWshS3vM2zgkxbBiRkJXMoDtR8cADvLNoTtFd3qP+UcQojDx248/LX30y3MkX4YRcpldZmhfIUV9pKAKrrQD7/Ydg2jmeBLWS/A7Bt0NbwiOtIZ31YY/s2B/vMMtVzHT9EKDSR/2i7j/gPuo2pHpGE6eJhNdIzVPAyjdSkbpYvz14s9/Lex/d6dXvhzQuXKqeVLCwgdkXDhSONzodCTBmbo87fm8bbuJ1GaJLwH5vXTywkTi9KZZ3xqoVg71zlU26t3t7pZ5CsvcoZbiTPOa0JLb4cmaXls10gSK1BDNUHo0Gqyur0OhMMeOqQA+lcmA+HhD4OThTku8s2Xs0Uw3EY6n2B64mppcMQii2etEmm4MswD0KdUIyWdCuNyuaN4CZQtHgDa5rmKYtXWAMdlLDUM0JK1B/m85J9KUcJ5Pc0aTrKyJ5g1LmotDzyUcceDWsvvYJ5jDQsMFnP8Qv23CYtj4TdN+kMLuNipj+EotHFwgOMXMewW/caBjvYtooL1gWIcGNJRJatSVyvDLM61dV9aEVzPmK6eaa+FlkeqX6v/KarG7bzKdRWusIRw7ZrWcATOTz1KG4SlMUh+REXo/LlnHBWNy4W2baXatDgDhC/XuQOwcrgtDI+L2Z7h8nh1hZQRMkyi7tY7Hz4hz/dxIbp47wisjcJmCzjUd/Pfs4IxIr46E5eszItwa5Z4LK/zH4lwovh2C4h9v12BuaQ0AAA==";
63 private static final Log log = LogFactory.getLog(TaxonMenuUI.class);
64 private static final long serialVersionUID = 1L;
65
66
67
68
69
70 protected List<Object> $activeBindings = new ArrayList<Object>();
71 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
72 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
73 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
74 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
75 private boolean allComponentsCreated;
76 protected final JAXXContext delegateContext = new DefaultJAXXContext();
77
78
79
80
81
82 protected ApplyFilterUI applyFilterUI;
83 protected DaliHelpBroker broker;
84 protected JButton clearButton;
85 protected final TaxonMenuUIHandler handler = createHandler();
86 protected ExtendedComboBox<TaxonomicLevelDTO> levelCombo;
87 protected JLabel levelLabel;
88 protected JPanel menuPanel;
89 protected TaxonMenuUIModel model;
90 protected JTextField nameEditor;
91 protected JLabel nameLabel;
92 protected JButton searchButton;
93 protected JPanel selectionButtonsPanel;
94 protected Table selectionPanel;
95
96
97
98
99
100 private TaxonMenuUI $JPanel0 = this;
101 private JPanel $JPanel1;
102 private JPanel $JPanel2;
103
104
105
106
107
108 public TaxonMenuUI(ApplicationUI parentUI) {
109 ApplicationUIUtil.setParentUI(this, parentUI);
110 $initialize();
111 }
112
113 public TaxonMenuUI() {
114 $initialize();
115 }
116
117 public TaxonMenuUI(JAXXContext parentContext) {
118 JAXXUtil.initContext(this, parentContext);
119 $initialize();
120 }
121
122 public TaxonMenuUI(boolean param0) {
123 super(param0);
124 $initialize();
125 }
126
127 public TaxonMenuUI(JAXXContext parentContext, boolean param1) {
128 super(param1);
129 JAXXUtil.initContext(this, parentContext);
130 $initialize();
131 }
132
133 public TaxonMenuUI(LayoutManager param0) {
134 super(param0);
135 $initialize();
136 }
137
138 public TaxonMenuUI(JAXXContext parentContext, LayoutManager param1) {
139 super(param1);
140 JAXXUtil.initContext(this, parentContext);
141 $initialize();
142 }
143
144 public TaxonMenuUI(LayoutManager param0, boolean param1) {
145 super(param0 ,param1);
146 $initialize();
147 }
148
149 public TaxonMenuUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
150 super(param1 ,param2);
151 JAXXUtil.initContext(this, parentContext);
152 $initialize();
153 }
154
155
156
157
158
159 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
160 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
161 }
162
163
164
165
166
167 @Override
168 public void applyDataBinding(String $binding) {
169 if (allComponentsCreated && $bindings.containsKey($binding)) {
170 getDataBinding($binding).applyDataBinding();
171 }
172 processDataBinding($binding);
173 }
174
175 @Override
176 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
177 super.firePropertyChange(propertyName, oldValue, newValue);
178 }
179
180 @Override
181 public Map<String, Object> get$objectMap() {
182 return $objectMap;
183 }
184
185 @Override
186 public JAXXBinding getDataBinding(String bindingId) {
187 return $bindings.get(bindingId);
188 }
189
190 @Override
191 public JAXXBinding[] getDataBindings() {
192 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
193 }
194
195 @Override
196 public Object getObjectById(String id) {
197 return $objectMap.get(id);
198 }
199
200 @Override
201 public void processDataBinding(String $binding, boolean $force) {
202 if (!$force && $activeBindings.contains($binding)) {
203 return;
204 }
205 $activeBindings.add($binding);
206 try {
207 if (allComponentsCreated && $bindings.containsKey($binding)) {
208 getDataBinding($binding).processDataBinding();
209 }
210 } finally {
211 $activeBindings.remove($binding);
212 }
213 }
214
215 @Override
216 public void processDataBinding(String $binding) {
217 processDataBinding($binding, false);
218 }
219
220 @Override
221 public void registerDataBinding(JAXXBinding binding) {
222 $bindings.put(binding.getId(), binding);
223 }
224
225 @Override
226 public void removeDataBinding(String $binding) {
227 if (allComponentsCreated && $bindings.containsKey($binding)) {
228 getDataBinding($binding).removeDataBinding();
229 }
230 }
231
232
233
234
235
236 @Override
237 public <T> T getContextValue(Class<T> clazz) {
238 return delegateContext.getContextValue(clazz, null);
239 }
240
241 @Override
242 public <T> T getContextValue(Class<T> clazz, String name) {
243 return delegateContext.getContextValue(clazz, name);
244 }
245
246 @Override
247 public JAXXContext getDelegateContext() {
248 return delegateContext;
249 }
250
251 @Override
252 public <O extends Container> O getParentContainer(Class<O> clazz) {
253 return SwingUtil.getParentContainer(this, clazz);
254 }
255
256 @Override
257 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
258 return SwingUtil.getParentContainer(source, clazz);
259 }
260
261 @Override
262 public <T> void removeContextValue(Class<T> clazz) {
263 delegateContext.removeContextValue(clazz, null);
264 }
265
266 @Override
267 public <T> void removeContextValue(Class<T> clazz, String name) {
268 delegateContext.removeContextValue(clazz, name);
269 }
270
271 @Override
272 public <T> void setContextValue(T o) {
273 delegateContext.setContextValue(o, null);
274 }
275
276 @Override
277 public <T> void setContextValue(T o, String name) {
278 delegateContext.setContextValue(o, name);
279 }
280
281
282
283
284
285 public void doKeyReleased__on__nameEditor(KeyEvent event) {
286 if (log.isDebugEnabled()) {
287 log.debug(event);
288 }
289 handler.setText(event, "name");
290 }
291
292
293
294
295
296 public ApplyFilterUI getApplyFilterUI() {
297 return applyFilterUI;
298 }
299
300 public DaliHelpBroker getBroker() {
301 return broker;
302 }
303
304 public JButton getClearButton() {
305 return clearButton;
306 }
307
308 public TaxonMenuUIHandler getHandler() {
309 return handler;
310 }
311
312 public ExtendedComboBox<TaxonomicLevelDTO> getLevelCombo() {
313 return levelCombo;
314 }
315
316 public JLabel getLevelLabel() {
317 return levelLabel;
318 }
319
320 public JPanel getMenuPanel() {
321 return menuPanel;
322 }
323
324 public TaxonMenuUIModel getModel() {
325 return model;
326 }
327
328 public JTextField getNameEditor() {
329 return nameEditor;
330 }
331
332 public JLabel getNameLabel() {
333 return nameLabel;
334 }
335
336 public JButton getSearchButton() {
337 return searchButton;
338 }
339
340 public JPanel getSelectionButtonsPanel() {
341 return selectionButtonsPanel;
342 }
343
344 public Table getSelectionPanel() {
345 return selectionPanel;
346 }
347
348
349
350
351
352 @Override
353 public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
354 broker.installUI(component, helpId);
355 }
356
357 @Override
358 public void showHelp(String helpId) {
359 getBroker().showHelp(this, helpId);
360 }
361
362
363
364
365
366 protected JPanel get$JPanel1() {
367 return $JPanel1;
368 }
369
370 protected JPanel get$JPanel2() {
371 return $JPanel2;
372 }
373
374
375
376
377
378 protected void addChildrenToMenuPanel() {
379 if (!allComponentsCreated) {
380 return;
381 }
382 menuPanel.add(applyFilterUI);
383 menuPanel.add(selectionPanel);
384 menuPanel.add(selectionButtonsPanel);
385 }
386
387 protected void addChildrenToSelectionButtonsPanel() {
388 if (!allComponentsCreated) {
389 return;
390 }
391 selectionButtonsPanel.add(clearButton);
392 selectionButtonsPanel.add(searchButton);
393 }
394
395 protected void addChildrenToSelectionPanel() {
396 if (!allComponentsCreated) {
397 return;
398 }
399 selectionPanel.add($JPanel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
400 selectionPanel.add($JPanel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
401 }
402
403 protected void createApplyFilterUI() {
404 $objectMap.put("applyFilterUI", applyFilterUI = new ApplyFilterUI(this));
405
406 applyFilterUI.setName("applyFilterUI");
407 }
408
409 protected void createBroker() {
410 $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
411 }
412
413 protected void createClearButton() {
414 $objectMap.put("clearButton", clearButton = new JButton());
415
416 clearButton.setName("clearButton");
417 clearButton.setText(t("dali.action.search.clear.label"));
418 clearButton.setToolTipText(t("dali.action.search.clear.tip"));
419 clearButton.putClientProperty("applicationAction", ClearAction.class);
420 }
421
422 protected TaxonMenuUIHandler createHandler() {
423 return new TaxonMenuUIHandler();
424 }
425
426 protected void createLevelCombo() {
427 $objectMap.put("levelCombo", levelCombo = new ExtendedComboBox<TaxonomicLevelDTO>(this));
428
429 levelCombo.setName("levelCombo");
430 levelCombo.setFilterable(true);
431 levelCombo.setShowDecorator(false);
432 levelCombo.setProperty("level");
433 levelCombo.setShowReset(true);
434 }
435
436 protected void createLevelLabel() {
437 $objectMap.put("levelLabel", levelLabel = new JLabel());
438
439 levelLabel.setName("levelLabel");
440 levelLabel.setText(t("dali.property.taxon.level"));
441 }
442
443 protected void createMenuPanel() {
444 $objectMap.put("menuPanel", menuPanel = new JPanel());
445
446 menuPanel.setName("menuPanel");
447 menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.PAGE_AXIS));
448 }
449
450 protected void createModel() {
451 $objectMap.put("model", model = getContextValue(TaxonMenuUIModel.class));
452 }
453
454 protected void createNameEditor() {
455 $objectMap.put("nameEditor", nameEditor = new JTextField());
456
457 nameEditor.setName("nameEditor");
458 nameEditor.setColumns(15);
459 nameEditor.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__nameEditor"));
460 }
461
462 protected void createNameLabel() {
463 $objectMap.put("nameLabel", nameLabel = new JLabel());
464
465 nameLabel.setName("nameLabel");
466 nameLabel.setText(t("dali.property.name"));
467 }
468
469 protected void createSearchButton() {
470 $objectMap.put("searchButton", searchButton = new JButton());
471
472 searchButton.setName("searchButton");
473 searchButton.setText(t("dali.action.search.label"));
474 searchButton.setToolTipText(t("dali.action.search.tip"));
475 searchButton.putClientProperty("applicationAction", SearchAction.class);
476 }
477
478 protected void createSelectionButtonsPanel() {
479 $objectMap.put("selectionButtonsPanel", selectionButtonsPanel = new JPanel());
480
481 selectionButtonsPanel.setName("selectionButtonsPanel");
482 selectionButtonsPanel.setLayout(new GridLayout(1,0));
483 }
484
485 protected void createSelectionPanel() {
486 $objectMap.put("selectionPanel", selectionPanel = new Table());
487
488 selectionPanel.setName("selectionPanel");
489 }
490
491
492
493
494
495 private void $completeSetup() {
496 allComponentsCreated = true;
497 if (log.isDebugEnabled()) {
498 log.debug(this);
499 }
500
501 add(menuPanel);
502 addChildrenToMenuPanel();
503 addChildrenToSelectionPanel();
504
505 $JPanel1.add(levelLabel, BorderLayout.PAGE_START);
506 $JPanel1.add(levelCombo, BorderLayout.CENTER);
507
508 $JPanel2.add(nameLabel, BorderLayout.PAGE_START);
509 $JPanel2.add(nameEditor);
510 addChildrenToSelectionButtonsPanel();
511
512
513 JAXXUtil.applyDataBinding(this, $bindings.keySet());
514
515
516 levelCombo.setBeanType(TaxonomicLevelDTO.class);
517 clearButton.setAlignmentX(Component.CENTER_ALIGNMENT);
518 searchButton.setAlignmentX(Component.CENTER_ALIGNMENT);
519 selectionPanel.setBorder(BorderFactory.createTitledBorder(t("dali.config.menu.title")));
520 levelLabel.setLabelFor(levelCombo);
521 levelCombo.setBean(model);
522 nameLabel.setLabelFor(nameEditor);
523 clearButton.setIcon(SwingUtil.createActionIcon("reset"));
524 searchButton.setIcon(SwingUtil.createActionIcon("find"));
525 }
526
527 private void $initialize() {
528 if (allComponentsCreated) {
529 return;
530 }
531 if (log.isDebugEnabled()) {
532 log.debug(this);
533 }
534 handler.beforeInit(this);
535 $objectMap.put("$JPanel0", $JPanel0);
536 createModel();
537 createBroker();
538 createMenuPanel();
539 createApplyFilterUI();
540 createSelectionPanel();
541
542 $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
543
544 $JPanel1.setName("$JPanel1");
545 $JPanel1.setLayout(new BorderLayout());
546 createLevelLabel();
547 createLevelCombo();
548
549 $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
550
551 $JPanel2.setName("$JPanel2");
552 $JPanel2.setLayout(new BorderLayout());
553 createNameLabel();
554 createNameEditor();
555 createSelectionButtonsPanel();
556 createClearButton();
557 createSearchButton();
558
559 setName("$JPanel0");
560
561
562 $registerDefaultBindings();
563 $completeSetup();
564 handler.afterInit(this);
565 }
566
567 private void $registerDefaultBindings() {
568
569 registerDataBinding(new DefaultJAXXBinding(this, BINDING_LEVEL_COMBO_SELECTED_ITEM, true) {
570
571 @Override
572 public void applyDataBinding() {
573 if (model != null) {
574 model.addPropertyChangeListener("level", this);
575 }
576 }
577
578 @Override
579 public void processDataBinding() {
580 if (model != null) {
581 levelCombo.setSelectedItem(model.getLevel());
582 }
583 }
584
585 @Override
586 public void removeDataBinding() {
587 if (model != null) {
588 model.removePropertyChangeListener("level", this);
589 }
590 }
591 });
592 registerDataBinding(new DefaultJAXXBinding(this, BINDING_NAME_EDITOR_TEXT, true) {
593
594 @Override
595 public void applyDataBinding() {
596 if (model != null) {
597 model.addPropertyChangeListener("name", this);
598 }
599 }
600
601 @Override
602 public void processDataBinding() {
603 if (model != null) {
604 SwingUtil.setText(nameEditor, model.getName());
605 }
606 }
607
608 @Override
609 public void removeDataBinding() {
610 if (model != null) {
611 model.removePropertyChangeListener("name", this);
612 }
613 }
614 });
615 }
616
617 }