View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.context;
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.context.contextslist.ManageContextsListTableUI;
6   import fr.ifremer.dali.ui.swing.content.manage.context.filtercontent.ManageFilterContentTableUI;
7   import fr.ifremer.dali.ui.swing.content.manage.context.filterslist.ManageFiltersListTableUI;
8   import fr.ifremer.dali.ui.swing.content.manage.context.menu.ManageContextsListMenuUI;
9   import fr.ifremer.dali.ui.swing.util.DaliUI;
10  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
11  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
12  import java.awt.BorderLayout;
13  import java.awt.Component;
14  import java.awt.Container;
15  import java.awt.GridBagConstraints;
16  import java.awt.GridLayout;
17  import java.awt.Insets;
18  import java.awt.LayoutManager;
19  import java.util.ArrayList;
20  import java.util.HashMap;
21  import java.util.List;
22  import java.util.Map;
23  import java.util.TreeMap;
24  import javax.swing.BorderFactory;
25  import javax.swing.Box;
26  import javax.swing.BoxLayout;
27  import javax.swing.JButton;
28  import javax.swing.JPanel;
29  import jaxx.runtime.JAXXBinding;
30  import jaxx.runtime.JAXXContext;
31  import jaxx.runtime.JAXXObject;
32  import jaxx.runtime.JAXXObjectDescriptor;
33  import jaxx.runtime.JAXXUtil;
34  import jaxx.runtime.JAXXValidator;
35  import jaxx.runtime.SwingUtil;
36  import jaxx.runtime.binding.DefaultJAXXBinding;
37  import jaxx.runtime.context.DefaultJAXXContext;
38  import jaxx.runtime.swing.Table;
39  import jaxx.runtime.swing.help.JAXXHelpUI;
40  import jaxx.runtime.validator.swing.SwingValidator;
41  import jaxx.runtime.validator.swing.SwingValidatorUtil;
42  import jaxx.runtime.validator.swing.meta.Validator;
43  import jaxx.runtime.validator.swing.meta.ValidatorField;
44  import jaxx.runtime.validator.swing.ui.ImageValidationUI;
45  import org.apache.commons.logging.Log;
46  import org.apache.commons.logging.LogFactory;
47  import static org.nuiton.i18n.I18n.t;
48  
49  public class ManageContextsUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ManageContextsUIModel, ManageContextsUIHandler>, JAXXObject, JAXXValidator {
50  
51      /*-----------------------------------------------------------------------*/
52      /*------------------ Constants for all public bindings ------------------*/
53      /*-----------------------------------------------------------------------*/
54  
55      public static final String BINDING_SAVE_BUTTON_ENABLED = "saveButton.enabled";
56  
57      /*-----------------------------------------------------------------------*/
58      /*------------------------- Other static fields -------------------------*/
59      /*-----------------------------------------------------------------------*/
60  
61      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAKVWS29bRRQ+NrZTx1DahlQJLVIaSkl4XPNQFygIkriJmmKXCrtRhBcwvneSTLkvZsbptawgfgI/AfZskNixQixYs2CD+AsIsWBbcWbuy7e+ThxiyTeeOed85ztz5n4n3/8FZcHhxiMSBAbvu5I51Li3sbf3ce8RNeUdKkzOfOlxCD+FIhS7ULOSfSHh5W5Thdej8HrDc3zPpe5I9FoTZoUc2FQcUiolvJSNMIWotxPzWuD3eYyakMpD/fafv4vfWF9/VwQIfGR3EUtZOi0qraTUhCKzJFzBTEekbhP3AGlw5h4g3+fUXsMmQtwnDv0SvoKZJlR8whFMwvL0JWsMHR/4Ei7cvPeAuNR+S8L6PjfYPqcO5YZFbGb0mSEeY3bD9FyJYIZDXHJAw2UgjZZeNsKVeLjj+xq3IqHseBa1JWydF7KlcFLcSo97X1Au4dWJwHdwdRdjNrVnGlo9QoNF8CQkvJ7pSWKIENrquRtvpggLToZckwnZom7/4Y6E1lnrdDDwqWJTPJWvmqSNO/Q2Xgx1B4IIOdzN+s7c7JCeTbGZC5kSwwhtU54LScAL4zWpenbPWk/0V9gIkFOXzhwWdi0lu89sSblevpg1zYXw26FDzKpzVlZRghFSI4gjnG4kiedHEzdCVJV67/+ljo2tcdTc9HGv30nOJG1VzbQ9QTf7UiIAzGWuQrirHFcT/1lBjmhqeDOycriWuRqodUaqdakYFbpQ5n3cxrvUHZfHT9AUCuPCU8KoALX1ydW533/688ftWA1rmHs+13VEzFGlfO75+I4zlfr5UAr7ktn1FvHXulAV1MZJoJX+eg6xdmRGcpjvsgo3VLhxl4hDhCjP/PHzL1c//+0ZKG7DrO0Ra5so/x2oykOOp+DZVuB/uK4ZPfv4Aj4v4beEb99nxPdtZhLJPHfDVE/sw7Ch2hIuDVNp6zGePdHrHdV/qJjENZUazo8DfEQHEm4PJ94uzVxJGjriKEBJE0Zj435jq4lZSuqmSbisQ0zPcTQDZBNgW67ntCU5m17113/n2j+sx60p4FEtTnRP21P+FCrMtZlL9aiKplDuaKr5gvYtL502efMHstfaj8T2tn6+N9aEyoQmXBm28a6f1IOSehkmd+Dds3WgvbG7lZ7/pdHzD/PUpOfZHeZ3tMOidgjpaIdELlEEqauEAKf+K0M9NA0mcOix/cHK6tKtW0vxnp5HK6vHQV8dTUP3TP3agsybftoJFtQM9bilZuiD4ab+Fd7/gWFySiTtMIl0QsuKXFmOisvKvNLPWF0NqSKWV/O5xSI/DTGbDDysAi6+j5OXLPWYa2EHPhiDLajn7KmIarunHmY+wuK5EZbPjfDaFOcyix04cPE/Brl3AtIbU3GRJyDUp+BSYmY4Ts7F4vgUFv8BLR0RUQYMAAA=";
62      private static final Log log = LogFactory.getLog(ManageContextsUI.class);
63      private static final long serialVersionUID = 1L;
64  
65      /*-----------------------------------------------------------------------*/
66      /*--------------------------- Internal states ---------------------------*/
67      /*-----------------------------------------------------------------------*/
68  
69      protected List<Object> $activeBindings = new ArrayList<Object>();
70      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
71      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
72      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
73      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
74      private boolean allComponentsCreated;
75      protected final JAXXContext delegateContext = new DefaultJAXXContext();
76  
77      /*-----------------------------------------------------------------------*/
78      /*------------------------ Protected components  ------------------------*/
79      /*-----------------------------------------------------------------------*/
80  
81      protected DaliHelpBroker broker;
82      protected JButton closeButton;
83      protected JPanel filters;
84      protected final ManageContextsUIHandler handler = createHandler();
85      protected ManageContextsListMenuUI manageContextsListMenuUI;
86      @ValidatorField( validatorId = "validator",  propertyName = "contextListModel",  editorName = "manageContextsListUI")
87      protected ManageContextsListTableUI manageContextsListUI;
88      protected ManageFilterContentTableUI manageFilterContentUI;
89      protected ManageFiltersListTableUI manageFiltersListUI;
90      protected ManageContextsUIModel model;
91      protected JButton saveButton;
92      @Validator( validatorId = "validator")
93      protected SwingValidator<ManageContextsUIModel> validator;
94      protected List<String> validatorIds = new ArrayList<String>();
95  
96      /*-----------------------------------------------------------------------*/
97      /*------------------------- Private components  -------------------------*/
98      /*-----------------------------------------------------------------------*/
99  
100     private ManageContextsUI $JPanel0 = this;
101     private JPanel $JPanel1;
102     private JPanel $JPanel2;
103     private Table $Table0;
104 
105     /*-----------------------------------------------------------------------*/
106     /*---------------------------- Constructors  ----------------------------*/
107     /*-----------------------------------------------------------------------*/
108 
109     public ManageContextsUI(ApplicationUI parentUI) {
110         ApplicationUIUtil.setParentUI(this, parentUI);
111             $initialize();
112     }
113 
114     public ManageContextsUI() {
115         $initialize();
116     }
117 
118     public ManageContextsUI(JAXXContext parentContext) {
119         JAXXUtil.initContext(this, parentContext);
120         $initialize();
121     }
122 
123     public ManageContextsUI(boolean param0) {
124         super(param0);
125         $initialize();
126     }
127 
128     public ManageContextsUI(JAXXContext parentContext, boolean param1) {
129         super(param1);
130         JAXXUtil.initContext(this, parentContext);
131         $initialize();
132     }
133 
134     public ManageContextsUI(LayoutManager param0) {
135         super(param0);
136         $initialize();
137     }
138 
139     public ManageContextsUI(JAXXContext parentContext, LayoutManager param1) {
140         super(param1);
141         JAXXUtil.initContext(this, parentContext);
142         $initialize();
143     }
144 
145     public ManageContextsUI(LayoutManager param0, boolean param1) {
146         super(param0 ,param1);
147         $initialize();
148     }
149 
150     public ManageContextsUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
151         super(param1 ,param2);
152         JAXXUtil.initContext(this, parentContext);
153         $initialize();
154     }
155 
156     /*-----------------------------------------------------------------------*/
157     /*--------------------------- Statics methods ---------------------------*/
158     /*-----------------------------------------------------------------------*/
159 
160     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
161         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
162     }
163 
164     /*-----------------------------------------------------------------------*/
165     /*---------------------- JAXXObject implementation ----------------------*/
166     /*-----------------------------------------------------------------------*/
167 
168     @Override
169     public void applyDataBinding(String $binding) {
170         if (allComponentsCreated && $bindings.containsKey($binding)) {
171             getDataBinding($binding).applyDataBinding();
172         }
173         processDataBinding($binding);
174     }
175 
176     @Override
177     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
178         super.firePropertyChange(propertyName, oldValue, newValue);
179     }
180 
181     @Override
182     public Map<String, Object> get$objectMap() {
183         return $objectMap;
184     }
185 
186     @Override
187     public JAXXBinding getDataBinding(String bindingId) {
188         return $bindings.get(bindingId);
189     }
190 
191     @Override
192     public JAXXBinding[] getDataBindings() {
193         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
194     }
195 
196     @Override
197     public Object getObjectById(String id) {
198         return $objectMap.get(id);
199     }
200 
201     @Override
202     public void processDataBinding(String $binding, boolean $force) {
203         if (!$force && $activeBindings.contains($binding)) { 
204             return;
205         }
206         $activeBindings.add($binding);
207         try {
208             if (allComponentsCreated && $bindings.containsKey($binding)) {
209                 getDataBinding($binding).processDataBinding();
210             }
211         } finally {
212             $activeBindings.remove($binding);
213         }
214     }
215 
216     @Override
217     public void processDataBinding(String $binding) {
218         processDataBinding($binding, false);
219     }
220 
221     @Override
222     public void registerDataBinding(JAXXBinding binding) {
223         $bindings.put(binding.getId(), binding);
224     }
225 
226     @Override
227     public void removeDataBinding(String $binding) {
228         if (allComponentsCreated && $bindings.containsKey($binding)) {
229             getDataBinding($binding).removeDataBinding();
230         }
231     }
232 
233     /*-----------------------------------------------------------------------*/
234     /*--------------------- JAXXContext implementation  ---------------------*/
235     /*-----------------------------------------------------------------------*/
236 
237     @Override
238     public <T> T getContextValue(Class<T> clazz) {
239         return delegateContext.getContextValue(clazz, null);
240     }
241 
242     @Override
243     public <T> T getContextValue(Class<T> clazz, String name) {
244         return delegateContext.getContextValue(clazz, name);
245     }
246 
247     @Override
248     public JAXXContext getDelegateContext() {
249         return delegateContext;
250     }
251 
252     @Override
253     public <O extends Container> O getParentContainer(Class<O> clazz) {
254         return SwingUtil.getParentContainer(this, clazz);
255     }
256 
257     @Override
258     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
259         return SwingUtil.getParentContainer(source, clazz);
260     }
261 
262     @Override
263     public <T> void removeContextValue(Class<T> clazz) {
264         delegateContext.removeContextValue(clazz, null);
265     }
266 
267     @Override
268     public <T> void removeContextValue(Class<T> clazz, String name) {
269         delegateContext.removeContextValue(clazz, name);
270     }
271 
272     @Override
273     public <T> void setContextValue(T o) {
274         delegateContext.setContextValue(o, null);
275     }
276 
277     @Override
278     public <T> void setContextValue(T o, String name) {
279         delegateContext.setContextValue(o, name);
280     }
281 
282     /*-----------------------------------------------------------------------*/
283     /*-------------------- JAXXValidator implementation  --------------------*/
284     /*-----------------------------------------------------------------------*/
285 
286     @Override
287     public SwingValidator<?> getValidator(String validatorId) {
288         return (SwingValidator<?>) (validatorIds.contains(validatorId) ? getObjectById(validatorId) : null);
289     }
290 
291     @Override
292     public List<String> getValidatorIds() {
293         return validatorIds;
294     }
295 
296     @Override
297     public void registerValidatorFields() {
298         SwingValidatorUtil.detectValidatorFields(this);
299     }
300 
301     /*-----------------------------------------------------------------------*/
302     /*----------------------- Public acessor methods  -----------------------*/
303     /*-----------------------------------------------------------------------*/
304 
305     public DaliHelpBroker getBroker() {
306         return broker;
307     }
308 
309     public JButton getCloseButton() {
310         return closeButton;
311     }
312 
313     public JPanel getFilters() {
314         return filters;
315     }
316 
317     public ManageContextsUIHandler getHandler() {
318         return handler;
319     }
320 
321     public ManageContextsListMenuUI getManageContextsListMenuUI() {
322         return manageContextsListMenuUI;
323     }
324 
325     public ManageContextsListTableUI getManageContextsListUI() {
326         return manageContextsListUI;
327     }
328 
329     public ManageFilterContentTableUI getManageFilterContentUI() {
330         return manageFilterContentUI;
331     }
332 
333     public ManageFiltersListTableUI getManageFiltersListUI() {
334         return manageFiltersListUI;
335     }
336 
337     public ManageContextsUIModel getModel() {
338         return model;
339     }
340 
341     public JButton getSaveButton() {
342         return saveButton;
343     }
344 
345     public SwingValidator<ManageContextsUIModel> getValidator() {
346         return validator;
347     }
348 
349     /*-----------------------------------------------------------------------*/
350     /*---------------------------- Other methods ----------------------------*/
351     /*-----------------------------------------------------------------------*/
352 
353     @Override
354     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
355         broker.installUI(component, helpId);
356     }
357 
358     @Override
359     public void showHelp(String helpId) {
360         getBroker().showHelp(this, helpId);
361     }
362 
363     /*-----------------------------------------------------------------------*/
364     /*--------------------- Protected acessors methods  ---------------------*/
365     /*-----------------------------------------------------------------------*/
366 
367     protected JPanel get$JPanel1() {
368         return $JPanel1;
369     }
370 
371     protected JPanel get$JPanel2() {
372         return $JPanel2;
373     }
374 
375     protected Table get$Table0() {
376         return $Table0;
377     }
378 
379     /*-----------------------------------------------------------------------*/
380     /*--------------------- Components creation methods ---------------------*/
381     /*-----------------------------------------------------------------------*/
382 
383     protected void addChildrenToFilters() {
384         if (!allComponentsCreated) {
385             return;
386         }
387         filters.add(manageFiltersListUI);
388         filters.add(manageFilterContentUI);
389     }
390 
391     protected void addChildrenToValidator() {
392         if (!allComponentsCreated) {
393             return;
394         }
395         validator.setUiClass(ImageValidationUI.class);
396         validator.setBean(model);
397     }
398 
399     protected void createBroker() {
400         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
401     }
402 
403     protected void createCloseButton() {
404         $objectMap.put("closeButton", closeButton = new JButton());
405         
406         closeButton.setName("closeButton");
407         closeButton.setText(t("dali.common.close"));
408         closeButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.CANCEL);
409         closeButton.putClientProperty("applicationAction", CloseAction.class);
410     }
411 
412     protected void createFilters() {
413         $objectMap.put("filters", filters = new JPanel());
414         
415         filters.setName("filters");
416         filters.setLayout(new GridLayout(0,1));
417     }
418 
419     protected ManageContextsUIHandler createHandler() {
420         return new ManageContextsUIHandler();
421     }
422 
423     protected void createManageContextsListMenuUI() {
424         $objectMap.put("manageContextsListMenuUI", manageContextsListMenuUI = new ManageContextsListMenuUI(this));
425         
426         manageContextsListMenuUI.setName("manageContextsListMenuUI");
427     }
428 
429     protected void createManageContextsListUI() {
430         $objectMap.put("manageContextsListUI", manageContextsListUI = new ManageContextsListTableUI(this));
431         
432         manageContextsListUI.setName("manageContextsListUI");
433     }
434 
435     protected void createManageFilterContentUI() {
436         $objectMap.put("manageFilterContentUI", manageFilterContentUI = new ManageFilterContentTableUI(this));
437         
438         manageFilterContentUI.setName("manageFilterContentUI");
439     }
440 
441     protected void createManageFiltersListUI() {
442         $objectMap.put("manageFiltersListUI", manageFiltersListUI = new ManageFiltersListTableUI(this));
443         
444         manageFiltersListUI.setName("manageFiltersListUI");
445     }
446 
447     protected void createModel() {
448         $objectMap.put("model", model = getContextValue(ManageContextsUIModel.class));
449     }
450 
451     protected void createSaveButton() {
452         $objectMap.put("saveButton", saveButton = new JButton());
453         
454         saveButton.setName("saveButton");
455         saveButton.setText(t("dali.common.save"));
456         saveButton.setToolTipText(t("dali.action.save.contexts"));
457         saveButton.putClientProperty("applicationActionKey", fr.ifremer.dali.ui.swing.util.DaliKeyStrokes.SAVE);
458         saveButton.putClientProperty("applicationAction", SaveAction.class);
459     }
460 
461     protected void createValidator() {
462         $objectMap.put("validator", validator = SwingValidator.newValidator(ManageContextsUIModel.class, null));
463     }
464 
465     /*-----------------------------------------------------------------------*/
466     /*------------------------ Internal jaxx methods ------------------------*/
467     /*-----------------------------------------------------------------------*/
468 
469     private void $completeSetup() {
470         allComponentsCreated = true;
471         if (log.isDebugEnabled()) {
472             log.debug(this);
473         }
474         // inline complete setup of $JPanel0
475         add(manageContextsListMenuUI, BorderLayout.LINE_START);
476         add($JPanel1, BorderLayout.CENTER);
477         addChildrenToValidator();
478         // inline complete setup of $JPanel1
479         $JPanel1.add($Table0, BorderLayout.CENTER);
480         $JPanel1.add($JPanel2, BorderLayout.PAGE_END);
481         // inline complete setup of $Table0
482         $Table0.add(SwingUtil.boxComponentWithJxLayer(manageContextsListUI), new GridBagConstraints(0, 0, 1, 1, 1.0, 0.2, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
483         $Table0.add(filters, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.8, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
484         addChildrenToFilters();
485         // inline complete setup of $JPanel2
486         $JPanel2.add(closeButton);
487         $JPanel2.add(saveButton);
488         
489         // apply 1 data bindings
490         JAXXUtil.applyDataBinding(this, $bindings.keySet());
491         
492         // apply 9 property setters
493         closeButton.setAlignmentX(Component.CENTER_ALIGNMENT);
494         saveButton.setAlignmentX(Component.CENTER_ALIGNMENT);
495         filters.setBorder(BorderFactory.createTitledBorder(t("dali.context.contextsList.filters.title")));
496         closeButton.setIcon(SwingUtil.createActionIcon("cancel"));
497         saveButton.setIcon(SwingUtil.createActionIcon("save"));
498         // late initializer
499         // register 1 validator(s)
500         validatorIds = SwingValidatorUtil.detectValidators(this);
501         SwingValidatorUtil.installUI(this);
502     }
503 
504     private void $initialize() {
505         if (allComponentsCreated) {
506             return;
507         }
508         if (log.isDebugEnabled()) {
509             log.debug(this);
510         }
511         handler.beforeInit(this);
512         $objectMap.put("$JPanel0", $JPanel0);
513         createModel();
514         createBroker();
515         createValidator();
516         createManageContextsListMenuUI();
517         // inline creation of $JPanel1
518         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
519         
520         $JPanel1.setName("$JPanel1");
521         $JPanel1.setLayout(new BorderLayout());
522         // inline creation of $Table0
523         $objectMap.put("$Table0", $Table0 = new Table());
524         
525         $Table0.setName("$Table0");
526         createManageContextsListUI();
527         createFilters();
528         createManageFiltersListUI();
529         createManageFilterContentUI();
530         // inline creation of $JPanel2
531         $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
532         
533         $JPanel2.setName("$JPanel2");
534         $JPanel2.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             }
560         
561             @Override
562             public void processDataBinding() {
563                 if (model != null) {
564                     saveButton.setEnabled(model.isModify() && model.isValid());
565                 }
566             }
567         
568             @Override
569             public void removeDataBinding() {
570                 if (model != null) {
571                     model.removePropertyChangeListener("modify", this);
572                 }
573                 if (model != null) {
574                     model.removePropertyChangeListener("valid", this);
575                 }
576             }
577         });
578     }
579 
580 }