View Javadoc
1   package fr.ifremer.dali.ui.swing.content.synchro.program;
2   
3   import fr.ifremer.dali.dto.SearchDateDTO;
4   import fr.ifremer.dali.dto.configuration.programStrategy.ProgramDTO;
5   import fr.ifremer.dali.service.StatusFilter;
6   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
7   import fr.ifremer.dali.ui.swing.DaliUIContext;
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.ExtendedBeanDoubleList;
12  import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
13  import fr.ifremer.quadrige3.ui.swing.component.date.JDatePicker;
14  import java.awt.BorderLayout;
15  import java.awt.Component;
16  import java.awt.Container;
17  import java.awt.GridBagConstraints;
18  import java.awt.GridLayout;
19  import java.awt.Insets;
20  import java.awt.LayoutManager;
21  import java.awt.event.ActionEvent;
22  import java.awt.event.ActionListener;
23  import java.awt.event.ItemEvent;
24  import java.awt.event.ItemListener;
25  import java.util.ArrayList;
26  import java.util.Collection;
27  import java.util.HashMap;
28  import java.util.List;
29  import java.util.Map;
30  import java.util.TreeMap;
31  import javax.swing.BorderFactory;
32  import javax.swing.BoxLayout;
33  import javax.swing.JButton;
34  import javax.swing.JCheckBox;
35  import javax.swing.JLabel;
36  import javax.swing.JPanel;
37  import javax.swing.JSeparator;
38  import javax.swing.SwingConstants;
39  import jaxx.runtime.JAXXBinding;
40  import jaxx.runtime.JAXXContext;
41  import jaxx.runtime.JAXXObject;
42  import jaxx.runtime.JAXXObjectDescriptor;
43  import jaxx.runtime.JAXXUtil;
44  import jaxx.runtime.SwingUtil;
45  import jaxx.runtime.binding.DefaultJAXXBinding;
46  import jaxx.runtime.context.DefaultJAXXContext;
47  import jaxx.runtime.swing.Table;
48  import jaxx.runtime.swing.help.JAXXHelpUI;
49  import org.apache.commons.logging.Log;
50  import org.apache.commons.logging.LogFactory;
51  import static org.nuiton.i18n.I18n.t;
52  
53  public class ProgramSelectUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ProgramSelectUIModel, ProgramSelectUIHandler>, JAXXObject {
54  
55      /*-----------------------------------------------------------------------*/
56      /*------------------ Constants for all public bindings ------------------*/
57      /*-----------------------------------------------------------------------*/
58  
59      public static final String BINDING_ENABLE_PHOTO_CHECK_BOX_SELECTED = "enablePhotoCheckBox.selected";
60      public static final String BINDING_END_DATE_EDITOR_DATE = "endDateEditor.date";
61      public static final String BINDING_ONLY_DIRTY_CHECK_BOX_SELECTED = "onlyDirtyCheckBox.selected";
62      public static final String BINDING_SEARCH_DATE_COMBO_SELECTED_ITEM = "searchDateCombo.selectedItem";
63      public static final String BINDING_SELECT_BOUTON_ENABLED = "selectBouton.enabled";
64      public static final String BINDING_START_DATE_EDITOR_DATE = "startDateEditor.date";
65  
66      /*-----------------------------------------------------------------------*/
67      /*------------------------- Other static fields -------------------------*/
68      /*-----------------------------------------------------------------------*/
69  
70      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAALVXW28bRRQeu0kaOy5tmib0fk1FolabFgSqKJTUN5rIaaI6SBURKuPdiT3tene7O9vaREX8BH4CvPOCxBtPiAeeeeAF8RcQAsQbQpwze3fW9paISHHjmXO++c799KtfyaRjk0uPaa+n2K4heJcp63cfPtxsPWaqqDJHtbklTJt4P7k8ye+QGS08dwS5stNA9RVffaVidi3TYEZM+3aDFB3R15nTYUwIci6poTrOSjO8vt2zXDtADUmloX7x+2/5z7XPvswT0rOA3Skw5eI4rciSiQbJc02Q4/DSM7qiU6MNNGxutIHvETyr6NRx7tMue0o+JYcbZMqiNoAJcjm7yRJD6vcsQY5attm2abfJdPDvB2uCrO7aCt+1WZfZikZ1rrhccZ4DCUU1DQGYitM31I5tKr6qspWEsCwJPyXIZNfUmC5I7aCQG4gT4U61bPMJswV5bShwFb7dA52ylIxU5wJ7BRWuU+e6QJzFQRyH2c+4ypS4WAyEG1xwqvssK8AO8u4ERkhxBdchzDoS56YRKc3scp01PTsFmZXCGGKlbJo6ozHJktUxhemL4tnp6G56cX2LGky/AWmCED3fXu8UhQqh7OHFbdrSGYieTCShpyHvUPJcqDAPgFzHc9+yBm1h/JIvyUPUuBgqnnBkoJgW18O7q0m5Wd/7VdOFRxrcgdStxHz/1KWazdvsjXiG+KmstMBJSq0H+aIxrQxfIpTkKyXTQtc7oUsuJ80sLa43GVQOhbIA5ywkrAtvUPhaFHJmSL9gZCodpj4pmz1wWEI1OE9qzpqG3q9yW/Tj968nhYoaFSwifCF5W8DbpE/fDC+POozaaqcKIlD2Lcitd/+TR6Wyzy6OLqgtELymcfCKILeyoiNpZR1Vt7gKRZgEnqaGNsykI0AoehIP7wwo+1VwM3RWlPUllRoq08umK6C5kLlEiMqugFOUrEQKXvJ6Cnj2vn9vkzOJuoGxoERjIerbuR0yabs69oCTO/snyQO48mbIyYEZgoDy9p+FuZ++/eWbejA4TsPb86misbkHDR3KyYL+xfHpo97UwP6zskGt2zuk4Bkmh+LZFGJN/xrIwXuzUfu6R50OQEwe/vm77xc+/vEQyddJUTepVqcov0YKomODF0xd61nvrUpGpefT8HkMficgnXdlx8SKEfDdduGfIyD/vMpUU1YXDIddqjtwXsDzB8zBOeyLTmBiQv/ak/PjRQ9cdzbFdSH/VuGHv+aaX68G7suBOaeGikcunPyQTHFD5waTk9cfqqmTdsZymKuZ0fBMG6cEBuqxwXrye/em/Gzu81ZOkFceeYHaNOqm6kKwpvbQD2A3qnwkDcK/HiH+TKyixkBDIEr85i1jw2Bd0+CqIGfkcIMShe+K96jSDW+LVI6sNRzKZPoZiGIJY1RYD4JzfL8yxMjri7C1LO1dkuFS2kw0k+PAWVpWuFPrWqK/tJxi1kANWmPsOjTaLq/+h9k15V2nW+XdpRKMd5VxBPPQdjqmzT+BB6l+V+dtoyvXtFf3mtiHKjCcBGS4o1Rq97drD16EbM5728fANhSO5TRm6UP7/6N4LpVisACkMUzdDsYRLLxcF1nAcy/ttkzLtWpBWvp6036r7EOFDtBxUnvQXIe3O+CWjvC2v21pvH/5iuuwDVcXvOmXQUBjoHNBuQrY7ra55alfHR1exTM4zYf7N6dxDpzAPdm0Ndxvr++V5V9e/+4rqs1wvGJBehdLN29cv3EdP5ZfDMuM+cHMaNTq21FeXEjahouS4jUHWHPlGjkdOB6zzOsV0BWivWpIb0hbvV7G+GvZjD+I7VcStrOeBampaLjzbcLyl2L/fGh/NZAaYv3+9XGc7bmXsj2Ke9rrsb00w7OJlhoUnNwD07CjrTZDsyoFvlsTrBvlj5w1wfq7hPGLFXox2ozT3h9cnLMY6A3EhdjrwXo8JHyD+3N2L84mvQjrchp+uEZnZ38iYl/z9uwh3JNreJa002kfBiT0x3fgKXqxxQ0NqubOPvAcfhbHIuLxH/jxZzrC+QycprEjb/ctNgJn+cBM3sqE8PcIhLcz2JLWm0ZArh7YrGoGUkUaUHk4AqmehUvu+AiEtSwZzlXvv3AHYnFmDIt/AZ7E6oGlFAAA";
71      private static final Log log = LogFactory.getLog(ProgramSelectUI.class);
72      private static final long serialVersionUID = 1L;
73  
74      /*-----------------------------------------------------------------------*/
75      /*--------------------------- Internal states ---------------------------*/
76      /*-----------------------------------------------------------------------*/
77  
78      protected List<Object> $activeBindings = new ArrayList<Object>();
79      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
80      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
81      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
82      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
83      private boolean allComponentsCreated;
84      protected final JAXXContext delegateContext = new DefaultJAXXContext();
85  
86      /*-----------------------------------------------------------------------*/
87      /*------------------------ Protected components  ------------------------*/
88      /*-----------------------------------------------------------------------*/
89  
90      protected JLabel andLabel;
91      protected JLabel availableProgramLabel;
92      protected DaliHelpBroker broker;
93      protected JButton cancelBouton;
94      protected JLabel dateLabel;
95      protected JPanel datesPanel;
96      protected JCheckBox enablePhotoCheckBox;
97      protected JDatePicker endDateEditor;
98      protected Boolean fileSynchro;
99      protected final ProgramSelectUIHandler handler = createHandler();
100     protected Collection<String> initialProgramCodes;
101     protected ProgramSelectUIModel model;
102     protected JCheckBox onlyDirtyCheckBox;
103     protected Table optionsPanel;
104     protected Boolean photoSynchro;
105     protected ExtendedBeanDoubleList<ProgramDTO> programDoubleList;
106     protected ProgramSelectUI programSelectUI = this;
107     protected StatusFilter programStatusFilter;
108     protected ExtendedComboBox<SearchDateDTO> searchDateCombo;
109     protected JButton selectBouton;
110     protected JLabel selectedProgramLabel;
111     protected JDatePicker startDateEditor;
112 
113     /*-----------------------------------------------------------------------*/
114     /*------------------------- Private components  -------------------------*/
115     /*-----------------------------------------------------------------------*/
116 
117     private JPanel $JPanel0;
118     private JPanel $JPanel1;
119     private JSeparator $JSeparator0;
120     private Table $Table0;
121 
122     /*-----------------------------------------------------------------------*/
123     /*---------------------------- Constructors  ----------------------------*/
124     /*-----------------------------------------------------------------------*/
125 
126     public ProgramSelectUI(ApplicationUI parentUI, StatusFilter programStatusFilter, Collection initialProgramCodes, boolean fileSynchro, boolean photoSynchro) {
127         ApplicationUIUtil.setParentUI(this, parentUI);
128                     this.programStatusFilter = programStatusFilter;
129                     this.initialProgramCodes = initialProgramCodes;
130                     this.fileSynchro = fileSynchro;
131                     this.photoSynchro = photoSynchro;
132             $initialize();
133     }
134 
135     public ProgramSelectUI() {
136         $initialize();
137     }
138 
139     public ProgramSelectUI(JAXXContext parentContext) {
140         JAXXUtil.initContext(this, parentContext);
141         $initialize();
142     }
143 
144     public ProgramSelectUI(boolean param0) {
145         super(param0);
146         $initialize();
147     }
148 
149     public ProgramSelectUI(JAXXContext parentContext, boolean param1) {
150         super(param1);
151         JAXXUtil.initContext(this, parentContext);
152         $initialize();
153     }
154 
155     public ProgramSelectUI(LayoutManager param0) {
156         super(param0);
157         $initialize();
158     }
159 
160     public ProgramSelectUI(JAXXContext parentContext, LayoutManager param1) {
161         super(param1);
162         JAXXUtil.initContext(this, parentContext);
163         $initialize();
164     }
165 
166     public ProgramSelectUI(LayoutManager param0, boolean param1) {
167         super(param0 ,param1);
168         $initialize();
169     }
170 
171     public ProgramSelectUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
172         super(param1 ,param2);
173         JAXXUtil.initContext(this, parentContext);
174         $initialize();
175     }
176 
177     /*-----------------------------------------------------------------------*/
178     /*--------------------------- Statics methods ---------------------------*/
179     /*-----------------------------------------------------------------------*/
180 
181     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
182         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
183     }
184 
185     /*-----------------------------------------------------------------------*/
186     /*---------------------- JAXXObject implementation ----------------------*/
187     /*-----------------------------------------------------------------------*/
188 
189     @Override
190     public void applyDataBinding(String $binding) {
191         if (allComponentsCreated && $bindings.containsKey($binding)) {
192             getDataBinding($binding).applyDataBinding();
193         }
194         processDataBinding($binding);
195     }
196 
197     @Override
198     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
199         super.firePropertyChange(propertyName, oldValue, newValue);
200     }
201 
202     @Override
203     public Map<String, Object> get$objectMap() {
204         return $objectMap;
205     }
206 
207     @Override
208     public JAXXBinding getDataBinding(String bindingId) {
209         return $bindings.get(bindingId);
210     }
211 
212     @Override
213     public JAXXBinding[] getDataBindings() {
214         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
215     }
216 
217     @Override
218     public Object getObjectById(String id) {
219         return $objectMap.get(id);
220     }
221 
222     @Override
223     public void processDataBinding(String $binding, boolean $force) {
224         if (!$force && $activeBindings.contains($binding)) { 
225             return;
226         }
227         $activeBindings.add($binding);
228         try {
229             if (allComponentsCreated && $bindings.containsKey($binding)) {
230                 getDataBinding($binding).processDataBinding();
231             }
232         } finally {
233             $activeBindings.remove($binding);
234         }
235     }
236 
237     @Override
238     public void processDataBinding(String $binding) {
239         processDataBinding($binding, false);
240     }
241 
242     @Override
243     public void registerDataBinding(JAXXBinding binding) {
244         $bindings.put(binding.getId(), binding);
245     }
246 
247     @Override
248     public void removeDataBinding(String $binding) {
249         if (allComponentsCreated && $bindings.containsKey($binding)) {
250             getDataBinding($binding).removeDataBinding();
251         }
252     }
253 
254     /*-----------------------------------------------------------------------*/
255     /*--------------------- JAXXContext implementation  ---------------------*/
256     /*-----------------------------------------------------------------------*/
257 
258     @Override
259     public <T> T getContextValue(Class<T> clazz) {
260         return delegateContext.getContextValue(clazz, null);
261     }
262 
263     @Override
264     public <T> T getContextValue(Class<T> clazz, String name) {
265         return delegateContext.getContextValue(clazz, name);
266     }
267 
268     @Override
269     public JAXXContext getDelegateContext() {
270         return delegateContext;
271     }
272 
273     @Override
274     public <O extends Container> O getParentContainer(Class<O> clazz) {
275         return SwingUtil.getParentContainer(this, clazz);
276     }
277 
278     @Override
279     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
280         return SwingUtil.getParentContainer(source, clazz);
281     }
282 
283     @Override
284     public <T> void removeContextValue(Class<T> clazz) {
285         delegateContext.removeContextValue(clazz, null);
286     }
287 
288     @Override
289     public <T> void removeContextValue(Class<T> clazz, String name) {
290         delegateContext.removeContextValue(clazz, name);
291     }
292 
293     @Override
294     public <T> void setContextValue(T o) {
295         delegateContext.setContextValue(o, null);
296     }
297 
298     @Override
299     public <T> void setContextValue(T o, String name) {
300         delegateContext.setContextValue(o, name);
301     }
302 
303     /*-----------------------------------------------------------------------*/
304     /*---------------------------- Event methods ----------------------------*/
305     /*-----------------------------------------------------------------------*/
306 
307     public void doActionPerformed__on__cancelBouton(ActionEvent event) {
308         if (log.isDebugEnabled()) {
309             log.debug(event);
310         }
311         handler.cancel();
312     }
313 
314     public void doActionPerformed__on__endDateEditor(ActionEvent event) {
315         if (log.isDebugEnabled()) {
316             log.debug(event);
317         }
318         handler.setDate(event, "endDate");
319     }
320 
321     public void doActionPerformed__on__selectBouton(ActionEvent event) {
322         if (log.isDebugEnabled()) {
323             log.debug(event);
324         }
325         handler.select();
326     }
327 
328     public void doActionPerformed__on__startDateEditor(ActionEvent event) {
329         if (log.isDebugEnabled()) {
330             log.debug(event);
331         }
332         handler.setDate(event, "startDate");
333     }
334 
335     public void doItemStateChanged__on__enablePhotoCheckBox(ItemEvent event) {
336         if (log.isDebugEnabled()) {
337             log.debug(event);
338         }
339         handler.setBoolean(event, ProgramSelectUIModel.PROPERTY_ENABLE_PHOTO);
340     }
341 
342     public void doItemStateChanged__on__onlyDirtyCheckBox(ItemEvent event) {
343         if (log.isDebugEnabled()) {
344             log.debug(event);
345         }
346         handler.setBoolean(event, ProgramSelectUIModel.PROPERTY_DIRTY_ONLY);
347     }
348 
349     /*-----------------------------------------------------------------------*/
350     /*----------------------- Public acessor methods  -----------------------*/
351     /*-----------------------------------------------------------------------*/
352 
353     public JLabel getAndLabel() {
354         return andLabel;
355     }
356 
357     public JLabel getAvailableProgramLabel() {
358         return availableProgramLabel;
359     }
360 
361     public DaliHelpBroker getBroker() {
362         return broker;
363     }
364 
365     public JButton getCancelBouton() {
366         return cancelBouton;
367     }
368 
369     public JLabel getDateLabel() {
370         return dateLabel;
371     }
372 
373     public JPanel getDatesPanel() {
374         return datesPanel;
375     }
376 
377     public JCheckBox getEnablePhotoCheckBox() {
378         return enablePhotoCheckBox;
379     }
380 
381     public JDatePicker getEndDateEditor() {
382         return endDateEditor;
383     }
384 
385     public Boolean getFileSynchro() {
386         return fileSynchro;
387     }
388 
389     public ProgramSelectUIHandler getHandler() {
390         return handler;
391     }
392 
393     public Collection<String> getInitialProgramCodes() {
394         return initialProgramCodes;
395     }
396 
397     public ProgramSelectUIModel getModel() {
398         return model;
399     }
400 
401     public JCheckBox getOnlyDirtyCheckBox() {
402         return onlyDirtyCheckBox;
403     }
404 
405     public Table getOptionsPanel() {
406         return optionsPanel;
407     }
408 
409     public Boolean getPhotoSynchro() {
410         return photoSynchro;
411     }
412 
413     public ExtendedBeanDoubleList<ProgramDTO> getProgramDoubleList() {
414         return programDoubleList;
415     }
416 
417     public StatusFilter getProgramStatusFilter() {
418         return programStatusFilter;
419     }
420 
421     public ExtendedComboBox<SearchDateDTO> getSearchDateCombo() {
422         return searchDateCombo;
423     }
424 
425     public JButton getSelectBouton() {
426         return selectBouton;
427     }
428 
429     public JLabel getSelectedProgramLabel() {
430         return selectedProgramLabel;
431     }
432 
433     public JDatePicker getStartDateEditor() {
434         return startDateEditor;
435     }
436 
437     /*-----------------------------------------------------------------------*/
438     /*---------------------------- Other methods ----------------------------*/
439     /*-----------------------------------------------------------------------*/
440 
441     @Override
442     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
443         broker.installUI(component, helpId);
444     }
445 
446     @Override
447     public void showHelp(String helpId) {
448         getBroker().showHelp(this, helpId);
449     }
450 
451     /*-----------------------------------------------------------------------*/
452     /*--------------------- Protected acessors methods  ---------------------*/
453     /*-----------------------------------------------------------------------*/
454 
455     protected JPanel get$JPanel0() {
456         return $JPanel0;
457     }
458 
459     protected JPanel get$JPanel1() {
460         return $JPanel1;
461     }
462 
463     protected JSeparator get$JSeparator0() {
464         return $JSeparator0;
465     }
466 
467     protected Table get$Table0() {
468         return $Table0;
469     }
470 
471     /*-----------------------------------------------------------------------*/
472     /*--------------------- Components creation methods ---------------------*/
473     /*-----------------------------------------------------------------------*/
474 
475     protected void addChildrenToDatesPanel() {
476         if (!allComponentsCreated) {
477             return;
478         }
479         datesPanel.add(dateLabel, BorderLayout.PAGE_START);
480         datesPanel.add(searchDateCombo, BorderLayout.LINE_START);
481         datesPanel.add(startDateEditor);
482         datesPanel.add(andLabel);
483         datesPanel.add(endDateEditor, BorderLayout.LINE_END);
484     }
485 
486     protected void addChildrenToOptionsPanel() {
487         if (!allComponentsCreated) {
488             return;
489         }
490         optionsPanel.add($JSeparator0, new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
491         optionsPanel.add(enablePhotoCheckBox, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
492         optionsPanel.add(onlyDirtyCheckBox, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
493         optionsPanel.add(datesPanel, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
494     }
495 
496     protected void addChildrenToProgramSelectUI() {
497         if (!allComponentsCreated) {
498             return;
499         }
500         add($JPanel0);
501         add($JPanel1, BorderLayout.PAGE_END);
502     }
503 
504     protected void createAndLabel() {
505         $objectMap.put("andLabel", andLabel = new JLabel());
506         
507         andLabel.setName("andLabel");
508         andLabel.setText(t("dali.property.and"));
509     }
510 
511     protected void createAvailableProgramLabel() {
512         $objectMap.put("availableProgramLabel", availableProgramLabel = new JLabel());
513         
514         availableProgramLabel.setName("availableProgramLabel");
515         availableProgramLabel.setText(t("dali.synchro.program.available"));
516     }
517 
518     protected void createBroker() {
519         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
520     }
521 
522     protected void createCancelBouton() {
523         $objectMap.put("cancelBouton", cancelBouton = new JButton());
524         
525         cancelBouton.setName("cancelBouton");
526         cancelBouton.setText(t("dali.common.cancel"));
527         cancelBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__cancelBouton"));
528     }
529 
530     protected void createDateLabel() {
531         $objectMap.put("dateLabel", dateLabel = new JLabel());
532         
533         dateLabel.setName("dateLabel");
534         dateLabel.setText(t("dali.property.date"));
535     }
536 
537     protected void createDatesPanel() {
538         $objectMap.put("datesPanel", datesPanel = new JPanel());
539         
540         datesPanel.setName("datesPanel");
541         datesPanel.setLayout(new BoxLayout(datesPanel, BoxLayout.LINE_AXIS));
542     }
543 
544     protected void createEnablePhotoCheckBox() {
545         $objectMap.put("enablePhotoCheckBox", enablePhotoCheckBox = new JCheckBox());
546         
547         enablePhotoCheckBox.setName("enablePhotoCheckBox");
548         enablePhotoCheckBox.setText(t("dali.synchro.photo.enable.label"));
549         enablePhotoCheckBox.addItemListener(JAXXUtil.getEventListener(ItemListener.class, "itemStateChanged", this, "doItemStateChanged__on__enablePhotoCheckBox"));
550     }
551 
552     protected void createEndDateEditor() {
553         $objectMap.put("endDateEditor", endDateEditor = new JDatePicker());
554         
555         endDateEditor.setName("endDateEditor");
556         endDateEditor.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__endDateEditor"));
557         endDateEditor.putClientProperty("selectOnFocus", true);
558     }
559 
560     protected void createFileSynchro() {
561         $objectMap.put("fileSynchro", fileSynchro = this.fileSynchro);
562     }
563 
564     protected ProgramSelectUIHandler createHandler() {
565         return new ProgramSelectUIHandler();
566     }
567 
568     protected void createInitialProgramCodes() {
569         $objectMap.put("initialProgramCodes", initialProgramCodes = this.initialProgramCodes);
570     }
571 
572     protected void createModel() {
573         $objectMap.put("model", model = getContextValue(ProgramSelectUIModel.class));
574     }
575 
576     protected void createOnlyDirtyCheckBox() {
577         $objectMap.put("onlyDirtyCheckBox", onlyDirtyCheckBox = new JCheckBox());
578         
579         onlyDirtyCheckBox.setName("onlyDirtyCheckBox");
580         onlyDirtyCheckBox.setText(t("dali.synchro.export.dirtyOnly.label"));
581         onlyDirtyCheckBox.addItemListener(JAXXUtil.getEventListener(ItemListener.class, "itemStateChanged", this, "doItemStateChanged__on__onlyDirtyCheckBox"));
582     }
583 
584     protected void createOptionsPanel() {
585         $objectMap.put("optionsPanel", optionsPanel = new Table());
586         
587         optionsPanel.setName("optionsPanel");
588     }
589 
590     protected void createPhotoSynchro() {
591         $objectMap.put("photoSynchro", photoSynchro = this.photoSynchro);
592     }
593 
594     protected void createProgramDoubleList() {
595         $objectMap.put("programDoubleList", programDoubleList = new ExtendedBeanDoubleList<ProgramDTO>());
596         
597         programDoubleList.setName("programDoubleList");
598         programDoubleList.setFilterable(true);
599         programDoubleList.setShowDecorator(false);
600         programDoubleList.setShowSelectPopupEnabled(true);
601         programDoubleList.setProperty("selectedPrograms");
602         programDoubleList.setShowReset(true);
603         programDoubleList.setHighlightFilterText(true);
604         programDoubleList.setUseMultiSelect(false);
605         programDoubleList.setToolTipText(t("dali.synchro.program.available.filter"));
606     }
607 
608     protected void createProgramStatusFilter() {
609         $objectMap.put("programStatusFilter", programStatusFilter = this.programStatusFilter);
610     }
611 
612     protected void createSearchDateCombo() {
613         $objectMap.put("searchDateCombo", searchDateCombo = new ExtendedComboBox<SearchDateDTO>(this));
614         
615         searchDateCombo.setName("searchDateCombo");
616         searchDateCombo.setFilterable(true);
617         searchDateCombo.setShowDecorator(false);
618         searchDateCombo.setProperty("searchDate");
619         searchDateCombo.setShowReset(true);
620     }
621 
622     protected void createSelectBouton() {
623         $objectMap.put("selectBouton", selectBouton = new JButton());
624         
625         selectBouton.setName("selectBouton");
626         selectBouton.setText(t("dali.common.select"));
627         selectBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__selectBouton"));
628     }
629 
630     protected void createSelectedProgramLabel() {
631         $objectMap.put("selectedProgramLabel", selectedProgramLabel = new JLabel());
632         
633         selectedProgramLabel.setName("selectedProgramLabel");
634         selectedProgramLabel.setText(t("dali.synchro.program.selected"));
635     }
636 
637     protected void createStartDateEditor() {
638         $objectMap.put("startDateEditor", startDateEditor = new JDatePicker());
639         
640         startDateEditor.setName("startDateEditor");
641         startDateEditor.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__startDateEditor"));
642         startDateEditor.putClientProperty("selectOnFocus", true);
643     }
644 
645     /*-----------------------------------------------------------------------*/
646     /*------------------------ Internal jaxx methods ------------------------*/
647     /*-----------------------------------------------------------------------*/
648 
649     private void $completeSetup() {
650         allComponentsCreated = true;
651         if (log.isDebugEnabled()) {
652             log.debug(this);
653         }
654         addChildrenToProgramSelectUI();
655         // inline complete setup of $JPanel0
656         $JPanel0.add($Table0, BorderLayout.CENTER);
657         $JPanel0.add(optionsPanel, BorderLayout.PAGE_END);
658         // inline complete setup of $Table0
659         $Table0.add(availableProgramLabel, new GridBagConstraints(0, 0, 1, 1, 0.5, 0.0, 10, 2, new Insets(3, 3, 3, 3), 0, 0));
660         $Table0.add(selectedProgramLabel, new GridBagConstraints(1, 0, 1, 1, 0.5, 0.0, 10, 2, new Insets(3, 3, 3, 3), 0, 0));
661         $Table0.add(programDoubleList, new GridBagConstraints(0, 1, 2, 1, 1.0, 1.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
662         addChildrenToOptionsPanel();
663         addChildrenToDatesPanel();
664         // inline complete setup of $JPanel1
665         $JPanel1.add(cancelBouton);
666         $JPanel1.add(selectBouton);
667         
668         // apply 6 data bindings
669         JAXXUtil.applyDataBinding(this, $bindings.keySet());
670         
671         // apply 22 property setters
672         programDoubleList.setBeanType(ProgramDTO.class);
673         searchDateCombo.setBeanType(SearchDateDTO.class);
674         andLabel.setHorizontalAlignment(JLabel.RIGHT);
675         cancelBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
676         selectBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
677         availableProgramLabel.setHorizontalAlignment(SwingConstants.CENTER);
678         selectedProgramLabel.setHorizontalAlignment(SwingConstants.CENTER);
679         programDoubleList.setBean(model);
680         enablePhotoCheckBox.setBorder(BorderFactory.createEmptyBorder(10,0,10,0));
681         enablePhotoCheckBox.setHorizontalAlignment(SwingConstants.LEFT);
682         onlyDirtyCheckBox.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
683         onlyDirtyCheckBox.setHorizontalAlignment(SwingConstants.LEFT);
684         datesPanel.setBorder(BorderFactory.createEmptyBorder(0,0,10,0));
685         searchDateCombo.setBean(model);
686         cancelBouton.setMnemonic(SwingUtil.getFirstCharAt(t("dali.common.cancel.mnemonic"),'Z'));
687         cancelBouton.setIcon(SwingUtil.createActionIcon("cancel"));
688         selectBouton.setMnemonic(SwingUtil.getFirstCharAt(t("dali.common.select.mnemonic"),'Z'));
689         selectBouton.setIcon(SwingUtil.createActionIcon("validate"));
690     }
691 
692     private void $initialize() {
693         if (allComponentsCreated) {
694             return;
695         }
696         if (log.isDebugEnabled()) {
697             log.debug(this);
698         }
699         handler.beforeInit(this);
700         $objectMap.put("programSelectUI", programSelectUI);
701         createModel();
702         createBroker();
703         createProgramStatusFilter();
704         createInitialProgramCodes();
705         createFileSynchro();
706         createPhotoSynchro();
707         // inline creation of $JPanel0
708         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
709         
710         $JPanel0.setName("$JPanel0");
711         $JPanel0.setLayout(new BorderLayout());
712         // inline creation of $Table0
713         $objectMap.put("$Table0", $Table0 = new Table());
714         
715         $Table0.setName("$Table0");
716         createAvailableProgramLabel();
717         createSelectedProgramLabel();
718         createProgramDoubleList();
719         createOptionsPanel();
720         // inline creation of $JSeparator0
721         $objectMap.put("$JSeparator0", $JSeparator0 = new JSeparator(SwingConstants.HORIZONTAL));
722         
723         $JSeparator0.setName("$JSeparator0");
724         createEnablePhotoCheckBox();
725         createOnlyDirtyCheckBox();
726         createDatesPanel();
727         createDateLabel();
728         createSearchDateCombo();
729         createStartDateEditor();
730         createAndLabel();
731         createEndDateEditor();
732         // inline creation of $JPanel1
733         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
734         
735         $JPanel1.setName("$JPanel1");
736         $JPanel1.setLayout(new GridLayout(1,0));
737         createCancelBouton();
738         createSelectBouton();
739         // inline creation of programSelectUI
740         setName("programSelectUI");
741         setLayout(new BorderLayout());
742         
743         // registers 6 data bindings
744         $registerDefaultBindings();
745         $completeSetup();
746         handler.afterInit(this);
747     }
748 
749     private void $registerDefaultBindings() {
750         // register 6 data bindings
751         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ENABLE_PHOTO_CHECK_BOX_SELECTED, true) {
752         
753             @Override
754             public void applyDataBinding() {
755                 if (model != null) {
756                     model.addPropertyChangeListener("enablePhoto", this);
757                 }
758             }
759         
760             @Override
761             public void processDataBinding() {
762                 if (model != null) {
763                     enablePhotoCheckBox.setSelected(model.isEnablePhoto());
764                 }
765             }
766         
767             @Override
768             public void removeDataBinding() {
769                 if (model != null) {
770                     model.removePropertyChangeListener("enablePhoto", this);
771                 }
772             }
773         });
774         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ONLY_DIRTY_CHECK_BOX_SELECTED, true) {
775         
776             @Override
777             public void applyDataBinding() {
778                 if (model != null) {
779                     model.addPropertyChangeListener("dirtyOnly", this);
780                 }
781             }
782         
783             @Override
784             public void processDataBinding() {
785                 if (model != null) {
786                     onlyDirtyCheckBox.setSelected(model.isDirtyOnly());
787                 }
788             }
789         
790             @Override
791             public void removeDataBinding() {
792                 if (model != null) {
793                     model.removePropertyChangeListener("dirtyOnly", this);
794                 }
795             }
796         });
797         registerDataBinding(new DefaultJAXXBinding(this, BINDING_SEARCH_DATE_COMBO_SELECTED_ITEM, true) {
798         
799             @Override
800             public void applyDataBinding() {
801                 if (model != null) {
802                     model.addPropertyChangeListener("searchDate", this);
803                 }
804             }
805         
806             @Override
807             public void processDataBinding() {
808                 if (model != null) {
809                     searchDateCombo.setSelectedItem(model.getSearchDate());
810                 }
811             }
812         
813             @Override
814             public void removeDataBinding() {
815                 if (model != null) {
816                     model.removePropertyChangeListener("searchDate", this);
817                 }
818             }
819         });
820         registerDataBinding(new DefaultJAXXBinding(this, BINDING_START_DATE_EDITOR_DATE, true) {
821         
822             @Override
823             public void applyDataBinding() {
824                 if (model != null) {
825                     model.addPropertyChangeListener("startDate", this);
826                 }
827             }
828         
829             @Override
830             public void processDataBinding() {
831                 if (model != null) {
832                     startDateEditor.setDate(model.getStartDate());
833                 }
834             }
835         
836             @Override
837             public void removeDataBinding() {
838                 if (model != null) {
839                     model.removePropertyChangeListener("startDate", this);
840                 }
841             }
842         });
843         registerDataBinding(new DefaultJAXXBinding(this, BINDING_END_DATE_EDITOR_DATE, true) {
844         
845             @Override
846             public void applyDataBinding() {
847                 if (model != null) {
848                     model.addPropertyChangeListener("endDate", this);
849                 }
850             }
851         
852             @Override
853             public void processDataBinding() {
854                 if (model != null) {
855                     endDateEditor.setDate(model.getEndDate());
856                 }
857             }
858         
859             @Override
860             public void removeDataBinding() {
861                 if (model != null) {
862                     model.removePropertyChangeListener("endDate", this);
863                 }
864             }
865         });
866         registerDataBinding(new DefaultJAXXBinding(this, BINDING_SELECT_BOUTON_ENABLED, true) {
867         
868             @Override
869             public void applyDataBinding() {
870                 if (model != null) {
871                     model.addPropertyChangeListener("selectedPrograms", this);
872                 }
873             }
874         
875             @Override
876             public void processDataBinding() {
877                 if (model != null && model.getSelectedPrograms() != null) {
878                     selectBouton.setEnabled(!model.getSelectedPrograms().isEmpty());
879                 }
880             }
881         
882             @Override
883             public void removeDataBinding() {
884                 if (model != null) {
885                     model.removePropertyChangeListener("selectedPrograms", this);
886                 }
887             }
888         });
889     }
890 
891 }