View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.referential.taxon.menu;
2   
3   import fr.ifremer.dali.dto.referential.TaxonDTO;
4   import fr.ifremer.dali.dto.referential.TaxonomicLevelDTO;
5   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
6   import fr.ifremer.dali.ui.swing.DaliUIContext;
7   import fr.ifremer.dali.ui.swing.content.manage.filter.element.menu.ApplyFilterUI;
8   import fr.ifremer.dali.ui.swing.content.manage.referential.menu.ReferentialMenuUI;
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 fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
13  import java.awt.BorderLayout;
14  import java.awt.Component;
15  import java.awt.Container;
16  import java.awt.GridBagConstraints;
17  import java.awt.GridLayout;
18  import java.awt.Insets;
19  import java.awt.LayoutManager;
20  import java.awt.event.KeyEvent;
21  import java.awt.event.KeyListener;
22  import java.util.ArrayList;
23  import java.util.HashMap;
24  import java.util.List;
25  import java.util.Map;
26  import java.util.TreeMap;
27  import javax.swing.BorderFactory;
28  import javax.swing.Box;
29  import javax.swing.BoxLayout;
30  import javax.swing.JButton;
31  import javax.swing.JLabel;
32  import javax.swing.JPanel;
33  import javax.swing.JTextField;
34  import javax.swing.SwingConstants;
35  import jaxx.runtime.JAXXBinding;
36  import jaxx.runtime.JAXXContext;
37  import jaxx.runtime.JAXXObject;
38  import jaxx.runtime.JAXXObjectDescriptor;
39  import jaxx.runtime.JAXXUtil;
40  import jaxx.runtime.SwingUtil;
41  import jaxx.runtime.binding.DefaultJAXXBinding;
42  import jaxx.runtime.context.DefaultJAXXContext;
43  import jaxx.runtime.swing.Table;
44  import jaxx.runtime.swing.help.JAXXHelpUI;
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 TaxonMenuUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, ReferentialMenuUI<TaxonMenuUIModel, TaxonMenuUIHandler>, JAXXObject {
50  
51      /*-----------------------------------------------------------------------*/
52      /*------------------ Constants for all public bindings ------------------*/
53      /*-----------------------------------------------------------------------*/
54  
55      public static final String BINDING_LEVEL_COMBO_SELECTED_ITEM = "levelCombo.selectedItem";
56      public static final String BINDING_NAME_EDITOR_TEXT = "nameEditor.text";
57  
58      /*-----------------------------------------------------------------------*/
59      /*------------------------- Other static fields -------------------------*/
60      /*-----------------------------------------------------------------------*/
61  
62      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1WTW8bRRgemziJ89E2H41SNUCbViIBMS4gcSBAm49adeRQ1LhSRA4w3h07U8a729lxs5ZVxC8AfgIcuCEkJG6cEAfOHLgg/gJCPXBFvO/setcbb2JDiJTJ7sz78Tzv+86z+eYPUvAVuf6IBQFVbUeLFqe7mwcH9+uPuKV3uG8p4WlXkfAnlyf5QzJtx/u+JjcOq+heitxL227Lcx3u9HlvVMmUrzuS+0eca02eT3tYvl/aj483Aq+telFjUFlRv3z2Z/4L+9Ov8oQEHqC7CFSuDfNKmIxVSV7YmsxDpiesJJnTBBhKOE3AO4t725L5/nusxR+TT8hElYx7TEEwTVZHp2xiGP/A02Ty5u77zOHylia7DUVFQ/EWV9RmUtC2oP4xZKeW62gIRlvMYU1OFW9wTCuYpJoFrkNb3GnTGj7uwdPDiueZDOOaFFquzaUm9/+/4HsYMckwXlfux1xp8tKpKXbg7R74bBnLxLWIoQ19KDrWN4gcwpqgVTE2nmWeJztlITVXDyuaVEZl1DAulEswxV2ks9kfCxPMx3ku+GBpaeE6EbLl1ASFKWqsLnnar9fJ1/B9EZfl+GxK8idcVll9kKnZRLOrJ6xhhuquJu/00XzcZrYSTf5GP9do0midM4feDYC5zW3jvOUG6cA9iK9nQCw6MNYxmBdxuZEgwsO7toA51mQphb/GA10WXNppj8txFbfaWruOH3d0MV22aUtypkIjTRZSscNdNHw5tp/xwdw6So5odK7I1VSjQERoIiLJLc8dkoJqwzZ09nBQdx7AUag4yycUBwOa07+XFn794ffvyz2ZmYPclzNN+1QSrr+nXA8uisDUF0ONaWshS3vM2zgkxbBiRkJXMoDtR8cADvLNoTtFd3qP+UcQojDx248/LX30y3MkX4YRcpldZmhfIUV9pKAKrrQD7/Ydg2jmeBLWS/A7Bt0NbwiOtIZ31YY/s2B/vMMtVzHT9EKDSR/2i7j/gPuo2pHpGE6eJhNdIzVPAyjdSkbpYvz14s9/Lex/d6dXvhzQuXKqeVLCwgdkXDhSONzodCTBmbo87fm8bbuJ1GaJLwH5vXTywkTi9KZZ3xqoVg71zlU26t3t7pZ5CsvcoZbiTPOa0JLb4cmaXls10gSK1BDNUHo0Gqyur0OhMMeOqQA+lcmA+HhD4OThTku8s2Xs0Uw3EY6n2B64mppcMQii2etEmm4MswD0KdUIyWdCuNyuaN4CZQtHgDa5rmKYtXWAMdlLDUM0JK1B/m85J9KUcJ5Pc0aTrKyJ5g1LmotDzyUcceDWsvvYJ5jDQsMFnP8Qv23CYtj4TdN+kMLuNipj+EotHFwgOMXMewW/caBjvYtooL1gWIcGNJRJatSVyvDLM61dV9aEVzPmK6eaa+FlkeqX6v/KarG7bzKdRWusIRw7ZrWcATOTz1KG4SlMUh+REXo/LlnHBWNy4W2baXatDgDhC/XuQOwcrgtDI+L2Z7h8nh1hZQRMkyi7tY7Hz4hz/dxIbp47wisjcJmCzjUd/Pfs4IxIr46E5eszItwa5Z4LK/zH4lwovh2C4h9v12BuaQ0AAA==";
63      private static final Log log = LogFactory.getLog(TaxonMenuUI.class);
64      private static final long serialVersionUID = 1L;
65  
66      /*-----------------------------------------------------------------------*/
67      /*--------------------------- Internal states ---------------------------*/
68      /*-----------------------------------------------------------------------*/
69  
70      protected List<Object> $activeBindings = new ArrayList<Object>();
71      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
72      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
73      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
74      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
75      private boolean allComponentsCreated;
76      protected final JAXXContext delegateContext = new DefaultJAXXContext();
77  
78      /*-----------------------------------------------------------------------*/
79      /*------------------------ Protected components  ------------------------*/
80      /*-----------------------------------------------------------------------*/
81  
82      protected ApplyFilterUI applyFilterUI;
83      protected DaliHelpBroker broker;
84      protected JButton clearButton;
85      protected final TaxonMenuUIHandler handler = createHandler();
86      protected ExtendedComboBox<TaxonomicLevelDTO> levelCombo;
87      protected JLabel levelLabel;
88      protected JPanel menuPanel;
89      protected TaxonMenuUIModel model;
90      protected JTextField nameEditor;
91      protected JLabel nameLabel;
92      protected JButton searchButton;
93      protected JPanel selectionButtonsPanel;
94      protected Table selectionPanel;
95  
96      /*-----------------------------------------------------------------------*/
97      /*------------------------- Private components  -------------------------*/
98      /*-----------------------------------------------------------------------*/
99  
100     private TaxonMenuUI $JPanel0 = this;
101     private JPanel $JPanel1;
102     private JPanel $JPanel2;
103 
104     /*-----------------------------------------------------------------------*/
105     /*---------------------------- Constructors  ----------------------------*/
106     /*-----------------------------------------------------------------------*/
107 
108     public TaxonMenuUI(ApplicationUI parentUI) {
109         ApplicationUIUtil.setParentUI(this, parentUI);
110             $initialize();
111     }
112 
113     public TaxonMenuUI() {
114         $initialize();
115     }
116 
117     public TaxonMenuUI(JAXXContext parentContext) {
118         JAXXUtil.initContext(this, parentContext);
119         $initialize();
120     }
121 
122     public TaxonMenuUI(boolean param0) {
123         super(param0);
124         $initialize();
125     }
126 
127     public TaxonMenuUI(JAXXContext parentContext, boolean param1) {
128         super(param1);
129         JAXXUtil.initContext(this, parentContext);
130         $initialize();
131     }
132 
133     public TaxonMenuUI(LayoutManager param0) {
134         super(param0);
135         $initialize();
136     }
137 
138     public TaxonMenuUI(JAXXContext parentContext, LayoutManager param1) {
139         super(param1);
140         JAXXUtil.initContext(this, parentContext);
141         $initialize();
142     }
143 
144     public TaxonMenuUI(LayoutManager param0, boolean param1) {
145         super(param0 ,param1);
146         $initialize();
147     }
148 
149     public TaxonMenuUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
150         super(param1 ,param2);
151         JAXXUtil.initContext(this, parentContext);
152         $initialize();
153     }
154 
155     /*-----------------------------------------------------------------------*/
156     /*--------------------------- Statics methods ---------------------------*/
157     /*-----------------------------------------------------------------------*/
158 
159     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
160         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
161     }
162 
163     /*-----------------------------------------------------------------------*/
164     /*---------------------- JAXXObject implementation ----------------------*/
165     /*-----------------------------------------------------------------------*/
166 
167     @Override
168     public void applyDataBinding(String $binding) {
169         if (allComponentsCreated && $bindings.containsKey($binding)) {
170             getDataBinding($binding).applyDataBinding();
171         }
172         processDataBinding($binding);
173     }
174 
175     @Override
176     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
177         super.firePropertyChange(propertyName, oldValue, newValue);
178     }
179 
180     @Override
181     public Map<String, Object> get$objectMap() {
182         return $objectMap;
183     }
184 
185     @Override
186     public JAXXBinding getDataBinding(String bindingId) {
187         return $bindings.get(bindingId);
188     }
189 
190     @Override
191     public JAXXBinding[] getDataBindings() {
192         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
193     }
194 
195     @Override
196     public Object getObjectById(String id) {
197         return $objectMap.get(id);
198     }
199 
200     @Override
201     public void processDataBinding(String $binding, boolean $force) {
202         if (!$force && $activeBindings.contains($binding)) { 
203             return;
204         }
205         $activeBindings.add($binding);
206         try {
207             if (allComponentsCreated && $bindings.containsKey($binding)) {
208                 getDataBinding($binding).processDataBinding();
209             }
210         } finally {
211             $activeBindings.remove($binding);
212         }
213     }
214 
215     @Override
216     public void processDataBinding(String $binding) {
217         processDataBinding($binding, false);
218     }
219 
220     @Override
221     public void registerDataBinding(JAXXBinding binding) {
222         $bindings.put(binding.getId(), binding);
223     }
224 
225     @Override
226     public void removeDataBinding(String $binding) {
227         if (allComponentsCreated && $bindings.containsKey($binding)) {
228             getDataBinding($binding).removeDataBinding();
229         }
230     }
231 
232     /*-----------------------------------------------------------------------*/
233     /*--------------------- JAXXContext implementation  ---------------------*/
234     /*-----------------------------------------------------------------------*/
235 
236     @Override
237     public <T> T getContextValue(Class<T> clazz) {
238         return delegateContext.getContextValue(clazz, null);
239     }
240 
241     @Override
242     public <T> T getContextValue(Class<T> clazz, String name) {
243         return delegateContext.getContextValue(clazz, name);
244     }
245 
246     @Override
247     public JAXXContext getDelegateContext() {
248         return delegateContext;
249     }
250 
251     @Override
252     public <O extends Container> O getParentContainer(Class<O> clazz) {
253         return SwingUtil.getParentContainer(this, clazz);
254     }
255 
256     @Override
257     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
258         return SwingUtil.getParentContainer(source, clazz);
259     }
260 
261     @Override
262     public <T> void removeContextValue(Class<T> clazz) {
263         delegateContext.removeContextValue(clazz, null);
264     }
265 
266     @Override
267     public <T> void removeContextValue(Class<T> clazz, String name) {
268         delegateContext.removeContextValue(clazz, name);
269     }
270 
271     @Override
272     public <T> void setContextValue(T o) {
273         delegateContext.setContextValue(o, null);
274     }
275 
276     @Override
277     public <T> void setContextValue(T o, String name) {
278         delegateContext.setContextValue(o, name);
279     }
280 
281     /*-----------------------------------------------------------------------*/
282     /*---------------------------- Event methods ----------------------------*/
283     /*-----------------------------------------------------------------------*/
284 
285     public void doKeyReleased__on__nameEditor(KeyEvent event) {
286         if (log.isDebugEnabled()) {
287             log.debug(event);
288         }
289         handler.setText(event, "name");
290     }
291 
292     /*-----------------------------------------------------------------------*/
293     /*----------------------- Public acessor methods  -----------------------*/
294     /*-----------------------------------------------------------------------*/
295 
296     public ApplyFilterUI getApplyFilterUI() {
297         return applyFilterUI;
298     }
299 
300     public DaliHelpBroker getBroker() {
301         return broker;
302     }
303 
304     public JButton getClearButton() {
305         return clearButton;
306     }
307 
308     public TaxonMenuUIHandler getHandler() {
309         return handler;
310     }
311 
312     public ExtendedComboBox<TaxonomicLevelDTO> getLevelCombo() {
313         return levelCombo;
314     }
315 
316     public JLabel getLevelLabel() {
317         return levelLabel;
318     }
319 
320     public JPanel getMenuPanel() {
321         return menuPanel;
322     }
323 
324     public TaxonMenuUIModel getModel() {
325         return model;
326     }
327 
328     public JTextField getNameEditor() {
329         return nameEditor;
330     }
331 
332     public JLabel getNameLabel() {
333         return nameLabel;
334     }
335 
336     public JButton getSearchButton() {
337         return searchButton;
338     }
339 
340     public JPanel getSelectionButtonsPanel() {
341         return selectionButtonsPanel;
342     }
343 
344     public Table getSelectionPanel() {
345         return selectionPanel;
346     }
347 
348     /*-----------------------------------------------------------------------*/
349     /*---------------------------- Other methods ----------------------------*/
350     /*-----------------------------------------------------------------------*/
351 
352     @Override
353     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
354         broker.installUI(component, helpId);
355     }
356 
357     @Override
358     public void showHelp(String helpId) {
359         getBroker().showHelp(this, helpId);
360     }
361 
362     /*-----------------------------------------------------------------------*/
363     /*--------------------- Protected acessors methods  ---------------------*/
364     /*-----------------------------------------------------------------------*/
365 
366     protected JPanel get$JPanel1() {
367         return $JPanel1;
368     }
369 
370     protected JPanel get$JPanel2() {
371         return $JPanel2;
372     }
373 
374     /*-----------------------------------------------------------------------*/
375     /*--------------------- Components creation methods ---------------------*/
376     /*-----------------------------------------------------------------------*/
377 
378     protected void addChildrenToMenuPanel() {
379         if (!allComponentsCreated) {
380             return;
381         }
382         menuPanel.add(applyFilterUI);
383         menuPanel.add(selectionPanel);
384         menuPanel.add(selectionButtonsPanel);
385     }
386 
387     protected void addChildrenToSelectionButtonsPanel() {
388         if (!allComponentsCreated) {
389             return;
390         }
391         selectionButtonsPanel.add(clearButton);
392         selectionButtonsPanel.add(searchButton);
393     }
394 
395     protected void addChildrenToSelectionPanel() {
396         if (!allComponentsCreated) {
397             return;
398         }
399         selectionPanel.add($JPanel1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
400         selectionPanel.add($JPanel2, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0, 10, 1, new Insets(3, 3, 3, 3), 0, 0));
401     }
402 
403     protected void createApplyFilterUI() {
404         $objectMap.put("applyFilterUI", applyFilterUI = new ApplyFilterUI(this));
405         
406         applyFilterUI.setName("applyFilterUI");
407     }
408 
409     protected void createBroker() {
410         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
411     }
412 
413     protected void createClearButton() {
414         $objectMap.put("clearButton", clearButton = new JButton());
415         
416         clearButton.setName("clearButton");
417         clearButton.setText(t("dali.action.search.clear.label"));
418         clearButton.setToolTipText(t("dali.action.search.clear.tip"));
419         clearButton.putClientProperty("applicationAction", ClearAction.class);
420     }
421 
422     protected TaxonMenuUIHandler createHandler() {
423         return new TaxonMenuUIHandler();
424     }
425 
426     protected void createLevelCombo() {
427         $objectMap.put("levelCombo", levelCombo = new ExtendedComboBox<TaxonomicLevelDTO>(this));
428         
429         levelCombo.setName("levelCombo");
430         levelCombo.setFilterable(true);
431         levelCombo.setShowDecorator(false);
432         levelCombo.setProperty("level");
433         levelCombo.setShowReset(true);
434     }
435 
436     protected void createLevelLabel() {
437         $objectMap.put("levelLabel", levelLabel = new JLabel());
438         
439         levelLabel.setName("levelLabel");
440         levelLabel.setText(t("dali.property.taxon.level"));
441     }
442 
443     protected void createMenuPanel() {
444         $objectMap.put("menuPanel", menuPanel = new JPanel());
445         
446         menuPanel.setName("menuPanel");
447         menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.PAGE_AXIS));
448     }
449 
450     protected void createModel() {
451         $objectMap.put("model", model = getContextValue(TaxonMenuUIModel.class));
452     }
453 
454     protected void createNameEditor() {
455         $objectMap.put("nameEditor", nameEditor = new JTextField());
456         
457         nameEditor.setName("nameEditor");
458         nameEditor.setColumns(15);
459         nameEditor.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyReleased", this, "doKeyReleased__on__nameEditor"));
460     }
461 
462     protected void createNameLabel() {
463         $objectMap.put("nameLabel", nameLabel = new JLabel());
464         
465         nameLabel.setName("nameLabel");
466         nameLabel.setText(t("dali.property.name"));
467     }
468 
469     protected void createSearchButton() {
470         $objectMap.put("searchButton", searchButton = new JButton());
471         
472         searchButton.setName("searchButton");
473         searchButton.setText(t("dali.action.search.label"));
474         searchButton.setToolTipText(t("dali.action.search.tip"));
475         searchButton.putClientProperty("applicationAction", SearchAction.class);
476     }
477 
478     protected void createSelectionButtonsPanel() {
479         $objectMap.put("selectionButtonsPanel", selectionButtonsPanel = new JPanel());
480         
481         selectionButtonsPanel.setName("selectionButtonsPanel");
482         selectionButtonsPanel.setLayout(new GridLayout(1,0));
483     }
484 
485     protected void createSelectionPanel() {
486         $objectMap.put("selectionPanel", selectionPanel = new Table());
487         
488         selectionPanel.setName("selectionPanel");
489     }
490 
491     /*-----------------------------------------------------------------------*/
492     /*------------------------ Internal jaxx methods ------------------------*/
493     /*-----------------------------------------------------------------------*/
494 
495     private void $completeSetup() {
496         allComponentsCreated = true;
497         if (log.isDebugEnabled()) {
498             log.debug(this);
499         }
500         // inline complete setup of $JPanel0
501         add(menuPanel);
502         addChildrenToMenuPanel();
503         addChildrenToSelectionPanel();
504         // inline complete setup of $JPanel1
505         $JPanel1.add(levelLabel, BorderLayout.PAGE_START);
506         $JPanel1.add(levelCombo, BorderLayout.CENTER);
507         // inline complete setup of $JPanel2
508         $JPanel2.add(nameLabel, BorderLayout.PAGE_START);
509         $JPanel2.add(nameEditor);
510         addChildrenToSelectionButtonsPanel();
511         
512         // apply 2 data bindings
513         JAXXUtil.applyDataBinding(this, $bindings.keySet());
514         
515         // apply 13 property setters
516         levelCombo.setBeanType(TaxonomicLevelDTO.class);
517         clearButton.setAlignmentX(Component.CENTER_ALIGNMENT);
518         searchButton.setAlignmentX(Component.CENTER_ALIGNMENT);
519         selectionPanel.setBorder(BorderFactory.createTitledBorder(t("dali.config.menu.title")));
520         levelLabel.setLabelFor(levelCombo);
521         levelCombo.setBean(model);
522         nameLabel.setLabelFor(nameEditor);
523         clearButton.setIcon(SwingUtil.createActionIcon("reset"));
524         searchButton.setIcon(SwingUtil.createActionIcon("find"));
525     }
526 
527     private void $initialize() {
528         if (allComponentsCreated) {
529             return;
530         }
531         if (log.isDebugEnabled()) {
532             log.debug(this);
533         }
534         handler.beforeInit(this);
535         $objectMap.put("$JPanel0", $JPanel0);
536         createModel();
537         createBroker();
538         createMenuPanel();
539         createApplyFilterUI();
540         createSelectionPanel();
541         // inline creation of $JPanel1
542         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
543         
544         $JPanel1.setName("$JPanel1");
545         $JPanel1.setLayout(new BorderLayout());
546         createLevelLabel();
547         createLevelCombo();
548         // inline creation of $JPanel2
549         $objectMap.put("$JPanel2", $JPanel2 = new JPanel());
550         
551         $JPanel2.setName("$JPanel2");
552         $JPanel2.setLayout(new BorderLayout());
553         createNameLabel();
554         createNameEditor();
555         createSelectionButtonsPanel();
556         createClearButton();
557         createSearchButton();
558         // inline creation of $JPanel0
559         setName("$JPanel0");
560         
561         // registers 2 data bindings
562         $registerDefaultBindings();
563         $completeSetup();
564         handler.afterInit(this);
565     }
566 
567     private void $registerDefaultBindings() {
568         // register 2 data bindings
569         registerDataBinding(new DefaultJAXXBinding(this, BINDING_LEVEL_COMBO_SELECTED_ITEM, true) {
570         
571             @Override
572             public void applyDataBinding() {
573                 if (model != null) {
574                     model.addPropertyChangeListener("level", this);
575                 }
576             }
577         
578             @Override
579             public void processDataBinding() {
580                 if (model != null) {
581                     levelCombo.setSelectedItem(model.getLevel());
582                 }
583             }
584         
585             @Override
586             public void removeDataBinding() {
587                 if (model != null) {
588                     model.removePropertyChangeListener("level", this);
589                 }
590             }
591         });
592         registerDataBinding(new DefaultJAXXBinding(this, BINDING_NAME_EDITOR_TEXT, true) {
593         
594             @Override
595             public void applyDataBinding() {
596                 if (model != null) {
597                     model.addPropertyChangeListener("name", this);
598                 }
599             }
600         
601             @Override
602             public void processDataBinding() {
603                 if (model != null) {
604                     SwingUtil.setText(nameEditor, model.getName());
605                 }
606             }
607         
608             @Override
609             public void removeDataBinding() {
610                 if (model != null) {
611                     model.removePropertyChangeListener("name", this);
612                 }
613             }
614         });
615     }
616 
617 }