View Javadoc
1   package fr.ifremer.dali.ui.swing.content.extraction.filters;
2   
3   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
4   import fr.ifremer.dali.ui.swing.DaliUIContext;
5   import fr.ifremer.dali.ui.swing.util.DaliUI;
6   import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
7   import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
8   import fr.ifremer.quadrige3.ui.swing.plaf.WaitBlockingLayerUI;
9   import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
10  import java.awt.BorderLayout;
11  import java.awt.Component;
12  import java.awt.Container;
13  import java.awt.LayoutManager;
14  import java.awt.event.ActionEvent;
15  import java.awt.event.ActionListener;
16  import java.awt.event.KeyEvent;
17  import java.awt.event.KeyListener;
18  import java.awt.event.MouseEvent;
19  import java.awt.event.MouseListener;
20  import java.util.ArrayList;
21  import java.util.HashMap;
22  import java.util.List;
23  import java.util.Map;
24  import java.util.TreeMap;
25  import javax.swing.BorderFactory;
26  import javax.swing.JButton;
27  import javax.swing.JMenuItem;
28  import javax.swing.JPanel;
29  import javax.swing.JPopupMenu;
30  import javax.swing.JScrollPane;
31  import jaxx.runtime.JAXXBinding;
32  import jaxx.runtime.JAXXContext;
33  import jaxx.runtime.JAXXObject;
34  import jaxx.runtime.JAXXObjectDescriptor;
35  import jaxx.runtime.JAXXUtil;
36  import jaxx.runtime.SwingUtil;
37  import jaxx.runtime.binding.DefaultJAXXBinding;
38  import jaxx.runtime.context.DefaultJAXXContext;
39  import jaxx.runtime.swing.help.JAXXHelpUI;
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 ExtractionFiltersUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ExtractionFiltersUIModel, ExtractionFiltersUIHandler>, JAXXObject {
45  
46      /*-----------------------------------------------------------------------*/
47      /*------------------ Constants for all public bindings ------------------*/
48      /*-----------------------------------------------------------------------*/
49  
50      public static final String BINDING_EDIT_FILTER_BUTTON_ENABLED = "editFilterButton.enabled";
51      public static final String BINDING_EDIT_FILTER_MENU_ITEM_ENABLED = "editFilterMenuItem.enabled";
52      public static final String BINDING_TABLE_BLOCK_LAYER_BLOCK = "tableBlockLayer.block";
53  
54      /*-----------------------------------------------------------------------*/
55      /*------------------------- Other static fields -------------------------*/
56      /*-----------------------------------------------------------------------*/
57  
58      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAO1WQW8bRRSemDhpHEpLo6StGpCTVm1yYIxAqpBSoCTFNJUDVZ2KCF863h070453prNvG0dRET+BnwB3LkjcOCEOnDlwQfwFhDhwRbw363iz9SbOoUd8GK/fe983772d942/+5OVY8eWHot+n7skAtWT/N5HOzuftR/LAO7IOHDKgnEs/UyUWKnFZsOhPQZ2tdUgeG0Ar22YnjWRjI6g1xqsEsO+lvGulADsjTwiiONac+he69vEHbIOkypi/ebvv0pfh199W2KsbzG7WSylOg6VVTLZYCUVAruAOz0TNS2iLqbhVNTFfM+SbUOLOP5U9ORT9iWbbrApKxySAVs+fcmew+P7Ftic7IMTASgT1ZUG6eKHm8A+6TiuOk72pOOh0Ionisd7mAgPTATIyzMY76Q4/vEok7V+pylg5Z4JpQbWeEnMW0SX0U+1nXkiHbAbx/LfwV93EbPuIzPoORBtLde1CZ40xD5x3DzC8TQRoVNd+W5GZLXo8M+FAo9Bi4cdLbbiKe8bm2CHF+jF9QfYe964JaMki74gQwVpYeTYBNkDNp9DHdoJMT8ELmatigeNaQbOaH1fRBLYxRxF5iH0zJDk4ijJNmUPjJ/cBl8jb9KzBxDflSHtm6O0tLdeTwDQhFXn20K+fGJnrqXWt+n3VVqWhr7zWctSQjzIOb7UStHXLA7hldwQ4njzbLyz+ZtosbJL0AzsUmtUER6gK9WCSy9oARF6778Lc7/9+McP9UMBmMG95wtDj+gXDqZ1xuLJU7T1uXT6E1C6tiXsWgtZpEbx8+K2WJBYc+DG5HC/1wnOCc7vingXKcrTv//088KjX19hpTqraCPCuqD4TTYDuw67YHTYtx/e9hm9uncG1/OUG42VcSGNRP1g3T+lwH0eOClAbivQMkw9K7Cy7AeuYH6B4pZXV5/3sXmLBc0bVtCe+eWfueb3tw8bOIEFXT42PGti+Qs2pSKtIuk1dCCPhZo5a2OZhCaTwSJhZMXKaAdTy/36zkjLJnH2U8gmyRmbpHOKX4BcKNLH9YeiuBZtEshZMEZvK7vtIdUTIYDKzqZlROOH94Y8WPIqy1XcwJeMg7CyWr1+vZoauxKaaNIy7Z4MH5g99C+9X40SrfNxg4hMd7NAfIdU+03/cujpPVYoYf+3qrhVI9I1rlElvDzbdNPgkTwYSfo5sLPtwT20YbTBWX3rYFdEoUbVxvw2TNRRGJc+oz93aa2sFub44pU4LkVSCi32DdbDXrsVChDVtooowQ9G6CdorYxlJPMjWkQxw/IpcqrggehGPfxTsXMC041TME2qIL1NjuG4fKp6zJgs/gPEoIzP/QoAAA==";
59      private static final Log log = LogFactory.getLog(ExtractionFiltersUI.class);
60      private static final long serialVersionUID = 1L;
61  
62      /*-----------------------------------------------------------------------*/
63      /*--------------------------- Internal states ---------------------------*/
64      /*-----------------------------------------------------------------------*/
65  
66      protected List<Object> $activeBindings = new ArrayList<Object>();
67      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
68      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
69      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
70      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
71      private boolean allComponentsCreated;
72      protected final JAXXContext delegateContext = new DefaultJAXXContext();
73  
74      /*-----------------------------------------------------------------------*/
75      /*------------------------ Protected components  ------------------------*/
76      /*-----------------------------------------------------------------------*/
77  
78      protected DaliHelpBroker broker;
79      protected JButton editFilterButton;
80      protected JMenuItem editFilterMenuItem;
81      protected ExtractionFiltersUI extractionFiltersUI = this;
82      protected JPanel extractionsFiltersPanelButtons;
83      protected JScrollPane extractionsFiltersScrollPane;
84      protected SwingTable extractionsFiltersTable;
85      protected final ExtractionFiltersUIHandler handler = createHandler();
86      protected ExtractionFiltersUIModel model;
87      protected WaitBlockingLayerUI tableBlockLayer;
88      protected JPopupMenu tablePopup;
89  
90      /*-----------------------------------------------------------------------*/
91      /*------------------------- Private components  -------------------------*/
92      /*-----------------------------------------------------------------------*/
93  
94      private JPanel $JPanel0;
95  
96      /*-----------------------------------------------------------------------*/
97      /*---------------------------- Constructors  ----------------------------*/
98      /*-----------------------------------------------------------------------*/
99  
100     public ExtractionFiltersUI(ApplicationUI parentUI) {
101         ApplicationUIUtil.setParentUI(this, parentUI);
102             $initialize();
103     }
104 
105     public ExtractionFiltersUI() {
106         $initialize();
107     }
108 
109     public ExtractionFiltersUI(JAXXContext parentContext) {
110         JAXXUtil.initContext(this, parentContext);
111         $initialize();
112     }
113 
114     public ExtractionFiltersUI(boolean param0) {
115         super(param0);
116         $initialize();
117     }
118 
119     public ExtractionFiltersUI(JAXXContext parentContext, boolean param1) {
120         super(param1);
121         JAXXUtil.initContext(this, parentContext);
122         $initialize();
123     }
124 
125     public ExtractionFiltersUI(LayoutManager param0) {
126         super(param0);
127         $initialize();
128     }
129 
130     public ExtractionFiltersUI(JAXXContext parentContext, LayoutManager param1) {
131         super(param1);
132         JAXXUtil.initContext(this, parentContext);
133         $initialize();
134     }
135 
136     public ExtractionFiltersUI(LayoutManager param0, boolean param1) {
137         super(param0 ,param1);
138         $initialize();
139     }
140 
141     public ExtractionFiltersUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
142         super(param1 ,param2);
143         JAXXUtil.initContext(this, parentContext);
144         $initialize();
145     }
146 
147     /*-----------------------------------------------------------------------*/
148     /*--------------------------- Statics methods ---------------------------*/
149     /*-----------------------------------------------------------------------*/
150 
151     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
152         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
153     }
154 
155     /*-----------------------------------------------------------------------*/
156     /*---------------------- JAXXObject implementation ----------------------*/
157     /*-----------------------------------------------------------------------*/
158 
159     @Override
160     public void applyDataBinding(String $binding) {
161         if (allComponentsCreated && $bindings.containsKey($binding)) {
162             getDataBinding($binding).applyDataBinding();
163         }
164         processDataBinding($binding);
165     }
166 
167     @Override
168     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
169         super.firePropertyChange(propertyName, oldValue, newValue);
170     }
171 
172     @Override
173     public Map<String, Object> get$objectMap() {
174         return $objectMap;
175     }
176 
177     @Override
178     public JAXXBinding getDataBinding(String bindingId) {
179         return $bindings.get(bindingId);
180     }
181 
182     @Override
183     public JAXXBinding[] getDataBindings() {
184         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
185     }
186 
187     @Override
188     public Object getObjectById(String id) {
189         return $objectMap.get(id);
190     }
191 
192     @Override
193     public void processDataBinding(String $binding, boolean $force) {
194         if (!$force && $activeBindings.contains($binding)) { 
195             return;
196         }
197         $activeBindings.add($binding);
198         try {
199             if (allComponentsCreated && $bindings.containsKey($binding)) {
200                 getDataBinding($binding).processDataBinding();
201             }
202         } finally {
203             $activeBindings.remove($binding);
204         }
205     }
206 
207     @Override
208     public void processDataBinding(String $binding) {
209         processDataBinding($binding, false);
210     }
211 
212     @Override
213     public void registerDataBinding(JAXXBinding binding) {
214         $bindings.put(binding.getId(), binding);
215     }
216 
217     @Override
218     public void removeDataBinding(String $binding) {
219         if (allComponentsCreated && $bindings.containsKey($binding)) {
220             getDataBinding($binding).removeDataBinding();
221         }
222     }
223 
224     /*-----------------------------------------------------------------------*/
225     /*--------------------- JAXXContext implementation  ---------------------*/
226     /*-----------------------------------------------------------------------*/
227 
228     @Override
229     public <T> T getContextValue(Class<T> clazz) {
230         return delegateContext.getContextValue(clazz, null);
231     }
232 
233     @Override
234     public <T> T getContextValue(Class<T> clazz, String name) {
235         return delegateContext.getContextValue(clazz, name);
236     }
237 
238     @Override
239     public JAXXContext getDelegateContext() {
240         return delegateContext;
241     }
242 
243     @Override
244     public <O extends Container> O getParentContainer(Class<O> clazz) {
245         return SwingUtil.getParentContainer(this, clazz);
246     }
247 
248     @Override
249     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
250         return SwingUtil.getParentContainer(source, clazz);
251     }
252 
253     @Override
254     public <T> void removeContextValue(Class<T> clazz) {
255         delegateContext.removeContextValue(clazz, null);
256     }
257 
258     @Override
259     public <T> void removeContextValue(Class<T> clazz, String name) {
260         delegateContext.removeContextValue(clazz, name);
261     }
262 
263     @Override
264     public <T> void setContextValue(T o) {
265         delegateContext.setContextValue(o, null);
266     }
267 
268     @Override
269     public <T> void setContextValue(T o, String name) {
270         delegateContext.setContextValue(o, name);
271     }
272 
273     /*-----------------------------------------------------------------------*/
274     /*---------------------------- Event methods ----------------------------*/
275     /*-----------------------------------------------------------------------*/
276 
277     public void doActionPerformed__on__editFilterButton(ActionEvent event) {
278         if (log.isDebugEnabled()) {
279             log.debug(event);
280         }
281         handler.editFilter();
282     }
283 
284     public void doActionPerformed__on__editFilterMenuItem(ActionEvent event) {
285         if (log.isDebugEnabled()) {
286             log.debug(event);
287         }
288         handler.editFilter();
289     }
290 
291     public void doKeyPressed__on__extractionsFiltersTable(KeyEvent event) {
292         if (log.isDebugEnabled()) {
293             log.debug(event);
294         }
295         handler.openRowMenu(event, tablePopup);
296     }
297 
298     public void doMouseClicked__on__extractionsFiltersTable(MouseEvent event) {
299         if (log.isDebugEnabled()) {
300             log.debug(event);
301         }
302         handler.autoSelectRowInTable(event, tablePopup);
303     }
304 
305     /*-----------------------------------------------------------------------*/
306     /*----------------------- Public acessor methods  -----------------------*/
307     /*-----------------------------------------------------------------------*/
308 
309     public DaliHelpBroker getBroker() {
310         return broker;
311     }
312 
313     public JButton getEditFilterButton() {
314         return editFilterButton;
315     }
316 
317     public JMenuItem getEditFilterMenuItem() {
318         return editFilterMenuItem;
319     }
320 
321     public JPanel getExtractionsFiltersPanelButtons() {
322         return extractionsFiltersPanelButtons;
323     }
324 
325     public JScrollPane getExtractionsFiltersScrollPane() {
326         return extractionsFiltersScrollPane;
327     }
328 
329     public SwingTable getExtractionsFiltersTable() {
330         return extractionsFiltersTable;
331     }
332 
333     public ExtractionFiltersUIHandler getHandler() {
334         return handler;
335     }
336 
337     public ExtractionFiltersUIModel getModel() {
338         return model;
339     }
340 
341     public WaitBlockingLayerUI getTableBlockLayer() {
342         return tableBlockLayer;
343     }
344 
345     public JPopupMenu getTablePopup() {
346         return tablePopup;
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$JPanel0() {
368         return $JPanel0;
369     }
370 
371     /*-----------------------------------------------------------------------*/
372     /*--------------------- Components creation methods ---------------------*/
373     /*-----------------------------------------------------------------------*/
374 
375     protected void addChildrenToExtractionFiltersUI() {
376         if (!allComponentsCreated) {
377             return;
378         }
379         add(SwingUtil.boxComponentWithJxLayer(extractionsFiltersScrollPane));
380         add(extractionsFiltersPanelButtons, BorderLayout.PAGE_END);
381     }
382 
383     protected void addChildrenToExtractionsFiltersPanelButtons() {
384         if (!allComponentsCreated) {
385             return;
386         }
387         extractionsFiltersPanelButtons.add($JPanel0, BorderLayout.LINE_START);
388     }
389 
390     protected void addChildrenToExtractionsFiltersScrollPane() {
391         if (!allComponentsCreated) {
392             return;
393         }
394         extractionsFiltersScrollPane.getViewport().add(extractionsFiltersTable);
395     }
396 
397     protected void addChildrenToTablePopup() {
398         if (!allComponentsCreated) {
399             return;
400         }
401         tablePopup.add(editFilterMenuItem);
402     }
403 
404     protected void createBroker() {
405         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
406     }
407 
408     protected void createEditFilterButton() {
409         $objectMap.put("editFilterButton", editFilterButton = new JButton());
410         
411         editFilterButton.setName("editFilterButton");
412         editFilterButton.setText(t("dali.extraction.filters.edit.label"));
413         editFilterButton.setToolTipText(t("dali.extraction.filters.edit.tip"));
414         editFilterButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__editFilterButton"));
415     }
416 
417     protected void createEditFilterMenuItem() {
418         $objectMap.put("editFilterMenuItem", editFilterMenuItem = new JMenuItem());
419         
420         editFilterMenuItem.setName("editFilterMenuItem");
421         editFilterMenuItem.setText(t("dali.extraction.filters.edit.label"));
422         editFilterMenuItem.setToolTipText(t("dali.extraction.filters.edit.tip"));
423         editFilterMenuItem.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__editFilterMenuItem"));
424     }
425 
426     protected void createExtractionsFiltersPanelButtons() {
427         $objectMap.put("extractionsFiltersPanelButtons", extractionsFiltersPanelButtons = new JPanel());
428         
429         extractionsFiltersPanelButtons.setName("extractionsFiltersPanelButtons");
430         extractionsFiltersPanelButtons.setLayout(new BorderLayout());
431     }
432 
433     protected void createExtractionsFiltersScrollPane() {
434         $objectMap.put("extractionsFiltersScrollPane", extractionsFiltersScrollPane = new JScrollPane());
435         
436         extractionsFiltersScrollPane.setName("extractionsFiltersScrollPane");
437     }
438 
439     protected void createExtractionsFiltersTable() {
440         $objectMap.put("extractionsFiltersTable", extractionsFiltersTable = new SwingTable());
441         
442         extractionsFiltersTable.setName("extractionsFiltersTable");
443         extractionsFiltersTable.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyPressed", this, "doKeyPressed__on__extractionsFiltersTable"));
444         extractionsFiltersTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__extractionsFiltersTable"));
445     }
446 
447     protected ExtractionFiltersUIHandler createHandler() {
448         return new ExtractionFiltersUIHandler();
449     }
450 
451     protected void createModel() {
452         $objectMap.put("model", model = getContextValue(ExtractionFiltersUIModel.class));
453     }
454 
455     protected void createTableBlockLayer() {
456         $objectMap.put("tableBlockLayer", tableBlockLayer = new WaitBlockingLayerUI());
457     }
458 
459     protected void createTablePopup() {
460         $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
461         
462         tablePopup.setName("tablePopup");
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         addChildrenToExtractionFiltersUI();
475         addChildrenToTablePopup();
476         addChildrenToExtractionsFiltersScrollPane();
477         addChildrenToExtractionsFiltersPanelButtons();
478         // inline complete setup of $JPanel0
479         $JPanel0.add(editFilterButton);
480         
481         // apply 3 data bindings
482         JAXXUtil.applyDataBinding(this, $bindings.keySet());
483         
484         // apply 7 property setters
485         editFilterButton.setAlignmentX(Component.CENTER_ALIGNMENT);
486         setBorder(BorderFactory.createTitledBorder(t("dali.extraction.filters.title")));
487         tableBlockLayer.setBlockingColor(handler.getConfig().getColorBlockingLayer());
488         editFilterMenuItem.setIcon(SwingUtil.createActionIcon("edit"));
489         editFilterButton.setIcon(SwingUtil.createActionIcon("edit"));
490     }
491 
492     private void $initialize() {
493         if (allComponentsCreated) {
494             return;
495         }
496         if (log.isDebugEnabled()) {
497             log.debug(this);
498         }
499         handler.beforeInit(this);
500         $objectMap.put("extractionFiltersUI", extractionFiltersUI);
501         createModel();
502         createBroker();
503         createTableBlockLayer();
504         createTablePopup();
505         createEditFilterMenuItem();
506         createExtractionsFiltersScrollPane();
507         createExtractionsFiltersTable();
508         createExtractionsFiltersPanelButtons();
509         // inline creation of $JPanel0
510         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
511         
512         $JPanel0.setName("$JPanel0");
513         createEditFilterButton();
514         // inline creation of extractionFiltersUI
515         setName("extractionFiltersUI");
516         setLayout(new BorderLayout());
517         
518         // registers 3 data bindings
519         $registerDefaultBindings();
520         $completeSetup();
521         handler.afterInit(this);
522     }
523 
524     private void $registerDefaultBindings() {
525         // register 3 data bindings
526         registerDataBinding(new DefaultJAXXBinding(this, BINDING_TABLE_BLOCK_LAYER_BLOCK, true) {
527         
528             @Override
529             public void applyDataBinding() {
530                 if (model != null) {
531                     model.addPropertyChangeListener("loading", this);
532                 }
533             }
534         
535             @Override
536             public void processDataBinding() {
537                 if (model != null) {
538                     tableBlockLayer.setBlock(model.isLoading());
539                 }
540             }
541         
542             @Override
543             public void removeDataBinding() {
544                 if (model != null) {
545                     model.removePropertyChangeListener("loading", this);
546                 }
547             }
548         });
549         registerDataBinding(new DefaultJAXXBinding(this, BINDING_EDIT_FILTER_MENU_ITEM_ENABLED, true, true) {
550         
551             @Override
552             public void applyDataBinding() {
553                 if (model != null) {
554                     model.addPropertyChangeListener("loading", this);
555                 }
556                 if (model != null) {
557                     model.addPropertyChangeListener("singleSelectedRow", this);
558                 }
559                 if (model != null) {
560                     model.addPropertyChangeListener("selectedExtraction", this);
561                 }
562             }
563         
564             @Override
565             public void processDataBinding() {
566                 if (model != null) {
567                     editFilterMenuItem.setEnabled(!model.isLoading() && model.getSingleSelectedRow() != null && model.getSelectedExtraction() != null);
568                 }
569             }
570         
571             @Override
572             public void removeDataBinding() {
573                 if (model != null) {
574                     model.removePropertyChangeListener("loading", this);
575                 }
576                 if (model != null) {
577                     model.removePropertyChangeListener("singleSelectedRow", this);
578                 }
579                 if (model != null) {
580                     model.removePropertyChangeListener("selectedExtraction", this);
581                 }
582             }
583         });
584         registerDataBinding(new DefaultJAXXBinding(this, BINDING_EDIT_FILTER_BUTTON_ENABLED, true, true) {
585         
586             @Override
587             public void applyDataBinding() {
588                 if (model != null) {
589                     model.addPropertyChangeListener("loading", this);
590                 }
591                 if (model != null) {
592                     model.addPropertyChangeListener("singleSelectedRow", this);
593                 }
594                 if (model != null) {
595                     model.addPropertyChangeListener("selectedExtraction", this);
596                 }
597             }
598         
599             @Override
600             public void processDataBinding() {
601                 if (model != null) {
602                     editFilterButton.setEnabled(!model.isLoading() && model.getSingleSelectedRow() != null && model.getSelectedExtraction() != null);
603                 }
604             }
605         
606             @Override
607             public void removeDataBinding() {
608                 if (model != null) {
609                     model.removePropertyChangeListener("loading", this);
610                 }
611                 if (model != null) {
612                     model.removePropertyChangeListener("singleSelectedRow", this);
613                 }
614                 if (model != null) {
615                     model.removePropertyChangeListener("selectedExtraction", this);
616                 }
617             }
618         });
619     }
620 
621 }