View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.program.menu;
2   
3   /*-
4    * #%L
5    * Reef DB :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2022 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  
27  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
28  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
29  import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
30  import fr.ifremer.reefdb.dto.BooleanDTO;
31  import fr.ifremer.reefdb.dto.configuration.programStrategy.ProgramDTO;
32  import fr.ifremer.reefdb.ui.swing.ReefDbHelpBroker;
33  import fr.ifremer.reefdb.ui.swing.ReefDbUIContext;
34  import fr.ifremer.reefdb.ui.swing.content.manage.filter.element.menu.ApplyFilterUI;
35  import fr.ifremer.reefdb.ui.swing.content.manage.referential.menu.ReferentialMenuUI;
36  import fr.ifremer.reefdb.ui.swing.util.ReefDbUI;
37  import java.awt.BorderLayout;
38  import java.awt.Component;
39  import java.awt.Container;
40  import java.awt.FlowLayout;
41  import java.awt.GridBagConstraints;
42  import java.awt.Insets;
43  import java.awt.LayoutManager;
44  import java.util.ArrayList;
45  import java.util.HashMap;
46  import java.util.List;
47  import java.util.Map;
48  import java.util.TreeMap;
49  import javax.swing.BorderFactory;
50  import javax.swing.Box;
51  import javax.swing.BoxLayout;
52  import javax.swing.JButton;
53  import javax.swing.JLabel;
54  import javax.swing.JPanel;
55  import javax.swing.SwingConstants;
56  import jaxx.runtime.JAXXBinding;
57  import jaxx.runtime.JAXXContext;
58  import jaxx.runtime.JAXXObject;
59  import jaxx.runtime.JAXXObjectDescriptor;
60  import jaxx.runtime.JAXXUtil;
61  import jaxx.runtime.SwingUtil;
62  import jaxx.runtime.binding.DefaultJAXXBinding;
63  import jaxx.runtime.context.DefaultJAXXContext;
64  import jaxx.runtime.swing.Table;
65  import jaxx.runtime.swing.help.JAXXHelpUI;
66  import org.apache.commons.logging.Log;
67  import org.apache.commons.logging.LogFactory;
68  import static org.nuiton.i18n.I18n.t;
69  
70  public class ProgramsMenuUI extends JPanel implements JAXXHelpUI<ReefDbHelpBroker>, ReferentialMenuUI<ProgramsMenuUIModel, ProgramsMenuUIHandler>, JAXXObject {
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------ Constants for all public bindings ------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      public static final String BINDING_LOCAL_COMBO_SELECTED_ITEM = "localCombo.selectedItem";
77      public static final String BINDING_PROGRAM_CODE_COMBO_ENABLED = "programCodeCombo.enabled";
78      public static final String BINDING_PROGRAM_CODE_COMBO_SELECTED_ITEM = "programCodeCombo.selectedItem";
79      public static final String BINDING_PROGRAM_MNEMONIC_COMBO_ENABLED = "programMnemonicCombo.enabled";
80      public static final String BINDING_PROGRAM_MNEMONIC_COMBO_SELECTED_ITEM = "programMnemonicCombo.selectedItem";
81  
82      /*-----------------------------------------------------------------------*/
83      /*------------------------- Other static fields -------------------------*/
84      /*-----------------------------------------------------------------------*/
85  
86      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAL1WzW8bRRSfuPlyPkpI0ijQAEnaQwJoHFpxCqHNp+rUgSpJpag5wHh37EwZ725nx2Qtq4g/gT8BzvSCBCdOiAM3JA4ICfEvINQDV8R7s+tdO97YToOIlPXuzHu/93tvZn5vnv1JBnxFFh6zIKCq6mhR4XR3/ejow+Jjbukt7ltKeNpVJPzry5DMMRm143FfkxvHBXTPRe65TbfiuQ53mrxXC2TE1zXJ/RPOtSavtXpYvp87iKdXA6+qGqgxqTTUL5//lfnC/vyrDCGBB+wmIZX5bl5JJv0FkhG2JpMQ6VOWk8wpAw0lnDLwHcexTcl8/wNW4U/IZ2SoQAY9pgBMk8XeUzYYxj/wNBm+ufuAOVyuaLJdUlSUFK9wRRXnJbtIq4L6pxCfWq6jAY5WmMPKnHrKLStWoRXuVOmD8MPfg4+Hec8z4IOaDFRcm0tNdv8T3D0ES8AHi8r9hCtN3uqAvg/fW8V74LdhrBP3LEYwiUO5sbJB5BJWA62ysfE48zxZ2xFSc/Uwr8n93hMqGSfKJRjjKOa13oyGISbjSFd9sLS0cJ2I22zL7glDHLKi5K1+I9K1mIypT+Nj9sxsgRXbszWDaHb9jDXsoKKryVpTqk+qzFaizG83ZxvtM1rkzKHbAeRuc9s4b7hBK3Bjq72TQnEiWvlNWOWY0xv4uJFqYyLg+GKrTSPGrZQY05H/nsMrriOs1jjL59q1xkrsrsWLtVHV2nX81vonqzNqSc5UaKTJVMsChKNomIvtx3wwt06SqdvRvCLXW/YD6BRNdCoRkr5jMqCqMAwb6Lhd2vZhKhS12TOihoBm9p+ZqV+//+PbnYaSzUDsa6mmTUIMCgOl8+BUCgz9UihjVS1kbo95q8ckG1bMqPRcCrGDaBrIQbyX0Z2iO73H/BOAGBj6/YcfZz7+5QrJ7OA+ZfYOQ/s8yeoTBVVwpR14d+4aRmOnw/CcgP9+2NThQcSTo+FbVeFnHOxPt7jlKgYYoFclJn0Yz+L4PvexMUSm/bi9NRmqG0l7GkDp5lJKF/MvZn/6e+rgm7uN8vVBOq+ca56UcOARGRSOFA43rSBS+VTpH/V8XrXdRM3T9J2Awk+cPZWRCq6a5522avWhuLrKRnFdr2+Yt7DMNWopzjQ/FFpyO5xZ0kuLkQaC9JVEOdQ4jSaLy8tQKoySNzXAt/ukTeW8LoQycKwlntUdXKWxeqJPT3GBeADrtBBxiPQ2/NmOVNc4pBFpEsYeSIyFtLmd17wCMhFuBlrmOu8XEGhpGQgNR0egBttFhOPnhzZZXCz/yfpZGUyqMBdVoUEh7qcW2KaxaJPdblyudCpD1LDbyhAFgTfu4AmEK85KPU1kEeSgCX1peX5tbd6pSpm6j9oawsUqOZPKoYdqOnAK0/ikNpj/q6Jvt+2LC1Yzte11Yw/SOvkRXo+ExfBAr5tjDU2uvok9L/ykFkoSpDDCzHceL0nQoRoSa6o9H1U7NKFhC6Smc1IZXl1GtevKQ+EdGofXOzho4aWl2NyIXzSz6fqBidQptf6ScOw4s1dTiabmNJtqek42LdeEbumgqktWc8GYXH3PZprNF4Ek3EHeb8Puw+dUV0Qc/hofz9IR5nrgNIyN9bDm8Q44C5dmcrMnhO86ICxdmsObl+ZAL81hpYcVGWFSlB3sm0cdkG71xOXnDgjv9sClX1jhBfhSLH7rwuJfKUGpOHQQAAA=";
87      private static final Log log = LogFactory.getLog(ProgramsMenuUI.class);
88      private static final long serialVersionUID = 1L;
89  
90      /*-----------------------------------------------------------------------*/
91      /*--------------------------- Internal states ---------------------------*/
92      /*-----------------------------------------------------------------------*/
93  
94      protected List<Object> $activeBindings = new ArrayList<Object>();
95      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
96      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
97      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
98      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
99      private boolean allComponentsCreated;
100     protected final JAXXContext delegateContext = new DefaultJAXXContext();
101 
102     /*-----------------------------------------------------------------------*/
103     /*------------------------ Protected components  ------------------------*/
104     /*-----------------------------------------------------------------------*/
105 
106     protected ApplyFilterUI applyFilterUI;
107     protected ReefDbHelpBroker broker;
108     protected JButton clearButton;
109     protected final ProgramsMenuUIHandler handler = createHandler();
110     protected ExtendedComboBox<BooleanDTO> localCombo;
111     protected JLabel localLabel;
112     protected JPanel localPanel;
113     protected JPanel menuPanel;
114     protected ProgramsMenuUIModel model;
115     protected ExtendedComboBox<ProgramDTO> programCodeCombo;
116     protected JLabel programCodeLabel;
117     protected ExtendedComboBox<ProgramDTO> programMnemonicCombo;
118     protected JLabel programMnemonicLabel;
119     protected JButton searchButton;
120     protected JPanel selectionButtonsPanel;
121     protected Table selectionPanel;
122 
123     /*-----------------------------------------------------------------------*/
124     /*------------------------- Private components  -------------------------*/
125     /*-----------------------------------------------------------------------*/
126 
127     private ProgramsMenuUI $JPanel0 = this;
128     private JPanel $JPanel1;
129     private JPanel $JPanel2;
130 
131     /*-----------------------------------------------------------------------*/
132     /*---------------------------- Constructors  ----------------------------*/
133     /*-----------------------------------------------------------------------*/
134 
135     public ProgramsMenuUI(ApplicationUI parentUI) {
136         ApplicationUIUtil.setParentUI(this, parentUI);
137             $initialize();
138     }
139 
140     public ProgramsMenuUI(LayoutManager param0, boolean param1) {
141         super(param0 ,param1);
142         $initialize();
143     }
144 
145     public ProgramsMenuUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
146         super(param1 ,param2);
147         JAXXUtil.initContext(this, parentContext);
148         $initialize();
149     }
150 
151     public ProgramsMenuUI(boolean param0) {
152         super(param0);
153         $initialize();
154     }
155 
156     public ProgramsMenuUI(JAXXContext parentContext, boolean param1) {
157         super(param1);
158         JAXXUtil.initContext(this, parentContext);
159         $initialize();
160     }
161 
162     public ProgramsMenuUI() {
163         $initialize();
164     }
165 
166     public ProgramsMenuUI(JAXXContext parentContext) {
167         JAXXUtil.initContext(this, parentContext);
168         $initialize();
169     }
170 
171     public ProgramsMenuUI(LayoutManager param0) {
172         super(param0);
173         $initialize();
174     }
175 
176     public ProgramsMenuUI(JAXXContext parentContext, LayoutManager param1) {
177         super(param1);
178         JAXXUtil.initContext(this, parentContext);
179         $initialize();
180     }
181 
182     /*-----------------------------------------------------------------------*/
183     /*--------------------------- Statics methods ---------------------------*/
184     /*-----------------------------------------------------------------------*/
185 
186     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
187         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
188     }
189 
190     /*-----------------------------------------------------------------------*/
191     /*---------------------- JAXXObject implementation ----------------------*/
192     /*-----------------------------------------------------------------------*/
193 
194     @Override
195     public void applyDataBinding(String $binding) {
196         if (allComponentsCreated && $bindings.containsKey($binding)) {
197             getDataBinding($binding).applyDataBinding();
198         }
199         processDataBinding($binding);
200     }
201 
202     @Override
203     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
204         super.firePropertyChange(propertyName, oldValue, newValue);
205     }
206 
207     @Override
208     public Map<String, Object> get$objectMap() {
209         return $objectMap;
210     }
211 
212     @Override
213     public JAXXBinding getDataBinding(String bindingId) {
214         return $bindings.get(bindingId);
215     }
216 
217     @Override
218     public JAXXBinding[] getDataBindings() {
219         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
220     }
221 
222     @Override
223     public Object getObjectById(String id) {
224         return $objectMap.get(id);
225     }
226 
227     @Override
228     public void processDataBinding(String $binding, boolean $force) {
229         if (!$force && $activeBindings.contains($binding)) { 
230             return;
231         }
232         $activeBindings.add($binding);
233         try {
234             if (allComponentsCreated && $bindings.containsKey($binding)) {
235                 getDataBinding($binding).processDataBinding();
236             }
237         } finally {
238             $activeBindings.remove($binding);
239         }
240     }
241 
242     @Override
243     public void processDataBinding(String $binding) {
244         processDataBinding($binding, false);
245     }
246 
247     @Override
248     public void registerDataBinding(JAXXBinding binding) {
249         $bindings.put(binding.getId(), binding);
250     }
251 
252     @Override
253     public void removeDataBinding(String $binding) {
254         if (allComponentsCreated && $bindings.containsKey($binding)) {
255             getDataBinding($binding).removeDataBinding();
256         }
257     }
258 
259     /*-----------------------------------------------------------------------*/
260     /*--------------------- JAXXContext implementation  ---------------------*/
261     /*-----------------------------------------------------------------------*/
262 
263     @Override
264     public <T> T getContextValue(Class<T> clazz) {
265         return delegateContext.getContextValue(clazz, null);
266     }
267 
268     @Override
269     public <T> T getContextValue(Class<T> clazz, String name) {
270         return delegateContext.getContextValue(clazz, name);
271     }
272 
273     @Override
274     public JAXXContext getDelegateContext() {
275         return delegateContext;
276     }
277 
278     @Override
279     public <O extends Container> O getParentContainer(Class<O> clazz) {
280         return SwingUtil.getParentContainer(this, clazz);
281     }
282 
283     @Override
284     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
285         return SwingUtil.getParentContainer(source, clazz);
286     }
287 
288     @Override
289     public <T> void removeContextValue(Class<T> clazz) {
290         delegateContext.removeContextValue(clazz, null);
291     }
292 
293     @Override
294     public <T> void removeContextValue(Class<T> clazz, String name) {
295         delegateContext.removeContextValue(clazz, name);
296     }
297 
298     @Override
299     public <T> void setContextValue(T o) {
300         delegateContext.setContextValue(o, null);
301     }
302 
303     @Override
304     public <T> void setContextValue(T o, String name) {
305         delegateContext.setContextValue(o, name);
306     }
307 
308     /*-----------------------------------------------------------------------*/
309     /*----------------------- Public acessor methods  -----------------------*/
310     /*-----------------------------------------------------------------------*/
311 
312     public ApplyFilterUI getApplyFilterUI() {
313         return applyFilterUI;
314     }
315 
316     public ReefDbHelpBroker getBroker() {
317         return broker;
318     }
319 
320     public JButton getClearButton() {
321         return clearButton;
322     }
323 
324     public ProgramsMenuUIHandler getHandler() {
325         return handler;
326     }
327 
328     public ExtendedComboBox<BooleanDTO> getLocalCombo() {
329         return localCombo;
330     }
331 
332     public JLabel getLocalLabel() {
333         return localLabel;
334     }
335 
336     public JPanel getLocalPanel() {
337         return localPanel;
338     }
339 
340     public JPanel getMenuPanel() {
341         return menuPanel;
342     }
343 
344     public ProgramsMenuUIModel getModel() {
345         return model;
346     }
347 
348     public ExtendedComboBox<ProgramDTO> getProgramCodeCombo() {
349         return programCodeCombo;
350     }
351 
352     public JLabel getProgramCodeLabel() {
353         return programCodeLabel;
354     }
355 
356     public ExtendedComboBox<ProgramDTO> getProgramMnemonicCombo() {
357         return programMnemonicCombo;
358     }
359 
360     public JLabel getProgramMnemonicLabel() {
361         return programMnemonicLabel;
362     }
363 
364     public JButton getSearchButton() {
365         return searchButton;
366     }
367 
368     public JPanel getSelectionButtonsPanel() {
369         return selectionButtonsPanel;
370     }
371 
372     public Table getSelectionPanel() {
373         return selectionPanel;
374     }
375 
376     /*-----------------------------------------------------------------------*/
377     /*---------------------------- Other methods ----------------------------*/
378     /*-----------------------------------------------------------------------*/
379 
380     @Override
381     public void registerHelpId(ReefDbHelpBroker broker, Component component, String helpId) {
382         broker.installUI(component, helpId);
383     }
384 
385     @Override
386     public void showHelp(String helpId) {
387         getBroker().showHelp(this, helpId);
388     }
389 
390     /*-----------------------------------------------------------------------*/
391     /*--------------------- Protected acessors methods  ---------------------*/
392     /*-----------------------------------------------------------------------*/
393 
394     protected JPanel get$JPanel1() {
395         return $JPanel1;
396     }
397 
398     protected JPanel get$JPanel2() {
399         return $JPanel2;
400     }
401 
402     /*-----------------------------------------------------------------------*/
403     /*--------------------- Components creation methods ---------------------*/
404     /*-----------------------------------------------------------------------*/
405 
406     protected void addChildrenToLocalPanel() {
407         if (!allComponentsCreated) {
408             return;
409         }
410         localPanel.add(localLabel, BorderLayout.PAGE_START);
411         localPanel.add(localCombo, BorderLayout.CENTER);
412     }
413 
414     protected void addChildrenToMenuPanel() {
415         if (!allComponentsCreated) {
416             return;
417         }
418         menuPanel.add(applyFilterUI);
419         menuPanel.add(selectionPanel);
420         menuPanel.add(selectionButtonsPanel);
421     }
422 
423     protected void addChildrenToSelectionButtonsPanel() {
424         if (!allComponentsCreated) {
425             return;
426         }
427         selectionButtonsPanel.add(clearButton);
428         selectionButtonsPanel.add(searchButton);
429     }
430 
431     protected void addChildrenToSelectionPanel() {
432         if (!allComponentsCreated) {
433             return;
434         }
435         selectionPanel.add(localPanel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
436         selectionPanel.add($JPanel1, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
437         selectionPanel.add($JPanel2, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
438     }
439 
440     protected void createApplyFilterUI() {
441         $objectMap.put("applyFilterUI", applyFilterUI = new ApplyFilterUI(this));
442         
443         applyFilterUI.setName("applyFilterUI");
444     }
445 
446     protected void createBroker() {
447         $objectMap.put("broker", broker = new ReefDbHelpBroker("reefdb.home.help"));
448     }
449 
450     protected void createClearButton() {
451         $objectMap.put("clearButton", clearButton = new JButton());
452         
453         clearButton.setName("clearButton");
454         clearButton.setText(t("reefdb.action.search.clear.label"));
455         clearButton.setToolTipText(t("reefdb.action.search.clear.tip"));
456         clearButton.putClientProperty("applicationAction", ClearAction.class);
457     }
458 
459     protected ProgramsMenuUIHandler createHandler() {
460         return new ProgramsMenuUIHandler();
461     }
462 
463     protected void createLocalCombo() {
464         $objectMap.put("localCombo", localCombo = new ExtendedComboBox<BooleanDTO>(this));
465         
466         localCombo.setName("localCombo");
467         localCombo.setFilterable(true);
468         localCombo.setShowDecorator(false);
469         localCombo.setProperty("isLocal");
470         localCombo.setShowReset(true);
471     }
472 
473     protected void createLocalLabel() {
474         $objectMap.put("localLabel", localLabel = new JLabel());
475         
476         localLabel.setName("localLabel");
477         localLabel.setText(t("reefdb.filter.filterElement.local"));
478     }
479 
480     protected void createLocalPanel() {
481         $objectMap.put("localPanel", localPanel = new JPanel());
482         
483         localPanel.setName("localPanel");
484         localPanel.setLayout(new BorderLayout());
485     }
486 
487     protected void createMenuPanel() {
488         $objectMap.put("menuPanel", menuPanel = new JPanel());
489         
490         menuPanel.setName("menuPanel");
491         menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.PAGE_AXIS));
492     }
493 
494     protected void createModel() {
495         $objectMap.put("model", model = getContextValue(ProgramsMenuUIModel.class));
496     }
497 
498     protected void createProgramCodeCombo() {
499         $objectMap.put("programCodeCombo", programCodeCombo = new ExtendedComboBox<ProgramDTO>(this));
500         
501         programCodeCombo.setName("programCodeCombo");
502         programCodeCombo.setFilterable(true);
503         programCodeCombo.setShowDecorator(false);
504         programCodeCombo.setProperty("program");
505         programCodeCombo.setShowReset(true);
506     }
507 
508     protected void createProgramCodeLabel() {
509         $objectMap.put("programCodeLabel", programCodeLabel = new JLabel());
510         
511         programCodeLabel.setName("programCodeLabel");
512         programCodeLabel.setText(t("reefdb.property.program.code"));
513     }
514 
515     protected void createProgramMnemonicCombo() {
516         $objectMap.put("programMnemonicCombo", programMnemonicCombo = new ExtendedComboBox<ProgramDTO>(this));
517         
518         programMnemonicCombo.setName("programMnemonicCombo");
519         programMnemonicCombo.setFilterable(true);
520         programMnemonicCombo.setShowDecorator(false);
521         programMnemonicCombo.setProperty("program");
522         programMnemonicCombo.setShowReset(true);
523     }
524 
525     protected void createProgramMnemonicLabel() {
526         $objectMap.put("programMnemonicLabel", programMnemonicLabel = new JLabel());
527         
528         programMnemonicLabel.setName("programMnemonicLabel");
529         programMnemonicLabel.setText(t("reefdb.property.program.name"));
530     }
531 
532     protected void createSearchButton() {
533         $objectMap.put("searchButton", searchButton = new JButton());
534         
535         searchButton.setName("searchButton");
536         searchButton.setText(t("reefdb.action.search.label"));
537         searchButton.setToolTipText(t("reefdb.action.search.tip"));
538         searchButton.putClientProperty("applicationAction", SearchAction.class);
539     }
540 
541     protected void createSelectionButtonsPanel() {
542         $objectMap.put("selectionButtonsPanel", selectionButtonsPanel = new JPanel());
543         
544         selectionButtonsPanel.setName("selectionButtonsPanel");
545         selectionButtonsPanel.setLayout(new FlowLayout());
546     }
547 
548     protected void createSelectionPanel() {
549         $objectMap.put("selectionPanel", selectionPanel = new Table());
550         
551         selectionPanel.setName("selectionPanel");
552     }
553 
554     /*-----------------------------------------------------------------------*/
555     /*------------------------ Internal jaxx methods ------------------------*/
556     /*-----------------------------------------------------------------------*/
557 
558     private void $completeSetup() {
559         allComponentsCreated = true;
560         if (log.isDebugEnabled()) {
561             log.debug(this);
562         }
563         // inline complete setup of $JPanel0
564         add(menuPanel);
565         addChildrenToMenuPanel();
566         addChildrenToSelectionPanel();
567         addChildrenToLocalPanel();
568         // inline complete setup of $JPanel1
569         $JPanel1.add(programCodeLabel, BorderLayout.PAGE_START);
570         $JPanel1.add(programCodeCombo, BorderLayout.CENTER);
571         // inline complete setup of $JPanel2
572         $JPanel2.add(programMnemonicLabel, BorderLayout.PAGE_START);
573         $JPanel2.add(programMnemonicCombo, BorderLayout.CENTER);
574         addChildrenToSelectionButtonsPanel();
575         
576         // apply 5 data bindings
577         JAXXUtil.applyDataBinding(this, $bindings.keySet());
578         
579         // apply 19 property setters
580         localCombo.setBeanType(BooleanDTO.class);
581         programCodeCombo.setBeanType(ProgramDTO.class);
582         programMnemonicCombo.setBeanType(ProgramDTO.class);
583         clearButton.setAlignmentX(Component.CENTER_ALIGNMENT);
584         searchButton.setAlignmentX(Component.CENTER_ALIGNMENT);
585         selectionPanel.setBorder(BorderFactory.createTitledBorder(t("reefdb.config.menu.title")));
586         localLabel.setLabelFor(localCombo);
587         localCombo.setBean(model);
588         programCodeLabel.setLabelFor(programCodeCombo);
589         programCodeCombo.setBean(model);
590         programMnemonicLabel.setLabelFor(programMnemonicCombo);
591         programMnemonicCombo.setBean(model);
592         clearButton.setIcon(SwingUtil.createActionIcon("reset"));
593         searchButton.setIcon(SwingUtil.createActionIcon("find"));
594     }
595 
596     private void $initialize() {
597         if (allComponentsCreated) {
598             return;
599         }
600         if (log.isDebugEnabled()) {
601             log.debug(this);
602         }
603         handler.beforeInit(this);
604         $objectMap.put("$JPanel0", $JPanel0);
605         createModel();
606         createBroker();
607         createMenuPanel();
608         createApplyFilterUI();
609         createSelectionPanel();
610         createLocalPanel();
611         createLocalLabel();
612         createLocalCombo();
613         // inline creation of $JPanel1
614         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
615         
616         $JPanel1.setName("$JPanel1");
617         $JPanel1.setLayout(new BorderLayout());
618         createProgramCodeLabel();
619         createProgramCodeCombo();
620         // inline creation of $JPanel2
621         $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
622         
623         $JPanel2.setName("$JPanel2");
624         $JPanel2.setLayout(new BorderLayout());
625         createProgramMnemonicLabel();
626         createProgramMnemonicCombo();
627         createSelectionButtonsPanel();
628         createClearButton();
629         createSearchButton();
630         // inline creation of $JPanel0
631         setName("$JPanel0");
632         
633         // registers 5 data bindings
634         $registerDefaultBindings();
635         $completeSetup();
636         handler.afterInit(this);
637     }
638 
639     private void $registerDefaultBindings() {
640         // register 5 data bindings
641         registerDataBinding(new DefaultJAXXBinding(this, BINDING_LOCAL_COMBO_SELECTED_ITEM, true) {
642         
643             @Override
644             public void applyDataBinding() {
645                 if (model != null) {
646                     model.addPropertyChangeListener("isLocal", this);
647                 }
648             }
649         
650             @Override
651             public void processDataBinding() {
652                 if (model != null) {
653                     localCombo.setSelectedItem(model.getIsLocal());
654                 }
655             }
656         
657             @Override
658             public void removeDataBinding() {
659                 if (model != null) {
660                     model.removePropertyChangeListener("isLocal", this);
661                 }
662             }
663         });
664         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_CODE_COMBO_SELECTED_ITEM, true) {
665         
666             @Override
667             public void applyDataBinding() {
668                 if (model != null) {
669                     model.addPropertyChangeListener("program", this);
670                 }
671             }
672         
673             @Override
674             public void processDataBinding() {
675                 if (model != null) {
676                     programCodeCombo.setSelectedItem(model.getProgram());
677                 }
678             }
679         
680             @Override
681             public void removeDataBinding() {
682                 if (model != null) {
683                     model.removePropertyChangeListener("program", this);
684                 }
685             }
686         });
687         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_CODE_COMBO_ENABLED, true) {
688         
689             @Override
690             public void applyDataBinding() {
691                 if (programMnemonicCombo != null) {
692                     programMnemonicCombo.addPropertyChangeListener("selectedItem", this);
693                 }
694             }
695         
696             @Override
697             public void processDataBinding() {
698                 if (programMnemonicCombo != null) {
699                     programCodeCombo.setEnabled(programMnemonicCombo.getSelectedItem() == null);
700                 }
701             }
702         
703             @Override
704             public void removeDataBinding() {
705                 if (programMnemonicCombo != null) {
706                     programMnemonicCombo.removePropertyChangeListener("selectedItem", this);
707                 }
708             }
709         });
710         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_MNEMONIC_COMBO_SELECTED_ITEM, true) {
711         
712             @Override
713             public void applyDataBinding() {
714                 if (model != null) {
715                     model.addPropertyChangeListener("program", this);
716                 }
717             }
718         
719             @Override
720             public void processDataBinding() {
721                 if (model != null) {
722                     programMnemonicCombo.setSelectedItem(model.getProgram());
723                 }
724             }
725         
726             @Override
727             public void removeDataBinding() {
728                 if (model != null) {
729                     model.removePropertyChangeListener("program", this);
730                 }
731             }
732         });
733         registerDataBinding(new DefaultJAXXBinding(this, BINDING_PROGRAM_MNEMONIC_COMBO_ENABLED, true) {
734         
735             @Override
736             public void applyDataBinding() {
737                 if (programCodeCombo != null) {
738                     programCodeCombo.addPropertyChangeListener("selectedItem", this);
739                 }
740             }
741         
742             @Override
743             public void processDataBinding() {
744                 if (programCodeCombo != null) {
745                     programMnemonicCombo.setEnabled(programCodeCombo.getSelectedItem() == null);
746                 }
747             }
748         
749             @Override
750             public void removeDataBinding() {
751                 if (programCodeCombo != null) {
752                     programCodeCombo.removePropertyChangeListener("selectedItem", this);
753                 }
754             }
755         });
756     }
757 
758 }