View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.program.strategiesByLocation;
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.program.strategiesByLocation.locations.LieuxProgrammeTableUI;
6   import fr.ifremer.dali.ui.swing.content.manage.program.strategiesByLocation.programs.StrategiesProgrammeTableUI;
7   import fr.ifremer.dali.ui.swing.content.manage.program.strategiesByLocation.strategies.StrategiesLieuTableUI;
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 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.Box;
22  import javax.swing.BoxLayout;
23  import javax.swing.JButton;
24  import javax.swing.JPanel;
25  import jaxx.runtime.JAXXBinding;
26  import jaxx.runtime.JAXXContext;
27  import jaxx.runtime.JAXXObject;
28  import jaxx.runtime.JAXXObjectDescriptor;
29  import jaxx.runtime.JAXXUtil;
30  import jaxx.runtime.JAXXValidator;
31  import jaxx.runtime.SwingUtil;
32  import jaxx.runtime.binding.DefaultJAXXBinding;
33  import jaxx.runtime.context.DefaultJAXXContext;
34  import jaxx.runtime.swing.help.JAXXHelpUI;
35  import jaxx.runtime.validator.swing.SwingValidator;
36  import jaxx.runtime.validator.swing.SwingValidatorUtil;
37  import jaxx.runtime.validator.swing.meta.Validator;
38  import jaxx.runtime.validator.swing.meta.ValidatorField;
39  import jaxx.runtime.validator.swing.ui.ImageValidationUI;
40  import org.apache.commons.logging.Log;
41  import org.apache.commons.logging.LogFactory;
42  import static org.nuiton.i18n.I18n.t;
43  
44  public class StrategiesLieuxUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<StrategiesLieuxUIModel, StrategiesLieuxUIHandler>, JAXXObject, JAXXValidator {
45  
46      /*-----------------------------------------------------------------------*/
47      /*------------------ Constants for all public bindings ------------------*/
48      /*-----------------------------------------------------------------------*/
49  
50      public static final String BINDING_SAVE_BUTTON_ENABLED = "saveButton.enabled";
51  
52      /*-----------------------------------------------------------------------*/
53      /*------------------------- Other static fields -------------------------*/
54      /*-----------------------------------------------------------------------*/
55  
56      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAALVVTW8bRRh+bWynjgu0jRIKLVL63QoxpiBOgdLEbdS0bqnqNKrwAca7E2fK7Aczs+laUSt+Aj8B7r1U6o0T4sCZAxfEX0CIA1fUd2bXu3a9TlIRLHm0+8778cz7zD7v0z+hqiScekjjmMjI19xj5Obygwef9x4yR19jypE81IGE5FcqQ7kLDTezKw1num0T3kzDm63ACwOf+SPRS22YVXogmNpiTGt4dzzCUarZybaX4jCSw6wZqKKs3//9V/k799sfygBxiOgaeJTFvaLyk1TaUOauhmNYaZs2BfX7CENyv494Xze2lqBK3aEe+waewEwbaiGVmEzD6f0f2eaw8XGo4dDZm3epz8QHGjY2JeGbknlMEpcKTiJO1COsTpzA15iMeNSnfUZCGfQl9YjSkmrW50ytDNqBQzUPfNLJjG3Oovj+WhjaajUNVS9wmdDQ/X8K3TbZ82q1ngy+ZlLDhanlruHbDYxZsZ55aH0bN1yKXdPw3hh/2UaaoWPWjaExzzBs62Vk0xAXp/6J1TjVM995YfDfTc7qsXXaE+z+mgb3QNok0gdF2kVlDIb5HIoaa2oGhR0IlNz4EnmFWN7J3Sd7s3UggNLNUTi792dI64fm/a1xGhuOCBRbibRGBDA3xnpiNY6nMv9ZRbdZvnEu3ZVwYuzGoRaRXItysSh1oSojNGs43p2Ur3u4lQjX8ZeEyyS0u/8uzP324x/PV4dqNYO15wtdR8QWVQS7FuJ3xU3pNxOpijQXzds0XOpCXTGBSm2V+GQBsE66jeCw3lETTkw4uUHVFqaozvz+088LX/36GpRXYVYE1F2lxn8N6npLYhcC4cbhZ1ctosOPDuF6BP8V/NC+pGEoeMLtsmNW5GGnZWhJXoljtO8x9p7a9zVzWaDmUN8xujQ/meAWG2j4eGfqbbPIjYygI14ilBFFWst3WtfbWKWiWYzafNSGOIHnWQSIJkZaThbQkvWmV//ln7nOs6tDakrYqrenuuf0VL+AGvcF95kdJemUKBwdjVCxyA3yaVA0H2D8WoepwL1v18sTJNSmkHBsp4N3fTcOKuZjmM7AR6/GQGd543re/yOj/U/qNHQQiHUerluHE9YhgWMdRtRCwwzzjRTgXD63YwcY4QpHDd8cXLy0eP784tBmp8DFS4/jyDRnybJmnj6FsW99rx6W8EIKOgjQGd74BMcKXexx38WjXpnIXDLr7J4ZjbljlvXiDAv/OcPpfZyqwp1E6abkOLsvFHSXDBcwwwt6J6P1QQoAAA==";
57      private static final Log log = LogFactory.getLog(StrategiesLieuxUI.class);
58      private static final long serialVersionUID = 1L;
59  
60      /*-----------------------------------------------------------------------*/
61      /*--------------------------- Internal states ---------------------------*/
62      /*-----------------------------------------------------------------------*/
63  
64      protected List<Object> $activeBindings = new ArrayList<Object>();
65      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
66      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
67      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
68      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
69      private boolean allComponentsCreated;
70      protected final JAXXContext delegateContext = new DefaultJAXXContext();
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------------ Protected components  ------------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      protected DaliHelpBroker broker;
77      protected JButton closeButton;
78      protected final StrategiesLieuxUIHandler handler = createHandler();
79      protected LieuxProgrammeTableUI lieuxProgrammeTableUI;
80      protected StrategiesLieuxUIModel model;
81      protected JButton saveButton;
82      protected StrategiesLieuTableUI strategiesLieuTableUI;
83      @ValidatorField( validatorId = "validator",  propertyName = "tableUIModel",  editorName = "strategiesProgrammeTableUI")
84      protected StrategiesProgrammeTableUI strategiesProgrammeTableUI;
85      @Validator( validatorId = "validator")
86      protected SwingValidator<StrategiesLieuxUIModel> validator;
87      protected List<String> validatorIds = new ArrayList<String>();
88  
89      /*-----------------------------------------------------------------------*/
90      /*------------------------- Private components  -------------------------*/
91      /*-----------------------------------------------------------------------*/
92  
93      private StrategiesLieuxUI $JPanel0 = this;
94      private JPanel $JPanel1;
95      private JPanel $JPanel2;
96  
97      /*-----------------------------------------------------------------------*/
98      /*---------------------------- Constructors  ----------------------------*/
99      /*-----------------------------------------------------------------------*/
100 
101     public StrategiesLieuxUI(ApplicationUI parentUI) {
102         ApplicationUIUtil.setParentUI(this, parentUI);
103             $initialize();
104     }
105 
106     public StrategiesLieuxUI() {
107         $initialize();
108     }
109 
110     public StrategiesLieuxUI(JAXXContext parentContext) {
111         JAXXUtil.initContext(this, parentContext);
112         $initialize();
113     }
114 
115     public StrategiesLieuxUI(boolean param0) {
116         super(param0);
117         $initialize();
118     }
119 
120     public StrategiesLieuxUI(JAXXContext parentContext, boolean param1) {
121         super(param1);
122         JAXXUtil.initContext(this, parentContext);
123         $initialize();
124     }
125 
126     public StrategiesLieuxUI(LayoutManager param0) {
127         super(param0);
128         $initialize();
129     }
130 
131     public StrategiesLieuxUI(JAXXContext parentContext, LayoutManager param1) {
132         super(param1);
133         JAXXUtil.initContext(this, parentContext);
134         $initialize();
135     }
136 
137     public StrategiesLieuxUI(LayoutManager param0, boolean param1) {
138         super(param0 ,param1);
139         $initialize();
140     }
141 
142     public StrategiesLieuxUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
143         super(param1 ,param2);
144         JAXXUtil.initContext(this, parentContext);
145         $initialize();
146     }
147 
148     /*-----------------------------------------------------------------------*/
149     /*--------------------------- Statics methods ---------------------------*/
150     /*-----------------------------------------------------------------------*/
151 
152     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
153         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
154     }
155 
156     /*-----------------------------------------------------------------------*/
157     /*---------------------- JAXXObject implementation ----------------------*/
158     /*-----------------------------------------------------------------------*/
159 
160     @Override
161     public void applyDataBinding(String $binding) {
162         if (allComponentsCreated && $bindings.containsKey($binding)) {
163             getDataBinding($binding).applyDataBinding();
164         }
165         processDataBinding($binding);
166     }
167 
168     @Override
169     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
170         super.firePropertyChange(propertyName, oldValue, newValue);
171     }
172 
173     @Override
174     public Map<String, Object> get$objectMap() {
175         return $objectMap;
176     }
177 
178     @Override
179     public JAXXBinding getDataBinding(String bindingId) {
180         return $bindings.get(bindingId);
181     }
182 
183     @Override
184     public JAXXBinding[] getDataBindings() {
185         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
186     }
187 
188     @Override
189     public Object getObjectById(String id) {
190         return $objectMap.get(id);
191     }
192 
193     @Override
194     public void processDataBinding(String $binding, boolean $force) {
195         if (!$force && $activeBindings.contains($binding)) { 
196             return;
197         }
198         $activeBindings.add($binding);
199         try {
200             if (allComponentsCreated && $bindings.containsKey($binding)) {
201                 getDataBinding($binding).processDataBinding();
202             }
203         } finally {
204             $activeBindings.remove($binding);
205         }
206     }
207 
208     @Override
209     public void processDataBinding(String $binding) {
210         processDataBinding($binding, false);
211     }
212 
213     @Override
214     public void registerDataBinding(JAXXBinding binding) {
215         $bindings.put(binding.getId(), binding);
216     }
217 
218     @Override
219     public void removeDataBinding(String $binding) {
220         if (allComponentsCreated && $bindings.containsKey($binding)) {
221             getDataBinding($binding).removeDataBinding();
222         }
223     }
224 
225     /*-----------------------------------------------------------------------*/
226     /*--------------------- JAXXContext implementation  ---------------------*/
227     /*-----------------------------------------------------------------------*/
228 
229     @Override
230     public <T> T getContextValue(Class<T> clazz) {
231         return delegateContext.getContextValue(clazz, null);
232     }
233 
234     @Override
235     public <T> T getContextValue(Class<T> clazz, String name) {
236         return delegateContext.getContextValue(clazz, name);
237     }
238 
239     @Override
240     public JAXXContext getDelegateContext() {
241         return delegateContext;
242     }
243 
244     @Override
245     public <O extends Container> O getParentContainer(Class<O> clazz) {
246         return SwingUtil.getParentContainer(this, clazz);
247     }
248 
249     @Override
250     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
251         return SwingUtil.getParentContainer(source, clazz);
252     }
253 
254     @Override
255     public <T> void removeContextValue(Class<T> clazz) {
256         delegateContext.removeContextValue(clazz, null);
257     }
258 
259     @Override
260     public <T> void removeContextValue(Class<T> clazz, String name) {
261         delegateContext.removeContextValue(clazz, name);
262     }
263 
264     @Override
265     public <T> void setContextValue(T o) {
266         delegateContext.setContextValue(o, null);
267     }
268 
269     @Override
270     public <T> void setContextValue(T o, String name) {
271         delegateContext.setContextValue(o, name);
272     }
273 
274     /*-----------------------------------------------------------------------*/
275     /*-------------------- JAXXValidator implementation  --------------------*/
276     /*-----------------------------------------------------------------------*/
277 
278     @Override
279     public SwingValidator<?> getValidator(String validatorId) {
280         return (SwingValidator<?>) (validatorIds.contains(validatorId) ? getObjectById(validatorId) : null);
281     }
282 
283     @Override
284     public List<String> getValidatorIds() {
285         return validatorIds;
286     }
287 
288     @Override
289     public void registerValidatorFields() {
290         SwingValidatorUtil.detectValidatorFields(this);
291     }
292 
293     /*-----------------------------------------------------------------------*/
294     /*----------------------- Public acessor methods  -----------------------*/
295     /*-----------------------------------------------------------------------*/
296 
297     public DaliHelpBroker getBroker() {
298         return broker;
299     }
300 
301     public JButton getCloseButton() {
302         return closeButton;
303     }
304 
305     public StrategiesLieuxUIHandler getHandler() {
306         return handler;
307     }
308 
309     public LieuxProgrammeTableUI getLieuxProgrammeTableUI() {
310         return lieuxProgrammeTableUI;
311     }
312 
313     public StrategiesLieuxUIModel getModel() {
314         return model;
315     }
316 
317     public JButton getSaveButton() {
318         return saveButton;
319     }
320 
321     public StrategiesLieuTableUI getStrategiesLieuTableUI() {
322         return strategiesLieuTableUI;
323     }
324 
325     public StrategiesProgrammeTableUI getStrategiesProgrammeTableUI() {
326         return strategiesProgrammeTableUI;
327     }
328 
329     public SwingValidator<StrategiesLieuxUIModel> getValidator() {
330         return validator;
331     }
332 
333     /*-----------------------------------------------------------------------*/
334     /*---------------------------- Other methods ----------------------------*/
335     /*-----------------------------------------------------------------------*/
336 
337     @Override
338     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
339         broker.installUI(component, helpId);
340     }
341 
342     @Override
343     public void showHelp(String helpId) {
344         getBroker().showHelp(this, helpId);
345     }
346 
347     /*-----------------------------------------------------------------------*/
348     /*--------------------- Protected acessors methods  ---------------------*/
349     /*-----------------------------------------------------------------------*/
350 
351     protected JPanel get$JPanel1() {
352         return $JPanel1;
353     }
354 
355     protected JPanel get$JPanel2() {
356         return $JPanel2;
357     }
358 
359     /*-----------------------------------------------------------------------*/
360     /*--------------------- Components creation methods ---------------------*/
361     /*-----------------------------------------------------------------------*/
362 
363     protected void addChildrenToValidator() {
364         if (!allComponentsCreated) {
365             return;
366         }
367         validator.setUiClass(ImageValidationUI.class);
368         validator.setBean(model);
369     }
370 
371     protected void createBroker() {
372         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
373     }
374 
375     protected void createCloseButton() {
376         $objectMap.put("closeButton", closeButton = new JButton());
377         
378         closeButton.setName("closeButton");
379         closeButton.setText(t("dali.common.close"));
380         closeButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.CANCEL);
381         closeButton.putClientProperty("applicationAction", CloseAction.class);
382     }
383 
384     protected StrategiesLieuxUIHandler createHandler() {
385         return new StrategiesLieuxUIHandler();
386     }
387 
388     protected void createLieuxProgrammeTableUI() {
389         $objectMap.put("lieuxProgrammeTableUI", lieuxProgrammeTableUI = new LieuxProgrammeTableUI(this));
390         
391         lieuxProgrammeTableUI.setName("lieuxProgrammeTableUI");
392     }
393 
394     protected void createModel() {
395         $objectMap.put("model", model = getContextValue(StrategiesLieuxUIModel.class));
396     }
397 
398     protected void createSaveButton() {
399         $objectMap.put("saveButton", saveButton = new JButton());
400         
401         saveButton.setName("saveButton");
402         saveButton.setText(t("dali.common.save"));
403         saveButton.setToolTipText(t("dali.action.save.strategies"));
404         saveButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.SAVE);
405         saveButton.putClientProperty("applicationAction", SaveAction.class);
406     }
407 
408     protected void createStrategiesLieuTableUI() {
409         $objectMap.put("strategiesLieuTableUI", strategiesLieuTableUI = new StrategiesLieuTableUI(this));
410         
411         strategiesLieuTableUI.setName("strategiesLieuTableUI");
412     }
413 
414     protected void createStrategiesProgrammeTableUI() {
415         $objectMap.put("strategiesProgrammeTableUI", strategiesProgrammeTableUI = new StrategiesProgrammeTableUI(this));
416         
417         strategiesProgrammeTableUI.setName("strategiesProgrammeTableUI");
418     }
419 
420     protected void createValidator() {
421         $objectMap.put("validator", validator = SwingValidator.newValidator(StrategiesLieuxUIModel.class, null));
422     }
423 
424     /*-----------------------------------------------------------------------*/
425     /*------------------------ Internal jaxx methods ------------------------*/
426     /*-----------------------------------------------------------------------*/
427 
428     private void $completeSetup() {
429         allComponentsCreated = true;
430         if (log.isDebugEnabled()) {
431             log.debug(this);
432         }
433         // inline complete setup of $JPanel0
434         add($JPanel1);
435         add($JPanel2, BorderLayout.PAGE_END);
436         addChildrenToValidator();
437         // inline complete setup of $JPanel1
438         $JPanel1.add(lieuxProgrammeTableUI);
439         $JPanel1.add(strategiesLieuTableUI);
440         $JPanel1.add(SwingUtil.boxComponentWithJxLayer(strategiesProgrammeTableUI));
441         // inline complete setup of $JPanel2
442         $JPanel2.add(closeButton);
443         $JPanel2.add(saveButton);
444         
445         // apply 1 data bindings
446         JAXXUtil.applyDataBinding(this, $bindings.keySet());
447         
448         // apply 5 property setters
449         closeButton.setIcon(SwingUtil.createActionIcon("cancel"));
450         saveButton.setIcon(SwingUtil.createActionIcon("save"));
451         // late initializer
452         // register 1 validator(s)
453         validatorIds = SwingValidatorUtil.detectValidators(this);
454         SwingValidatorUtil.installUI(this);
455     }
456 
457     private void $initialize() {
458         if (allComponentsCreated) {
459             return;
460         }
461         if (log.isDebugEnabled()) {
462             log.debug(this);
463         }
464         handler.beforeInit(this);
465         $objectMap.put("$JPanel0", $JPanel0);
466         createModel();
467         createBroker();
468         createValidator();
469         // inline creation of $JPanel1
470         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
471         
472         $JPanel1.setName("$JPanel1");
473         $JPanel1.setLayout(new GridLayout(3,1));
474         createLieuxProgrammeTableUI();
475         createStrategiesLieuTableUI();
476         createStrategiesProgrammeTableUI();
477         // inline creation of $JPanel2
478         $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
479         
480         $JPanel2.setName("$JPanel2");
481         $JPanel2.setLayout(new GridLayout(1,0));
482         createCloseButton();
483         createSaveButton();
484         // inline creation of $JPanel0
485         setName("$JPanel0");
486         setLayout(new BorderLayout());
487         
488         // registers 1 data bindings
489         $registerDefaultBindings();
490         $completeSetup();
491         handler.afterInit(this);
492     }
493 
494     private void $registerDefaultBindings() {
495         // register 1 data bindings
496         registerDataBinding(new DefaultJAXXBinding(this, BINDING_SAVE_BUTTON_ENABLED, true, true) {
497         
498             @Override
499             public void applyDataBinding() {
500                 if (model != null) {
501                     model.addPropertyChangeListener("modify", this);
502                 }
503                 if (model != null) {
504                     model.addPropertyChangeListener("valid", this);
505                 }
506             }
507         
508             @Override
509             public void processDataBinding() {
510                 if (model != null) {
511                     saveButton.setEnabled(model.isModify() && model.isValid());
512                 }
513             }
514         
515             @Override
516             public void removeDataBinding() {
517                 if (model != null) {
518                     model.removePropertyChangeListener("modify", this);
519                 }
520                 if (model != null) {
521                     model.removePropertyChangeListener("valid", this);
522                 }
523             }
524         });
525     }
526 
527 }