View Javadoc
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      /*------------------ Constants for all public bindings ------------------*/
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      /*------------------------- Other static fields -------------------------*/
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      /*--------------------------- Internal states ---------------------------*/
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      /*------------------------ Protected components  ------------------------*/
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      /*------------------------- Private components  -------------------------*/
96      /*-----------------------------------------------------------------------*/
97  
98      private ProgramsMenuUI $JPanel0 = this;
99      private JPanel $JPanel1;
100     private JPanel $JPanel2;
101 
102     /*-----------------------------------------------------------------------*/
103     /*---------------------------- Constructors  ----------------------------*/
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     /*--------------------------- Statics methods ---------------------------*/
155     /*-----------------------------------------------------------------------*/
156 
157     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
158         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
159     }
160 
161     /*-----------------------------------------------------------------------*/
162     /*---------------------- JAXXObject implementation ----------------------*/
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     /*--------------------- JAXXContext implementation  ---------------------*/
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     /*----------------------- Public acessor methods  -----------------------*/
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     /*---------------------------- Other methods ----------------------------*/
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     /*--------------------- Protected acessors methods  ---------------------*/
351     /*-----------------------------------------------------------------------*/
352 
353     protected JPanel get$JPanel1() {
354         return $JPanel1;
355     }
356 
357     protected JPanel get$JPanel2() {
358         return $JPanel2;
359     }
360 
361     /*-----------------------------------------------------------------------*/
362     /*--------------------- Components creation methods ---------------------*/
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     /*------------------------ Internal jaxx methods ------------------------*/
482     /*-----------------------------------------------------------------------*/
483 
484     private void $completeSetup() {
485         allComponentsCreated = true;
486         if (log.isDebugEnabled()) {
487             log.debug(this);
488         }
489         // inline complete setup of $JPanel0
490         add(menuPanel);
491         addChildrenToMenuPanel();
492         addChildrenToSelectionPanel();
493         // inline complete setup of $JPanel1
494         $JPanel1.add(programCodeLabel, BorderLayout.PAGE_START);
495         $JPanel1.add(programCodeCombo, BorderLayout.CENTER);
496         // inline complete setup of $JPanel2
497         $JPanel2.add(programMnemonicLabel, BorderLayout.PAGE_START);
498         $JPanel2.add(programMnemonicCombo, BorderLayout.CENTER);
499         addChildrenToSelectionButtonsPanel();
500         
501         // apply 4 data bindings
502         JAXXUtil.applyDataBinding(this, $bindings.keySet());
503         
504         // apply 15 property setters
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         // inline creation of $JPanel1
533         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
534         
535         $JPanel1.setName("$JPanel1");
536         $JPanel1.setLayout(new BorderLayout());
537         createProgramCodeLabel();
538         createProgramCodeCombo();
539         // inline creation of $JPanel2
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         // inline creation of $JPanel0
550         setName("$JPanel0");
551         
552         // registers 4 data bindings
553         $registerDefaultBindings();
554         $completeSetup();
555         handler.afterInit(this);
556     }
557 
558     private void $registerDefaultBindings() {
559         // register 4 data bindings
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 }