View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.referential.taxon.taxonsDialog;
2   
3   /*-
4    * #%L
5    * Reef DB :: UI
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2022 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  
27  import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
28  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
29  import fr.ifremer.reefdb.ui.swing.ReefDbHelpBroker;
30  import fr.ifremer.reefdb.ui.swing.ReefDbUIContext;
31  import fr.ifremer.reefdb.ui.swing.content.manage.filter.taxon.element.FilterElementTaxonUI;
32  import fr.ifremer.reefdb.ui.swing.content.manage.referential.taxon.national.TaxonsNationalUI;
33  import fr.ifremer.reefdb.ui.swing.util.ReefDbUI;
34  import java.awt.BorderLayout;
35  import java.awt.Component;
36  import java.awt.Container;
37  import java.awt.Dialog;
38  import java.awt.Dialog.ModalityType;
39  import java.awt.FlowLayout;
40  import java.awt.Frame;
41  import java.awt.GraphicsConfiguration;
42  import java.awt.GridLayout;
43  import java.awt.Window;
44  import java.awt.event.ActionEvent;
45  import java.awt.event.ActionListener;
46  import java.util.ArrayList;
47  import java.util.HashMap;
48  import java.util.List;
49  import java.util.Map;
50  import java.util.TreeMap;
51  import javax.swing.Box;
52  import javax.swing.BoxLayout;
53  import javax.swing.JButton;
54  import javax.swing.JDialog;
55  import javax.swing.JPanel;
56  import javax.swing.SwingConstants;
57  import jaxx.runtime.JAXXBinding;
58  import jaxx.runtime.JAXXContext;
59  import jaxx.runtime.JAXXObject;
60  import jaxx.runtime.JAXXObjectDescriptor;
61  import jaxx.runtime.JAXXUtil;
62  import jaxx.runtime.SwingUtil;
63  import jaxx.runtime.binding.DefaultJAXXBinding;
64  import jaxx.runtime.context.DefaultJAXXContext;
65  import jaxx.runtime.swing.CardLayout2Ext;
66  import org.apache.commons.logging.Log;
67  import org.apache.commons.logging.LogFactory;
68  import static org.nuiton.i18n.I18n.t;
69  
70  public class TaxonsDialogUI extends JDialog implements ReefDbUI<TaxonsDialogUIModel, TaxonsDialogUIHandler>, JAXXObject {
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------ Constants for all public bindings ------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      public static final String BINDING_ACTION_VALIDATE_ENABLED = "actionValidate.enabled";
77  
78      /*-----------------------------------------------------------------------*/
79      /*------------------------- Other static fields -------------------------*/
80      /*-----------------------------------------------------------------------*/
81  
82      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAALVVTW8UORCtGTJJJuE7ELEiLASQACF5YFdIK2W1fIRkN2gCiCSAGA54uj2Jkdv2ut3QYQXiJ+xPWO5ckLhxQhw4c+CC9i+sVhy4Isrdzkxm0kMiIUYaT+yq915V2VV5/h9UYgOT92maEpNIyyNGrly8ffta8z4L7GUWB4Zrqwzkn1IZyg0YDdvnsYVjjbqD1zy8Nq0irSST69BTdRiJ7apg8Qpj1sKhbkQQx7WFtnkq1YlZY20HVcT6z8f/y3+HT5+VAVKN0VUxlSOboTqZDNShzEMLe1HpAa0JKpcxDMPlMsa7w51NCxrHV2nE/oQnMFSHQU0Nklk4uvWUM44Mn2oL2y1NlYwvcyrUsoVbLUN4y7CIGWIYa4VNknASP8QYSKCkRUoSUUmXGZpbzIkjkmQkZD0VWVy3WZrTOpMctFCJVMiEhbvfSWne0Xfkdgke2+tUMlGnqyrBUnW/rVxwmpowt/80k9oOejQXyvB4L+4KUg+5kh06v2qv+yJtCmZh6VsylNRyJXGbZ3fVb5fmnNTetqK/vlkuLDMWFrYu2cogXo0JhKAt55nJd5lyr+Dw8TzxM26/rzv9ERq4KGdSjmUe6yrWJay8ks7vYNt9Z+5+kwoeUps96cPew8DBrlvChiSdhux0TKkBFZPgsYUDjY09fANNefce6OleR5hZP4+PvX/178vZtZYdRu39ha7rJg62kjZKY8W5k96V92tiuajNUz3VwMbHigb5OJooCGzBmzE41Nvj4MTByR80XkGKytCH12/G773bBuVZGBGKhrPU+c9B1a4YrIISYarPX8gi2v5wGNfd+N1moYpW/ih/gAPWJPhTsdy67aR/ET701fzufzcq0b6h8u6kwkNTLNxEQeHa0Terbz+NLby4sFa8EibzQ1/3TgErd2CQS8ElyyaeH2aFE25UxywJVWdoFY0x6Jlj2nfwiWw9vaFOA+jPz/4i5yWLlOQBXpKvTaAiPCGBUDEjUdvsX/ac6yEYDKgMWFYklrqXXoB1s0Apscj1Yl+fNHHR/ZzVzf11DrpaaLMkKhuSONwt8sA3Vt88aBAwbdt5jBfDe1Pp6zbEpHt3+A9s31/ZkCc8ngm5dYcnTz0uSrdnBGyWcgmDFn6M7/wVEfRIk8sQJ8xvG9hLbh3ZlNEd33TLrWKGsW9mmNhCVgM8yKdjH44ftxRF+BWGSWT4Auha7HhdCQAA";
83      private static final Log log = LogFactory.getLog(TaxonsDialogUI.class);
84      private static final long serialVersionUID = 1L;
85  
86      /*-----------------------------------------------------------------------*/
87      /*--------------------------- Internal states ---------------------------*/
88      /*-----------------------------------------------------------------------*/
89  
90      protected List<Object> $activeBindings = new ArrayList<Object>();
91      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
92      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
93      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
94      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
95      private boolean allComponentsCreated;
96      protected final JAXXContext delegateContext = new DefaultJAXXContext();
97  
98      /*-----------------------------------------------------------------------*/
99      /*------------------------ Protected components  ------------------------*/
100     /*-----------------------------------------------------------------------*/
101 
102     protected JButton actionExit;
103     protected JButton actionValidate;
104     protected final TaxonsDialogUIHandler handler = createHandler();
105     protected CardLayout2Ext listPanelLayout;
106     protected TaxonsDialogUIModel model;
107     protected TaxonsDialogUI taxonsDialog = this;
108     protected FilterElementTaxonUI taxonsFilter;
109     protected JPanel taxonsPanel;
110     protected TaxonsNationalUI taxonsTable;
111 
112     /*-----------------------------------------------------------------------*/
113     /*------------------------- Private components  -------------------------*/
114     /*-----------------------------------------------------------------------*/
115 
116     private JPanel $JPanel0;
117 
118     /*-----------------------------------------------------------------------*/
119     /*---------------------------- Constructors  ----------------------------*/
120     /*-----------------------------------------------------------------------*/
121 
122     public TaxonsDialogUI(ApplicationUI parentUI) {
123         ApplicationUIUtil.setParentUI(this, parentUI);
124             $initialize();
125     }
126 
127     public TaxonsDialogUI(Frame param0, String param1, boolean param2) {
128         super(param0 ,param1 ,param2);
129         $initialize();
130     }
131 
132     public TaxonsDialogUI(JAXXContext parentContext, Frame param1, String param2, boolean param3) {
133         super(param1 ,param2 ,param3);
134         JAXXUtil.initContext(this, parentContext);
135         $initialize();
136     }
137 
138     public TaxonsDialogUI(Frame param0, String param1) {
139         super(param0 ,param1);
140         $initialize();
141     }
142 
143     public TaxonsDialogUI(JAXXContext parentContext, Frame param1, String param2) {
144         super(param1 ,param2);
145         JAXXUtil.initContext(this, parentContext);
146         $initialize();
147     }
148 
149     public TaxonsDialogUI(Frame param0, String param1, boolean param2, GraphicsConfiguration param3) {
150         super(param0 ,param1 ,param2 ,param3);
151         $initialize();
152     }
153 
154     public TaxonsDialogUI(JAXXContext parentContext, Frame param1, String param2, boolean param3, GraphicsConfiguration param4) {
155         super(param1 ,param2 ,param3 ,param4);
156         JAXXUtil.initContext(this, parentContext);
157         $initialize();
158     }
159 
160     public TaxonsDialogUI(Dialog param0) {
161         super(param0);
162         $initialize();
163     }
164 
165     public TaxonsDialogUI(JAXXContext parentContext, Dialog param1) {
166         super(param1);
167         JAXXUtil.initContext(this, parentContext);
168         $initialize();
169     }
170 
171     public TaxonsDialogUI(Frame param0, boolean param1) {
172         super(param0 ,param1);
173         $initialize();
174     }
175 
176     public TaxonsDialogUI(JAXXContext parentContext, Frame param1, boolean param2) {
177         super(param1 ,param2);
178         JAXXUtil.initContext(this, parentContext);
179         $initialize();
180     }
181 
182     public TaxonsDialogUI() {
183         $initialize();
184     }
185 
186     public TaxonsDialogUI(JAXXContext parentContext) {
187         JAXXUtil.initContext(this, parentContext);
188         $initialize();
189     }
190 
191     public TaxonsDialogUI(Frame param0) {
192         super(param0);
193         $initialize();
194     }
195 
196     public TaxonsDialogUI(JAXXContext parentContext, Frame param1) {
197         super(param1);
198         JAXXUtil.initContext(this, parentContext);
199         $initialize();
200     }
201 
202     public TaxonsDialogUI(Dialog param0, String param1, boolean param2, GraphicsConfiguration param3) {
203         super(param0 ,param1 ,param2 ,param3);
204         $initialize();
205     }
206 
207     public TaxonsDialogUI(JAXXContext parentContext, Dialog param1, String param2, boolean param3, GraphicsConfiguration param4) {
208         super(param1 ,param2 ,param3 ,param4);
209         JAXXUtil.initContext(this, parentContext);
210         $initialize();
211     }
212 
213     public TaxonsDialogUI(Window param0) {
214         super(param0);
215         $initialize();
216     }
217 
218     public TaxonsDialogUI(JAXXContext parentContext, Window param1) {
219         super(param1);
220         JAXXUtil.initContext(this, parentContext);
221         $initialize();
222     }
223 
224     public TaxonsDialogUI(Window param0, ModalityType param1) {
225         super(param0 ,param1);
226         $initialize();
227     }
228 
229     public TaxonsDialogUI(JAXXContext parentContext, Window param1, ModalityType param2) {
230         super(param1 ,param2);
231         JAXXUtil.initContext(this, parentContext);
232         $initialize();
233     }
234 
235     public TaxonsDialogUI(Window param0, String param1) {
236         super(param0 ,param1);
237         $initialize();
238     }
239 
240     public TaxonsDialogUI(JAXXContext parentContext, Window param1, String param2) {
241         super(param1 ,param2);
242         JAXXUtil.initContext(this, parentContext);
243         $initialize();
244     }
245 
246     public TaxonsDialogUI(Window param0, String param1, ModalityType param2) {
247         super(param0 ,param1 ,param2);
248         $initialize();
249     }
250 
251     public TaxonsDialogUI(JAXXContext parentContext, Window param1, String param2, ModalityType param3) {
252         super(param1 ,param2 ,param3);
253         JAXXUtil.initContext(this, parentContext);
254         $initialize();
255     }
256 
257     public TaxonsDialogUI(Window param0, String param1, ModalityType param2, GraphicsConfiguration param3) {
258         super(param0 ,param1 ,param2 ,param3);
259         $initialize();
260     }
261 
262     public TaxonsDialogUI(JAXXContext parentContext, Window param1, String param2, ModalityType param3, GraphicsConfiguration param4) {
263         super(param1 ,param2 ,param3 ,param4);
264         JAXXUtil.initContext(this, parentContext);
265         $initialize();
266     }
267 
268     public TaxonsDialogUI(Dialog param0, boolean param1) {
269         super(param0 ,param1);
270         $initialize();
271     }
272 
273     public TaxonsDialogUI(JAXXContext parentContext, Dialog param1, boolean param2) {
274         super(param1 ,param2);
275         JAXXUtil.initContext(this, parentContext);
276         $initialize();
277     }
278 
279     public TaxonsDialogUI(Dialog param0, String param1) {
280         super(param0 ,param1);
281         $initialize();
282     }
283 
284     public TaxonsDialogUI(JAXXContext parentContext, Dialog param1, String param2) {
285         super(param1 ,param2);
286         JAXXUtil.initContext(this, parentContext);
287         $initialize();
288     }
289 
290     public TaxonsDialogUI(Dialog param0, String param1, boolean param2) {
291         super(param0 ,param1 ,param2);
292         $initialize();
293     }
294 
295     public TaxonsDialogUI(JAXXContext parentContext, Dialog param1, String param2, boolean param3) {
296         super(param1 ,param2 ,param3);
297         JAXXUtil.initContext(this, parentContext);
298         $initialize();
299     }
300 
301     /*-----------------------------------------------------------------------*/
302     /*--------------------------- Statics methods ---------------------------*/
303     /*-----------------------------------------------------------------------*/
304 
305     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
306         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
307     }
308 
309     /*-----------------------------------------------------------------------*/
310     /*---------------------- JAXXObject implementation ----------------------*/
311     /*-----------------------------------------------------------------------*/
312 
313     @Override
314     public void applyDataBinding(String $binding) {
315         if (allComponentsCreated && $bindings.containsKey($binding)) {
316             getDataBinding($binding).applyDataBinding();
317         }
318         processDataBinding($binding);
319     }
320 
321     @Override
322     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
323         super.firePropertyChange(propertyName, oldValue, newValue);
324     }
325 
326     @Override
327     public Map<String, Object> get$objectMap() {
328         return $objectMap;
329     }
330 
331     @Override
332     public JAXXBinding getDataBinding(String bindingId) {
333         return $bindings.get(bindingId);
334     }
335 
336     @Override
337     public JAXXBinding[] getDataBindings() {
338         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
339     }
340 
341     @Override
342     public Object getObjectById(String id) {
343         return $objectMap.get(id);
344     }
345 
346     @Override
347     public void processDataBinding(String $binding, boolean $force) {
348         if (!$force && $activeBindings.contains($binding)) { 
349             return;
350         }
351         $activeBindings.add($binding);
352         try {
353             if (allComponentsCreated && $bindings.containsKey($binding)) {
354                 getDataBinding($binding).processDataBinding();
355             }
356         } finally {
357             $activeBindings.remove($binding);
358         }
359     }
360 
361     @Override
362     public void processDataBinding(String $binding) {
363         processDataBinding($binding, false);
364     }
365 
366     @Override
367     public void registerDataBinding(JAXXBinding binding) {
368         $bindings.put(binding.getId(), binding);
369     }
370 
371     @Override
372     public void removeDataBinding(String $binding) {
373         if (allComponentsCreated && $bindings.containsKey($binding)) {
374             getDataBinding($binding).removeDataBinding();
375         }
376     }
377 
378     /*-----------------------------------------------------------------------*/
379     /*--------------------- JAXXContext implementation  ---------------------*/
380     /*-----------------------------------------------------------------------*/
381 
382     @Override
383     public <T> T getContextValue(Class<T> clazz) {
384         return delegateContext.getContextValue(clazz, null);
385     }
386 
387     @Override
388     public <T> T getContextValue(Class<T> clazz, String name) {
389         return delegateContext.getContextValue(clazz, name);
390     }
391 
392     @Override
393     public JAXXContext getDelegateContext() {
394         return delegateContext;
395     }
396 
397     @Override
398     public <O extends Container> O getParentContainer(Class<O> clazz) {
399         return SwingUtil.getParentContainer(this, clazz);
400     }
401 
402     @Override
403     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
404         return SwingUtil.getParentContainer(source, clazz);
405     }
406 
407     @Override
408     public <T> void removeContextValue(Class<T> clazz) {
409         delegateContext.removeContextValue(clazz, null);
410     }
411 
412     @Override
413     public <T> void removeContextValue(Class<T> clazz, String name) {
414         delegateContext.removeContextValue(clazz, name);
415     }
416 
417     @Override
418     public <T> void setContextValue(T o) {
419         delegateContext.setContextValue(o, null);
420     }
421 
422     @Override
423     public <T> void setContextValue(T o, String name) {
424         delegateContext.setContextValue(o, name);
425     }
426 
427     /*-----------------------------------------------------------------------*/
428     /*---------------------------- Event methods ----------------------------*/
429     /*-----------------------------------------------------------------------*/
430 
431     public void doActionPerformed__on__actionExit(ActionEvent event) {
432         if (log.isDebugEnabled()) {
433             log.debug(event);
434         }
435         handler.cancel();
436     }
437 
438     public void doActionPerformed__on__actionValidate(ActionEvent event) {
439         if (log.isDebugEnabled()) {
440             log.debug(event);
441         }
442         handler.valid();
443     }
444 
445     /*-----------------------------------------------------------------------*/
446     /*----------------------- Public acessor methods  -----------------------*/
447     /*-----------------------------------------------------------------------*/
448 
449     public JButton getActionExit() {
450         return actionExit;
451     }
452 
453     public JButton getActionValidate() {
454         return actionValidate;
455     }
456 
457     public TaxonsDialogUIHandler getHandler() {
458         return handler;
459     }
460 
461     public CardLayout2Ext getListPanelLayout() {
462         return listPanelLayout;
463     }
464 
465     public TaxonsDialogUIModel getModel() {
466         return model;
467     }
468 
469     public FilterElementTaxonUI getTaxonsFilter() {
470         return taxonsFilter;
471     }
472 
473     public JPanel getTaxonsPanel() {
474         return taxonsPanel;
475     }
476 
477     public TaxonsNationalUI getTaxonsTable() {
478         return taxonsTable;
479     }
480 
481     /*-----------------------------------------------------------------------*/
482     /*--------------------- Protected acessors methods  ---------------------*/
483     /*-----------------------------------------------------------------------*/
484 
485     protected JPanel get$JPanel0() {
486         return $JPanel0;
487     }
488 
489     /*-----------------------------------------------------------------------*/
490     /*--------------------- Components creation methods ---------------------*/
491     /*-----------------------------------------------------------------------*/
492 
493     protected void addChildrenToTaxonsDialog() {
494         if (!allComponentsCreated) {
495             return;
496         }
497         add(taxonsPanel, BorderLayout.CENTER);
498         add($JPanel0, BorderLayout.PAGE_END);
499     }
500 
501     protected void addChildrenToTaxonsPanel() {
502         if (!allComponentsCreated) {
503             return;
504         }
505         taxonsPanel.add(taxonsTable, TaxonsDialogUIHandler.TABLE);
506         taxonsPanel.add(taxonsFilter, TaxonsDialogUIHandler.FILTER);
507     }
508 
509     protected void createActionExit() {
510         $objectMap.put("actionExit", actionExit = new JButton());
511         
512         actionExit.setName("actionExit");
513         actionExit.setText(t("reefdb.common.close"));
514         actionExit.setToolTipText(t("reefdb.common.close"));
515         actionExit.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__actionExit"));
516     }
517 
518     protected void createActionValidate() {
519         $objectMap.put("actionValidate", actionValidate = new JButton());
520         
521         actionValidate.setName("actionValidate");
522         actionValidate.setText(t("reefdb.common.validate"));
523         actionValidate.setToolTipText(t("reefdb.common.validate"));
524         actionValidate.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__actionValidate"));
525     }
526 
527     protected TaxonsDialogUIHandler createHandler() {
528         return new TaxonsDialogUIHandler();
529     }
530 
531     protected void createListPanelLayout() {
532         $objectMap.put("listPanelLayout", listPanelLayout = new CardLayout2Ext(this, "taxonsPanel"));
533     }
534 
535     protected void createModel() {
536         $objectMap.put("model", model = getContextValue(TaxonsDialogUIModel.class));
537     }
538 
539     protected void createTaxonsFilter() {
540         $objectMap.put("taxonsFilter", taxonsFilter = new FilterElementTaxonUI(this));
541         
542         taxonsFilter.setName("taxonsFilter");
543     }
544 
545     protected void createTaxonsPanel() {
546         $objectMap.put("taxonsPanel", taxonsPanel = new JPanel());
547         
548         taxonsPanel.setName("taxonsPanel");
549         taxonsPanel.setLayout(listPanelLayout);
550     }
551 
552     protected void createTaxonsTable() {
553         $objectMap.put("taxonsTable", taxonsTable = new TaxonsNationalUI(this));
554         
555         taxonsTable.setName("taxonsTable");
556     }
557 
558     /*-----------------------------------------------------------------------*/
559     /*------------------------ Internal jaxx methods ------------------------*/
560     /*-----------------------------------------------------------------------*/
561 
562     private void $completeSetup() {
563         allComponentsCreated = true;
564         if (log.isDebugEnabled()) {
565             log.debug(this);
566         }
567         addChildrenToTaxonsDialog();
568         addChildrenToTaxonsPanel();
569         // inline complete setup of $JPanel0
570         $JPanel0.add(actionExit);
571         $JPanel0.add(actionValidate);
572         
573         // apply 1 data bindings
574         JAXXUtil.applyDataBinding(this, $bindings.keySet());
575         
576         // apply 7 property setters
577         actionExit.setMnemonic(SwingUtil.getFirstCharAt(t("reefdb.common.close.mnemonic"),'Z'));
578         actionExit.setIcon(SwingUtil.createActionIcon("cancel"));
579         actionValidate.setMnemonic(SwingUtil.getFirstCharAt(t("reefdb.common.validate.mnemonic"),'Z'));
580         actionValidate.setIcon(SwingUtil.createActionIcon("accept"));
581         // late initializer
582         taxonsDialog.pack();
583     }
584 
585     private void $initialize() {
586         if (allComponentsCreated) {
587             return;
588         }
589         if (log.isDebugEnabled()) {
590             log.debug(this);
591         }
592         handler.beforeInit(this);
593         $objectMap.put("taxonsDialog", taxonsDialog);
594         createModel();
595         createListPanelLayout();
596         createTaxonsPanel();
597         createTaxonsTable();
598         createTaxonsFilter();
599         // inline creation of $JPanel0
600         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
601         
602         $JPanel0.setName("$JPanel0");
603         $JPanel0.setLayout(new GridLayout(1,0));
604         createActionExit();
605         createActionValidate();
606         // inline creation of taxonsDialog
607         setName("taxonsDialog");
608         taxonsDialog.getContentPane().setLayout(new BorderLayout());
609         setResizable(true);
610         setTitle(t("reefdb.property.taxonGroup.taxons"));
611         setModal(true);
612         
613         // registers 1 data bindings
614         $registerDefaultBindings();
615         $completeSetup();
616         handler.afterInit(this);
617     }
618 
619     private void $registerDefaultBindings() {
620         // register 1 data bindings
621         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ACTION_VALIDATE_ENABLED, true) {
622         
623             @Override
624             public void applyDataBinding() {
625                 if (model != null) {
626                     model.addPropertyChangeListener("editable", this);
627                 }
628             }
629         
630             @Override
631             public void processDataBinding() {
632                 if (model != null) {
633                     actionValidate.setEnabled(model.isEditable());
634                 }
635             }
636         
637             @Override
638             public void removeDataBinding() {
639                 if (model != null) {
640                     model.removePropertyChangeListener("editable", this);
641                 }
642             }
643         });
644     }
645 
646 }