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