View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.campaign;
2   
3   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
4   import fr.ifremer.dali.ui.swing.DaliUIContext;
5   import fr.ifremer.dali.ui.swing.content.manage.campaign.menu.CampaignsMenuUI;
6   import fr.ifremer.dali.ui.swing.content.manage.campaign.table.CampaignsTableUI;
7   import fr.ifremer.dali.ui.swing.util.DaliUI;
8   import fr.ifremer.dali.ui.swing.util.image.BackgroundPanel;
9   import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
10  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
11  import java.awt.BorderLayout;
12  import java.awt.Component;
13  import java.awt.Container;
14  import java.awt.GridLayout;
15  import java.awt.LayoutManager;
16  import java.util.ArrayList;
17  import java.util.HashMap;
18  import java.util.List;
19  import java.util.Map;
20  import java.util.TreeMap;
21  import javax.swing.BorderFactory;
22  import javax.swing.Box;
23  import javax.swing.BoxLayout;
24  import javax.swing.JButton;
25  import javax.swing.JLabel;
26  import javax.swing.JPanel;
27  import jaxx.runtime.JAXXBinding;
28  import jaxx.runtime.JAXXContext;
29  import jaxx.runtime.JAXXObject;
30  import jaxx.runtime.JAXXObjectDescriptor;
31  import jaxx.runtime.JAXXUtil;
32  import jaxx.runtime.JAXXValidator;
33  import jaxx.runtime.SwingUtil;
34  import jaxx.runtime.binding.DefaultJAXXBinding;
35  import jaxx.runtime.context.DefaultJAXXContext;
36  import jaxx.runtime.validator.swing.SwingValidator;
37  import jaxx.runtime.validator.swing.SwingValidatorUtil;
38  import jaxx.runtime.validator.swing.meta.Validator;
39  import jaxx.runtime.validator.swing.meta.ValidatorField;
40  import jaxx.runtime.validator.swing.ui.ImageValidationUI;
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 CampaignsUI extends JPanel implements DaliUI<CampaignsUIModel, CampaignsUIHandler>, JAXXObject, JAXXValidator {
46  
47      /*-----------------------------------------------------------------------*/
48      /*------------------ Constants for all public bindings ------------------*/
49      /*-----------------------------------------------------------------------*/
50  
51      public static final String BINDING_SAVE_BUTTON_ENABLED = "saveButton.enabled";
52  
53      /*-----------------------------------------------------------------------*/
54      /*------------------------- Other static fields -------------------------*/
55      /*-----------------------------------------------------------------------*/
56  
57      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAKVWz1MjRRRuYhKW4AoLBYLuWoiKINrBRa1StpCQDW7WgNYGVkoOa2emCQ09P+zuQGJqLf8EvXrSuxervHmy9uDZgxfLf8GyPHi1fN2TzCQkgVCBqq5Jv/e+/t6P/mZ++AslpEAvHpNqFYuKq5hD8f3M/v5HpWNqqbtUWoL5yhMo+BuKodgBGrXDfanQSwcFHZ5uhKeznuN7LnVbotcKKCVVjVN5RKlS6FZ7hCVluhia16p+RTRRQ1LdUL/75+/Y1/ZX38cQqvrAbgxSmbssKsokXkAxZis0ASedkjQnbhloCOaWge91vZflRMod4tDP0ZdouICSPhEAptB8/ykbDBNf9RW69vL9j4lL+YpCdw4FZoeCOlRgm3CGKwzLMzgdW56rAAw7xCVlii3i+ISVXZxtPMi9vO8bzKRCCcezKVcoMwjctsaIMJMl4Z1QodCrPUHvwq97ELNpPKPQkVMw2AQqoNByWy9CQwOhqNeHzc0IoVmiN6EzugnVhn+wq51GQt+4Q92Kfn5WL1NRAnp/L69Q7spV0ZFRabYNjkad6SB4Ozw4sl2XTMJZn9BSgbkn5zMokFKQwa2oXpweqrwDFBRa7Um2ohjHTHvhTWKdlIVXce2wHlMd1FZDalGtxpspyl1S4lRX54MrV0fp0Kg8DSR9wisdJN4KSUS2UYt7km5WlIID0GRbdYJd7fha6J+S5JRGBtywCvR822yBguBIQaIrPnSAEqIC2wrNHHSKzgMwBXIzc05uNKCx/jc9+fvPf/601aoxU11dWyQS7r4vPB9uENNHjwUCo5uY3ib+2gEakZSDvhr9vNmFWLFhBnJw3g0dHszAPSKPACIx/McvT6Y/++0pFNtCKe4Re4to/zwaUUcCquBxu+q/v2EYPX12DdZxzQ24PArvoZlGhZ6rq8V50/2oy0xxOr/0uAqVudmlMiG90siv/04Wf9xoVmcI2M72dI8qlPgUJZnLmUuNBjfktavmjvqSVmwvktFuwoq6jLffkJR3zPpeRzHiWuc8YWudW65vmqegijVsCUoUzTm+qgWGxdsrr5v/pccwtkeeYF/AABOe4XCiY94JY/XgfuNsbmc39wD84opWwTDbXtxAITA3+pA69AQNrrNCU3XTaHKm4MXFQSg3C3s5aILmv26qq5820HmZuSxTaHuCBRLzbt3I7p6epSDJPFz1xfm0scu0YVl2KT72y/NLGEKMNi0udaURiVcfxZ54RHyfM4so5rkZS69QynpWC0LwE1u6pVC4FDG/NTVokkVcSw/qVCfAh7Sm0Nv1i3VTv6rAEV7t8KqSOJvZyeYKUXtuBO3xHMcwADbdUm0VrsuSTfZIdqJeBDW7KNe4lrvema5eLdNi5mEuynO8Nc/gnFHleXyX+bstcxrQMQ4YRKwsiAMiNUxdfatgSNfr5oMDMwkfDeywtrg0t7Aw19wz7/P2LZ1zLojuMUYtIt/HKCc5qXngjJ65AzJG5krMtaEC6x3IQ3pNXYqot8/0Uu2OMD0wwuzACC8MjLAwMMJyH71JkaYe7l+A9EZfXL65AGGlDy5xZgUfDQOx+PYSFv8Dil4Pm0INAAA=";
58      private static final Log log = LogFactory.getLog(CampaignsUI.class);
59      private static final long serialVersionUID = 1L;
60  
61      /*-----------------------------------------------------------------------*/
62      /*--------------------------- Internal states ---------------------------*/
63      /*-----------------------------------------------------------------------*/
64  
65      protected List<Object> $activeBindings = new ArrayList<Object>();
66      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
67      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
68      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
69      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
70      private boolean allComponentsCreated;
71      protected final JAXXContext delegateContext = new DefaultJAXXContext();
72  
73      /*-----------------------------------------------------------------------*/
74      /*------------------------ Protected components  ------------------------*/
75      /*-----------------------------------------------------------------------*/
76  
77      protected DaliHelpBroker broker;
78      @ValidatorField( validatorId = "validator",  propertyName = "campaignsTableUIModel",  editorName = "campaignsTableUI")
79      protected CampaignsTableUI campaignsTableUI;
80      protected JButton closeButton;
81      protected final CampaignsUIHandler handler = createHandler();
82      protected BackgroundPanel leftImage;
83      protected JPanel menu;
84      protected CampaignsMenuUI menuUI;
85      protected CampaignsUIModel model;
86      protected JButton saveButton;
87      protected JLabel sismerWebLink;
88      @Validator( validatorId = "validator")
89      protected SwingValidator<CampaignsUIModel> validator;
90      protected List<String> validatorIds = new ArrayList<String>();
91  
92      /*-----------------------------------------------------------------------*/
93      /*------------------------- Private components  -------------------------*/
94      /*-----------------------------------------------------------------------*/
95  
96      private CampaignsUI $JPanel0 = this;
97      private JPanel $JPanel1;
98      private JPanel $JPanel2;
99      private JPanel $JPanel3;
100     private JPanel $JPanel4;
101 
102     /*-----------------------------------------------------------------------*/
103     /*---------------------------- Constructors  ----------------------------*/
104     /*-----------------------------------------------------------------------*/
105 
106     public CampaignsUI(ApplicationUI parentUI) {
107         ApplicationUIUtil.setParentUI(this, parentUI);
108             $initialize();
109     }
110 
111     public CampaignsUI() {
112         $initialize();
113     }
114 
115     public CampaignsUI(JAXXContext parentContext) {
116         JAXXUtil.initContext(this, parentContext);
117         $initialize();
118     }
119 
120     public CampaignsUI(boolean param0) {
121         super(param0);
122         $initialize();
123     }
124 
125     public CampaignsUI(JAXXContext parentContext, boolean param1) {
126         super(param1);
127         JAXXUtil.initContext(this, parentContext);
128         $initialize();
129     }
130 
131     public CampaignsUI(LayoutManager param0) {
132         super(param0);
133         $initialize();
134     }
135 
136     public CampaignsUI(JAXXContext parentContext, LayoutManager param1) {
137         super(param1);
138         JAXXUtil.initContext(this, parentContext);
139         $initialize();
140     }
141 
142     public CampaignsUI(LayoutManager param0, boolean param1) {
143         super(param0 ,param1);
144         $initialize();
145     }
146 
147     public CampaignsUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
148         super(param1 ,param2);
149         JAXXUtil.initContext(this, parentContext);
150         $initialize();
151     }
152 
153     /*-----------------------------------------------------------------------*/
154     /*--------------------------- Statics methods ---------------------------*/
155     /*-----------------------------------------------------------------------*/
156 
157     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
158         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
159     }
160 
161     /*-----------------------------------------------------------------------*/
162     /*---------------------- JAXXObject implementation ----------------------*/
163     /*-----------------------------------------------------------------------*/
164 
165     @Override
166     public void applyDataBinding(String $binding) {
167         if (allComponentsCreated && $bindings.containsKey($binding)) {
168             getDataBinding($binding).applyDataBinding();
169         }
170         processDataBinding($binding);
171     }
172 
173     @Override
174     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
175         super.firePropertyChange(propertyName, oldValue, newValue);
176     }
177 
178     @Override
179     public Map<String, Object> get$objectMap() {
180         return $objectMap;
181     }
182 
183     @Override
184     public JAXXBinding getDataBinding(String bindingId) {
185         return $bindings.get(bindingId);
186     }
187 
188     @Override
189     public JAXXBinding[] getDataBindings() {
190         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
191     }
192 
193     @Override
194     public Object getObjectById(String id) {
195         return $objectMap.get(id);
196     }
197 
198     @Override
199     public void processDataBinding(String $binding, boolean $force) {
200         if (!$force && $activeBindings.contains($binding)) { 
201             return;
202         }
203         $activeBindings.add($binding);
204         try {
205             if (allComponentsCreated && $bindings.containsKey($binding)) {
206                 getDataBinding($binding).processDataBinding();
207             }
208         } finally {
209             $activeBindings.remove($binding);
210         }
211     }
212 
213     @Override
214     public void processDataBinding(String $binding) {
215         processDataBinding($binding, false);
216     }
217 
218     @Override
219     public void registerDataBinding(JAXXBinding binding) {
220         $bindings.put(binding.getId(), binding);
221     }
222 
223     @Override
224     public void removeDataBinding(String $binding) {
225         if (allComponentsCreated && $bindings.containsKey($binding)) {
226             getDataBinding($binding).removeDataBinding();
227         }
228     }
229 
230     /*-----------------------------------------------------------------------*/
231     /*--------------------- JAXXContext implementation  ---------------------*/
232     /*-----------------------------------------------------------------------*/
233 
234     @Override
235     public <T> T getContextValue(Class<T> clazz) {
236         return delegateContext.getContextValue(clazz, null);
237     }
238 
239     @Override
240     public <T> T getContextValue(Class<T> clazz, String name) {
241         return delegateContext.getContextValue(clazz, name);
242     }
243 
244     @Override
245     public JAXXContext getDelegateContext() {
246         return delegateContext;
247     }
248 
249     @Override
250     public <O extends Container> O getParentContainer(Class<O> clazz) {
251         return SwingUtil.getParentContainer(this, clazz);
252     }
253 
254     @Override
255     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
256         return SwingUtil.getParentContainer(source, clazz);
257     }
258 
259     @Override
260     public <T> void removeContextValue(Class<T> clazz) {
261         delegateContext.removeContextValue(clazz, null);
262     }
263 
264     @Override
265     public <T> void removeContextValue(Class<T> clazz, String name) {
266         delegateContext.removeContextValue(clazz, name);
267     }
268 
269     @Override
270     public <T> void setContextValue(T o) {
271         delegateContext.setContextValue(o, null);
272     }
273 
274     @Override
275     public <T> void setContextValue(T o, String name) {
276         delegateContext.setContextValue(o, name);
277     }
278 
279     /*-----------------------------------------------------------------------*/
280     /*-------------------- JAXXValidator implementation  --------------------*/
281     /*-----------------------------------------------------------------------*/
282 
283     @Override
284     public SwingValidator<?> getValidator(String validatorId) {
285         return (SwingValidator<?>) (validatorIds.contains(validatorId) ? getObjectById(validatorId) : null);
286     }
287 
288     @Override
289     public List<String> getValidatorIds() {
290         return validatorIds;
291     }
292 
293     @Override
294     public void registerValidatorFields() {
295         SwingValidatorUtil.detectValidatorFields(this);
296     }
297 
298     /*-----------------------------------------------------------------------*/
299     /*----------------------- Public acessor methods  -----------------------*/
300     /*-----------------------------------------------------------------------*/
301 
302     public DaliHelpBroker getBroker() {
303         return broker;
304     }
305 
306     public CampaignsTableUI getCampaignsTableUI() {
307         return campaignsTableUI;
308     }
309 
310     public JButton getCloseButton() {
311         return closeButton;
312     }
313 
314     public CampaignsUIHandler getHandler() {
315         return handler;
316     }
317 
318     public BackgroundPanel getLeftImage() {
319         return leftImage;
320     }
321 
322     public JPanel getMenu() {
323         return menu;
324     }
325 
326     public CampaignsMenuUI getMenuUI() {
327         return menuUI;
328     }
329 
330     public CampaignsUIModel getModel() {
331         return model;
332     }
333 
334     public JButton getSaveButton() {
335         return saveButton;
336     }
337 
338     public JLabel getSismerWebLink() {
339         return sismerWebLink;
340     }
341 
342     public SwingValidator<CampaignsUIModel> getValidator() {
343         return validator;
344     }
345 
346     /*-----------------------------------------------------------------------*/
347     /*--------------------- Protected acessors methods  ---------------------*/
348     /*-----------------------------------------------------------------------*/
349 
350     protected JPanel get$JPanel1() {
351         return $JPanel1;
352     }
353 
354     protected JPanel get$JPanel2() {
355         return $JPanel2;
356     }
357 
358     protected JPanel get$JPanel3() {
359         return $JPanel3;
360     }
361 
362     protected JPanel get$JPanel4() {
363         return $JPanel4;
364     }
365 
366     /*-----------------------------------------------------------------------*/
367     /*--------------------- Components creation methods ---------------------*/
368     /*-----------------------------------------------------------------------*/
369 
370     protected void addChildrenToMenu() {
371         if (!allComponentsCreated) {
372             return;
373         }
374         menu.add(menuUI);
375         menu.add($JPanel2);
376     }
377 
378     protected void addChildrenToValidator() {
379         if (!allComponentsCreated) {
380             return;
381         }
382         validator.setUiClass(ImageValidationUI.class);
383         validator.setBean(model);
384     }
385 
386     protected void createBroker() {
387         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
388     }
389 
390     protected void createCampaignsTableUI() {
391         $objectMap.put("campaignsTableUI", campaignsTableUI = new CampaignsTableUI(this));
392         
393         campaignsTableUI.setName("campaignsTableUI");
394         campaignsTableUI.putClientProperty("validatorLabel", t("dali.campaign.title"));
395     }
396 
397     protected void createCloseButton() {
398         $objectMap.put("closeButton", closeButton = new JButton());
399         
400         closeButton.setName("closeButton");
401         closeButton.setText(t("dali.common.close"));
402         closeButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.CANCEL);
403         closeButton.putClientProperty("applicationAction", CloseAction.class);
404     }
405 
406     protected CampaignsUIHandler createHandler() {
407         return new CampaignsUIHandler();
408     }
409 
410     protected void createLeftImage() {
411         $objectMap.put("leftImage", leftImage = new BackgroundPanel());
412         
413         leftImage.setName("leftImage");
414     }
415 
416     protected void createMenu() {
417         $objectMap.put("menu", menu = new JPanel());
418         
419         menu.setName("menu");
420         menu.setLayout(new BoxLayout(menu, BoxLayout.PAGE_AXIS));
421     }
422 
423     protected void createMenuUI() {
424         $objectMap.put("menuUI", menuUI = new CampaignsMenuUI(this));
425         
426         menuUI.setName("menuUI");
427     }
428 
429     protected void createModel() {
430         $objectMap.put("model", model = getContextValue(CampaignsUIModel.class));
431     }
432 
433     protected void createSaveButton() {
434         $objectMap.put("saveButton", saveButton = new JButton());
435         
436         saveButton.setName("saveButton");
437         saveButton.setText(t("dali.common.save"));
438         saveButton.setToolTipText(t("dali.action.save.programs"));
439         saveButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.SAVE);
440         saveButton.putClientProperty("applicationAction", SaveAction.class);
441     }
442 
443     protected void createSismerWebLink() {
444         $objectMap.put("sismerWebLink", sismerWebLink = new JLabel());
445         
446         sismerWebLink.setName("sismerWebLink");
447         sismerWebLink.setText(t("dali.campaign.sismer.link"));
448     }
449 
450     protected void createValidator() {
451         $objectMap.put("validator", validator = SwingValidator.newValidator(CampaignsUIModel.class, null));
452     }
453 
454     /*-----------------------------------------------------------------------*/
455     /*------------------------ Internal jaxx methods ------------------------*/
456     /*-----------------------------------------------------------------------*/
457 
458     private void $completeSetup() {
459         allComponentsCreated = true;
460         if (log.isDebugEnabled()) {
461             log.debug(this);
462         }
463         // inline complete setup of $JPanel0
464         add($JPanel1, BorderLayout.LINE_START);
465         add($JPanel3, BorderLayout.CENTER);
466         addChildrenToValidator();
467         // inline complete setup of $JPanel1
468         $JPanel1.add(menu, BorderLayout.PAGE_START);
469         $JPanel1.add(leftImage, BorderLayout.PAGE_END);
470         addChildrenToMenu();
471         // inline complete setup of $JPanel2
472         $JPanel2.add(sismerWebLink);
473         // inline complete setup of $JPanel3
474         $JPanel3.add(SwingUtil.boxComponentWithJxLayer(campaignsTableUI));
475         $JPanel3.add($JPanel4, BorderLayout.PAGE_END);
476         // inline complete setup of $JPanel4
477         $JPanel4.add(closeButton);
478         $JPanel4.add(saveButton);
479         
480         // apply 1 data bindings
481         JAXXUtil.applyDataBinding(this, $bindings.keySet());
482         
483         // apply 14 property setters
484         closeButton.setAlignmentX(Component.CENTER_ALIGNMENT);
485         saveButton.setAlignmentX(Component.CENTER_ALIGNMENT);
486         sismerWebLink.setBorder(BorderFactory.createEmptyBorder(20,0,0,0));
487         sismerWebLink.setHorizontalAlignment(JLabel.CENTER);
488         sismerWebLink.setForeground(java.awt.Color.BLUE);
489         leftImage.setImage(SwingUtil.createIcon("/images/campagne.jpg").getImage());
490         closeButton.setIcon(SwingUtil.createActionIcon("cancel"));
491         saveButton.setIcon(SwingUtil.createActionIcon("save"));
492         // late initializer
493         // register 1 validator(s)
494         validatorIds = SwingValidatorUtil.detectValidators(this);
495         SwingValidatorUtil.installUI(this);
496     }
497 
498     private void $initialize() {
499         if (allComponentsCreated) {
500             return;
501         }
502         if (log.isDebugEnabled()) {
503             log.debug(this);
504         }
505         handler.beforeInit(this);
506         $objectMap.put("$JPanel0", $JPanel0);
507         createModel();
508         createBroker();
509         createValidator();
510         // inline creation of $JPanel1
511         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
512         
513         $JPanel1.setName("$JPanel1");
514         $JPanel1.setLayout(new BorderLayout());
515         createMenu();
516         createMenuUI();
517         // inline creation of $JPanel2
518         $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
519         
520         $JPanel2.setName("$JPanel2");
521         $JPanel2.setLayout(new BorderLayout());
522         createSismerWebLink();
523         createLeftImage();
524         // inline creation of $JPanel3
525         $objectMap.put("$JPanel3", $JPanel3 = new JPanel());
526         
527         $JPanel3.setName("$JPanel3");
528         $JPanel3.setLayout(new BorderLayout());
529         createCampaignsTableUI();
530         // inline creation of $JPanel4
531         $objectMap.put("$JPanel4", $JPanel4 = new JPanel());
532         
533         $JPanel4.setName("$JPanel4");
534         $JPanel4.setLayout(new GridLayout(1,0));
535         createCloseButton();
536         createSaveButton();
537         // inline creation of $JPanel0
538         setName("$JPanel0");
539         setLayout(new BorderLayout());
540         
541         // registers 1 data bindings
542         $registerDefaultBindings();
543         $completeSetup();
544         handler.afterInit(this);
545     }
546 
547     private void $registerDefaultBindings() {
548         // register 1 data bindings
549         registerDataBinding(new DefaultJAXXBinding(this, BINDING_SAVE_BUTTON_ENABLED, true, true) {
550         
551             @Override
552             public void applyDataBinding() {
553                 if (model != null) {
554                     model.addPropertyChangeListener("modify", this);
555                 }
556                 if (model != null) {
557                     model.addPropertyChangeListener("valid", this);
558                 }
559                 if (model != null) {
560                     model.addPropertyChangeListener("saveEnabled", this);
561                 }
562             }
563         
564             @Override
565             public void processDataBinding() {
566                 if (model != null) {
567                     saveButton.setEnabled(model.isModify() && model.isValid() && model.isSaveEnabled());
568                 }
569             }
570         
571             @Override
572             public void removeDataBinding() {
573                 if (model != null) {
574                     model.removePropertyChangeListener("modify", this);
575                 }
576                 if (model != null) {
577                     model.removePropertyChangeListener("valid", this);
578                 }
579                 if (model != null) {
580                     model.removePropertyChangeListener("saveEnabled", this);
581                 }
582             }
583         });
584     }
585 
586 }