1 package fr.ifremer.dali.ui.swing.content.manage.rule.menu;
2
3 import fr.ifremer.dali.dto.configuration.control.RuleListDTO;
4 import fr.ifremer.dali.dto.configuration.programStrategy.ProgramDTO;
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.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 RulesMenuUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, ReferentialMenuUI<RulesMenuUIModel, RulesMenuUIHandler>, JAXXObject {
46
47
48
49
50
51 public static final String BINDING_PROGRAM_COMBO_BOX_ENABLED = "programComboBox.enabled";
52 public static final String BINDING_PROGRAM_COMBO_BOX_SELECTED_ITEM = "programComboBox.selectedItem";
53 public static final String BINDING_RULE_LIST_COMBO_BOX_SELECTED_ITEM = "ruleListComboBox.selectedItem";
54
55
56
57
58
59 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAKVWTW8bRRgeu/lyvprmSymEkoaPJqiaQJG4hNDUCVFTOVDFQYrIAca7Y2fKeHc7OyYbWUX8AuDIEY5IXEDcOCEOnDlwQfyFCnHginjf2fWu197YhkTKZnfmfZ953mfmfSbfPiXDviI3H7EgoKrhaFHn9MG94+N3K4+4pXe5bynhaVeR8CeXJ/kTMmHH474mL5yUMH0jSt/Yceue63CnLXuzRMZ9fS65f8q51uS5dIbl+xvleHoz8BqqhRqTykL96q8/81/Yn36dJyTwgN00lLLSLyupZKhE8sLWZBZW+phtSObUgIYSTg34TuHYjmS+/w6r88fkEzJaIiMeUwCmyergJRsMkx94moy9+OAhc7h8VZOtqqKiqnidK2ozKWhDUP8MVqeW62gAo3XmsBqHYiSnde406CG8+Qfw9t6+5xnQEU2G667NpSbFS+EdIEgCOlJR7kdcaXLrQtRd+LoPOUUTmaQWENoUCdKiikGUEFaOUYU4eNrnEg6acJ0oYym1f2HiEatIswWzcV5Lx9fwex4fC/HcFBZYEr4usUo3CTOIkUtxwkwrAfax4hbdIL05jxvMVqLGX29XNNpwWuHMoW8HoK/N7VZ+Gr7F9U4G10lPuTXF6jGrZXysxPNXo/l25OfTIQuxhMWG1q7jxzLPpzWbsCRnKgzSZC6lSjiKgS8n3HwIt06TqVeieUWeTe0S9C9N+jdpsNwJGUZpwSSWTrpbHk9f2OxLHc2OgGb2n8W5337844e9VofPwtoLmaFtBgWdB6p5cHoFLn01bO+GFnLjgHmbJ6QQKmbcazmDWDmaBnKw3jVMp5hO7zP/FCCGR3//6efFD3+9QvJ7ZFy6zN5jGL9PCvpUgQqutAPv7rZhNHk2Bs8Z+B3SZLwqpOYKz7OGb9WAP1MQf7bLLVcxwIB+rjLpw3gBxw+5j4YZhQ7hadNktGla/kkA0i1nSBfzrxR++Xuu/N12S74clHP9wvBEwuH3yYhwpHC4scjI/TItccLzecN2E5fL8j0CzjfT2SSRY9wxzze61MqhCbnKRhO62yyat1Dmc2opzjQ/ElpyO5xZ02urxp7A66qiFtqbxoDV9XUQCtfYNgrgW5G025TXh0keWlhif+7h9sw2O93iCe4PD2CblgwF46+toJBEFoG0TQ1AYjI8ttze17wOfR+eAlrj+jBCWlsHLmPR4T+H19YSWet3ud5/0+Fas8OaEhmeyZAhCs4ikvLAfiSudOkwn+jwMATqlGE0WgDeuIO9B5f+7a5tRIByG/La+srW1orTkDLz/HQ6cz/i0P2zHzDPk8JiaNb3jGWDDzd30JbDT2ph1wD7cWa+9/HqBhNtuYCR94aRNwygoUdTY+1UhhfehHZdeSS8IxO+fGG4Fl5WZe33xP+tar5ZNiv1KmuoKhy7o3fSNDPrWcwIvKCS1A3WrxQ0HMnOXQgm02/aTLOVChCE6/GtLuwcPuf6IuLwZ/j4PBvh+gCcxtDzj8493gPnxqWZ3BwI4cseCC9dmsOtAdQYh72vOWDd+rgH0vpAXL7pgXB7AC5Dwgr/L7oUi+/7sPgXc8xsDaMNAAA=";
60 private static final Log log = LogFactory.getLog(RulesMenuUI.class);
61 private static final long serialVersionUID = 1L;
62
63
64
65
66
67 protected List<Object> $activeBindings = new ArrayList<Object>();
68 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
69 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
70 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
71 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
72 private boolean allComponentsCreated;
73 protected final JAXXContext delegateContext = new DefaultJAXXContext();
74
75
76
77
78
79 protected DaliHelpBroker broker;
80 protected JButton clearButton;
81 protected final RulesMenuUIHandler handler = createHandler();
82 protected JPanel menuPanel;
83 protected RulesMenuUIModel model;
84 protected ExtendedComboBox<ProgramDTO> programComboBox;
85 protected JLabel programLabel;
86 protected ExtendedComboBox<RuleListDTO> ruleListComboBox;
87 protected JLabel ruleListLabel;
88 protected JButton searchButton;
89 protected JPanel selectionButtonsPanel;
90 protected Table selectionPanel;
91
92
93
94
95
96 private RulesMenuUI $JPanel0 = this;
97 private JPanel $JPanel1;
98 private JPanel $JPanel2;
99
100
101
102
103
104 public RulesMenuUI(ApplicationUI parentUI) {
105 ApplicationUIUtil.setParentUI(this, parentUI);
106 $initialize();
107 }
108
109 public RulesMenuUI() {
110 $initialize();
111 }
112
113 public RulesMenuUI(JAXXContext parentContext) {
114 JAXXUtil.initContext(this, parentContext);
115 $initialize();
116 }
117
118 public RulesMenuUI(boolean param0) {
119 super(param0);
120 $initialize();
121 }
122
123 public RulesMenuUI(JAXXContext parentContext, boolean param1) {
124 super(param1);
125 JAXXUtil.initContext(this, parentContext);
126 $initialize();
127 }
128
129 public RulesMenuUI(LayoutManager param0) {
130 super(param0);
131 $initialize();
132 }
133
134 public RulesMenuUI(JAXXContext parentContext, LayoutManager param1) {
135 super(param1);
136 JAXXUtil.initContext(this, parentContext);
137 $initialize();
138 }
139
140 public RulesMenuUI(LayoutManager param0, boolean param1) {
141 super(param0 ,param1);
142 $initialize();
143 }
144
145 public RulesMenuUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
146 super(param1 ,param2);
147 JAXXUtil.initContext(this, parentContext);
148 $initialize();
149 }
150
151
152
153
154
155 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
156 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
157 }
158
159
160
161
162
163 @Override
164 public void applyDataBinding(String $binding) {
165 if (allComponentsCreated && $bindings.containsKey($binding)) {
166 getDataBinding($binding).applyDataBinding();
167 }
168 processDataBinding($binding);
169 }
170
171 @Override
172 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
173 super.firePropertyChange(propertyName, oldValue, newValue);
174 }
175
176 @Override
177 public Map<String, Object> get$objectMap() {
178 return $objectMap;
179 }
180
181 @Override
182 public JAXXBinding getDataBinding(String bindingId) {
183 return $bindings.get(bindingId);
184 }
185
186 @Override
187 public JAXXBinding[] getDataBindings() {
188 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
189 }
190
191 @Override
192 public Object getObjectById(String id) {
193 return $objectMap.get(id);
194 }
195
196 @Override
197 public void processDataBinding(String $binding, boolean $force) {
198 if (!$force && $activeBindings.contains($binding)) {
199 return;
200 }
201 $activeBindings.add($binding);
202 try {
203 if (allComponentsCreated && $bindings.containsKey($binding)) {
204 getDataBinding($binding).processDataBinding();
205 }
206 } finally {
207 $activeBindings.remove($binding);
208 }
209 }
210
211 @Override
212 public void processDataBinding(String $binding) {
213 processDataBinding($binding, false);
214 }
215
216 @Override
217 public void registerDataBinding(JAXXBinding binding) {
218 $bindings.put(binding.getId(), binding);
219 }
220
221 @Override
222 public void removeDataBinding(String $binding) {
223 if (allComponentsCreated && $bindings.containsKey($binding)) {
224 getDataBinding($binding).removeDataBinding();
225 }
226 }
227
228
229
230
231
232 @Override
233 public <T> T getContextValue(Class<T> clazz) {
234 return delegateContext.getContextValue(clazz, null);
235 }
236
237 @Override
238 public <T> T getContextValue(Class<T> clazz, String name) {
239 return delegateContext.getContextValue(clazz, name);
240 }
241
242 @Override
243 public JAXXContext getDelegateContext() {
244 return delegateContext;
245 }
246
247 @Override
248 public <O extends Container> O getParentContainer(Class<O> clazz) {
249 return SwingUtil.getParentContainer(this, clazz);
250 }
251
252 @Override
253 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
254 return SwingUtil.getParentContainer(source, clazz);
255 }
256
257 @Override
258 public <T> void removeContextValue(Class<T> clazz) {
259 delegateContext.removeContextValue(clazz, null);
260 }
261
262 @Override
263 public <T> void removeContextValue(Class<T> clazz, String name) {
264 delegateContext.removeContextValue(clazz, name);
265 }
266
267 @Override
268 public <T> void setContextValue(T o) {
269 delegateContext.setContextValue(o, null);
270 }
271
272 @Override
273 public <T> void setContextValue(T o, String name) {
274 delegateContext.setContextValue(o, name);
275 }
276
277
278
279
280
281 public DaliHelpBroker getBroker() {
282 return broker;
283 }
284
285 public JButton getClearButton() {
286 return clearButton;
287 }
288
289 public RulesMenuUIHandler getHandler() {
290 return handler;
291 }
292
293 public JPanel getMenuPanel() {
294 return menuPanel;
295 }
296
297 public RulesMenuUIModel getModel() {
298 return model;
299 }
300
301 public ExtendedComboBox<ProgramDTO> getProgramComboBox() {
302 return programComboBox;
303 }
304
305 public JLabel getProgramLabel() {
306 return programLabel;
307 }
308
309 public ExtendedComboBox<RuleListDTO> getRuleListComboBox() {
310 return ruleListComboBox;
311 }
312
313 public JLabel getRuleListLabel() {
314 return ruleListLabel;
315 }
316
317 public JButton getSearchButton() {
318 return searchButton;
319 }
320
321 public JPanel getSelectionButtonsPanel() {
322 return selectionButtonsPanel;
323 }
324
325 public Table getSelectionPanel() {
326 return selectionPanel;
327 }
328
329
330
331
332
333 @Override
334 public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
335 broker.installUI(component, helpId);
336 }
337
338 @Override
339 public void showHelp(String helpId) {
340 getBroker().showHelp(this, helpId);
341 }
342
343
344
345
346
347 protected JPanel get$JPanel1() {
348 return $JPanel1;
349 }
350
351 protected JPanel get$JPanel2() {
352 return $JPanel2;
353 }
354
355
356
357
358
359 protected void addChildrenToMenuPanel() {
360 if (!allComponentsCreated) {
361 return;
362 }
363 menuPanel.add(selectionPanel);
364 menuPanel.add(selectionButtonsPanel);
365 }
366
367 protected void addChildrenToSelectionButtonsPanel() {
368 if (!allComponentsCreated) {
369 return;
370 }
371 selectionButtonsPanel.add(clearButton);
372 selectionButtonsPanel.add(searchButton);
373 }
374
375 protected void addChildrenToSelectionPanel() {
376 if (!allComponentsCreated) {
377 return;
378 }
379 selectionPanel.add($JPanel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
380 selectionPanel.add($JPanel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
381 }
382
383 protected void createBroker() {
384 $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
385 }
386
387 protected void createClearButton() {
388 $objectMap.put("clearButton", clearButton = new JButton());
389
390 clearButton.setName("clearButton");
391 clearButton.setText(t("dali.action.search.clear.label"));
392 clearButton.setToolTipText(t("dali.action.search.clear.tip"));
393 clearButton.putClientProperty("applicationAction", ClearAction.class);
394 }
395
396 protected RulesMenuUIHandler createHandler() {
397 return new RulesMenuUIHandler();
398 }
399
400 protected void createMenuPanel() {
401 $objectMap.put("menuPanel", menuPanel = new JPanel());
402
403 menuPanel.setName("menuPanel");
404 menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.PAGE_AXIS));
405 }
406
407 protected void createModel() {
408 $objectMap.put("model", model = getContextValue(RulesMenuUIModel.class));
409 }
410
411 protected void createProgramComboBox() {
412 $objectMap.put("programComboBox", programComboBox = new ExtendedComboBox<ProgramDTO>(this));
413
414 programComboBox.setName("programComboBox");
415 programComboBox.setFilterable(true);
416 programComboBox.setShowDecorator(false);
417 programComboBox.setProperty("program");
418 programComboBox.setShowReset(true);
419 }
420
421 protected void createProgramLabel() {
422 $objectMap.put("programLabel", programLabel = new JLabel());
423
424 programLabel.setName("programLabel");
425 programLabel.setText(t("dali.rule.ruleList.program"));
426 }
427
428 protected void createRuleListComboBox() {
429 $objectMap.put("ruleListComboBox", ruleListComboBox = new ExtendedComboBox<RuleListDTO>(this));
430
431 ruleListComboBox.setName("ruleListComboBox");
432 ruleListComboBox.setFilterable(true);
433 ruleListComboBox.setShowDecorator(false);
434 ruleListComboBox.setProperty("ruleList");
435 ruleListComboBox.setShowReset(true);
436 }
437
438 protected void createRuleListLabel() {
439 $objectMap.put("ruleListLabel", ruleListLabel = new JLabel());
440
441 ruleListLabel.setName("ruleListLabel");
442 ruleListLabel.setText(t("dali.rule.ruleList.title"));
443 }
444
445 protected void createSearchButton() {
446 $objectMap.put("searchButton", searchButton = new JButton());
447
448 searchButton.setName("searchButton");
449 searchButton.setText(t("dali.action.search.label"));
450 searchButton.setToolTipText(t("dali.action.search.tip"));
451 searchButton.putClientProperty("applicationAction", SearchAction.class);
452 }
453
454 protected void createSelectionButtonsPanel() {
455 $objectMap.put("selectionButtonsPanel", selectionButtonsPanel = new JPanel());
456
457 selectionButtonsPanel.setName("selectionButtonsPanel");
458 selectionButtonsPanel.setLayout(new GridLayout(1,0));
459 }
460
461 protected void createSelectionPanel() {
462 $objectMap.put("selectionPanel", selectionPanel = new Table());
463
464 selectionPanel.setName("selectionPanel");
465 }
466
467
468
469
470
471 private void $completeSetup() {
472 allComponentsCreated = true;
473 if (log.isDebugEnabled()) {
474 log.debug(this);
475 }
476
477 add(menuPanel);
478 addChildrenToMenuPanel();
479 addChildrenToSelectionPanel();
480
481 $JPanel1.add(ruleListLabel, BorderLayout.PAGE_START);
482 $JPanel1.add(ruleListComboBox, BorderLayout.CENTER);
483
484 $JPanel2.add(programLabel, BorderLayout.PAGE_START);
485 $JPanel2.add(programComboBox, BorderLayout.CENTER);
486 addChildrenToSelectionButtonsPanel();
487
488
489 JAXXUtil.applyDataBinding(this, $bindings.keySet());
490
491
492 ruleListComboBox.setBeanType(RuleListDTO.class);
493 programComboBox.setBeanType(ProgramDTO.class);
494 clearButton.setAlignmentX(Component.CENTER_ALIGNMENT);
495 searchButton.setAlignmentX(Component.CENTER_ALIGNMENT);
496 menuPanel.setBorder(BorderFactory.createTitledBorder(t("dali.config.menu.title")));
497 ruleListLabel.setLabelFor(ruleListComboBox);
498 ruleListComboBox.setBean(model);
499 programLabel.setLabelFor(programComboBox);
500 programComboBox.setBean(model);
501 clearButton.setIcon(SwingUtil.createActionIcon("reset"));
502 searchButton.setIcon(SwingUtil.createActionIcon("find"));
503 }
504
505 private void $initialize() {
506 if (allComponentsCreated) {
507 return;
508 }
509 if (log.isDebugEnabled()) {
510 log.debug(this);
511 }
512 handler.beforeInit(this);
513 $objectMap.put("$JPanel0", $JPanel0);
514 createModel();
515 createBroker();
516 createMenuPanel();
517 createSelectionPanel();
518
519 $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
520
521 $JPanel1.setName("$JPanel1");
522 $JPanel1.setLayout(new BorderLayout());
523 createRuleListLabel();
524 createRuleListComboBox();
525
526 $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
527
528 $JPanel2.setName("$JPanel2");
529 $JPanel2.setLayout(new BorderLayout());
530 createProgramLabel();
531 createProgramComboBox();
532 createSelectionButtonsPanel();
533 createClearButton();
534 createSearchButton();
535
536 setName("$JPanel0");
537
538
539 $registerDefaultBindings();
540 $completeSetup();
541 handler.afterInit(this);
542 }
543
544 private void $registerDefaultBindings() {
545
546 registerDataBinding(new DefaultJAXXBinding(this, BINDING_RULE_LIST_COMBO_BOX_SELECTED_ITEM, true) {
547
548 @Override
549 public void applyDataBinding() {
550 if (model != null) {
551 model.addPropertyChangeListener("ruleList", this);
552 }
553 }
554
555 @Override
556 public void processDataBinding() {
557 if (model != null) {
558 ruleListComboBox.setSelectedItem(model.getRuleList());
559 }
560 }
561
562 @Override
563 public void removeDataBinding() {
564 if (model != null) {
565 model.removePropertyChangeListener("ruleList", this);
566 }
567 }
568 });
569 registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_COMBO_BOX_SELECTED_ITEM, true) {
570
571 @Override
572 public void applyDataBinding() {
573 if (model != null) {
574 model.addPropertyChangeListener("program", this);
575 }
576 }
577
578 @Override
579 public void processDataBinding() {
580 if (model != null) {
581 programComboBox.setSelectedItem(model.getProgram());
582 }
583 }
584
585 @Override
586 public void removeDataBinding() {
587 if (model != null) {
588 model.removePropertyChangeListener("program", this);
589 }
590 }
591 });
592 registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_COMBO_BOX_ENABLED, true) {
593
594 @Override
595 public void applyDataBinding() {
596 if (ruleListComboBox != null) {
597 ruleListComboBox.addPropertyChangeListener("selectedItem", this);
598 }
599 }
600
601 @Override
602 public void processDataBinding() {
603 if (ruleListComboBox != null) {
604 programComboBox.setEnabled(ruleListComboBox.getSelectedItem() == null);
605 }
606 }
607
608 @Override
609 public void removeDataBinding() {
610 if (ruleListComboBox != null) {
611 ruleListComboBox.removePropertyChangeListener("selectedItem", this);
612 }
613 }
614 });
615 }
616
617 }