View Javadoc
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      /*------------------ Constants for all public bindings ------------------*/
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      /*------------------------- Other static fields -------------------------*/
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      /*--------------------------- Internal states ---------------------------*/
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      /*------------------------ Protected components  ------------------------*/
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      /*------------------------- Private components  -------------------------*/
94      /*-----------------------------------------------------------------------*/
95  
96      private RulesMenuUI $JPanel0 = this;
97      private JPanel $JPanel1;
98      private JPanel $JPanel2;
99  
100     /*-----------------------------------------------------------------------*/
101     /*---------------------------- Constructors  ----------------------------*/
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     /*--------------------------- Statics methods ---------------------------*/
153     /*-----------------------------------------------------------------------*/
154 
155     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
156         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
157     }
158 
159     /*-----------------------------------------------------------------------*/
160     /*---------------------- JAXXObject implementation ----------------------*/
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     /*--------------------- JAXXContext implementation  ---------------------*/
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     /*----------------------- Public acessor methods  -----------------------*/
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     /*---------------------------- Other methods ----------------------------*/
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     /*--------------------- Protected acessors methods  ---------------------*/
345     /*-----------------------------------------------------------------------*/
346 
347     protected JPanel get$JPanel1() {
348         return $JPanel1;
349     }
350 
351     protected JPanel get$JPanel2() {
352         return $JPanel2;
353     }
354 
355     /*-----------------------------------------------------------------------*/
356     /*--------------------- Components creation methods ---------------------*/
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     /*------------------------ Internal jaxx methods ------------------------*/
469     /*-----------------------------------------------------------------------*/
470 
471     private void $completeSetup() {
472         allComponentsCreated = true;
473         if (log.isDebugEnabled()) {
474             log.debug(this);
475         }
476         // inline complete setup of $JPanel0
477         add(menuPanel);
478         addChildrenToMenuPanel();
479         addChildrenToSelectionPanel();
480         // inline complete setup of $JPanel1
481         $JPanel1.add(ruleListLabel, BorderLayout.PAGE_START);
482         $JPanel1.add(ruleListComboBox, BorderLayout.CENTER);
483         // inline complete setup of $JPanel2
484         $JPanel2.add(programLabel, BorderLayout.PAGE_START);
485         $JPanel2.add(programComboBox, BorderLayout.CENTER);
486         addChildrenToSelectionButtonsPanel();
487         
488         // apply 3 data bindings
489         JAXXUtil.applyDataBinding(this, $bindings.keySet());
490         
491         // apply 15 property setters
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         // inline creation of $JPanel1
519         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
520         
521         $JPanel1.setName("$JPanel1");
522         $JPanel1.setLayout(new BorderLayout());
523         createRuleListLabel();
524         createRuleListComboBox();
525         // inline creation of $JPanel2
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         // inline creation of $JPanel0
536         setName("$JPanel0");
537         
538         // registers 3 data bindings
539         $registerDefaultBindings();
540         $completeSetup();
541         handler.afterInit(this);
542     }
543 
544     private void $registerDefaultBindings() {
545         // register 3 data bindings
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 }