View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.referential.taxon.local;
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.quadrige3.ui.swing.table.SwingTable;
30  import fr.ifremer.reefdb.ui.swing.ReefDbHelpBroker;
31  import fr.ifremer.reefdb.ui.swing.ReefDbUIContext;
32  import fr.ifremer.reefdb.ui.swing.content.manage.referential.taxon.menu.TaxonMenuUI;
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.FlowLayout;
38  import java.awt.LayoutManager;
39  import java.awt.event.ActionEvent;
40  import java.awt.event.ActionListener;
41  import java.util.ArrayList;
42  import java.util.HashMap;
43  import java.util.List;
44  import java.util.Map;
45  import java.util.TreeMap;
46  import javax.swing.Box;
47  import javax.swing.BoxLayout;
48  import javax.swing.JButton;
49  import javax.swing.JPanel;
50  import javax.swing.JScrollPane;
51  import jaxx.runtime.JAXXBinding;
52  import jaxx.runtime.JAXXContext;
53  import jaxx.runtime.JAXXObject;
54  import jaxx.runtime.JAXXObjectDescriptor;
55  import jaxx.runtime.JAXXUtil;
56  import jaxx.runtime.SwingUtil;
57  import jaxx.runtime.binding.DefaultJAXXBinding;
58  import jaxx.runtime.context.DefaultJAXXContext;
59  import org.apache.commons.logging.Log;
60  import org.apache.commons.logging.LogFactory;
61  import static org.nuiton.i18n.I18n.t;
62  
63  public class TaxonsLocalUI extends JPanel implements ReefDbUI<TaxonsLocalUIModel, TaxonsLocalUIHandler>, JAXXObject {
64  
65      /*-----------------------------------------------------------------------*/
66      /*------------------ Constants for all public bindings ------------------*/
67      /*-----------------------------------------------------------------------*/
68  
69      public static final String BINDING_GERER_TAXONS_LOCAL_TABLE_REMPLACER_BOUTON_ENABLED = "gererTaxonsLocalTableRemplacerBouton.enabled";
70      public static final String BINDING_GERER_TAXONS_LOCAL_TABLE_SUPPRIMER_BOUTON_ENABLED = "gererTaxonsLocalTableSupprimerBouton.enabled";
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------------- Other static fields -------------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1VQW8bRRR+dmKncVJoCElTUUoSXJSoaN2KCyIU2jRETeQ0yHalqFah492JM+3sznR2ttkQFfET+Alw54LEjRPiwJkDF8RfQIhDr4g3u/ZuNrETg2vJo/G897733jfzPn/3JxR8BQuPSRhaKvA0c6m1eXtnZ7v1mNp6jfq2YlILBfEnl4d8Eyac5NzX8HazasIrnfDKHeFK4VHvSPRKFUq+PuDU36NUa3gzG2H7fqWemFdCGagualJUL9Rv/v4r/7Xz1bd5gFBidRPYyvxZUWkno1XIM0fDa5jpGalw4rWxDMW8NtZ73pzd4cT37xGXPoUvYawKRUkUgmlYHLzlCCOKD6WGc+XNT4lH+XUN27vKYruKulRZitJdp2UFzPL3Mb9lC08jnOUSj7QpmnepScwItzQJhWdxYeO+YfZ+1ezvb0gZpSlqKLjCoVxD4yVn2DKwaZpiS4knVGm4dkqeGv5ea93FuNXIOw2f0in2FvWC+xsaqsNU7CJIXHAMZ/KMJ+m6zN/ACzd3G3Zg49Os7/nyZt1WgnNjw6u6mAlITcZ9Jom6cKShBmlxqsE60s/TgDiKtel7aUvaeFl1s48CDNBcgjfZCrRGwKTAi9l8i20kQDWOJb0ngmeUBKsiwFgN05nSVyNEE38lgSn3hKkHUip82yoGMr6Lg8TVqCs5sXvFKXgjM5w49lY69ulc5ppQUAEea5hrnlSKGppijZg7phEGMLL+Mzv9249//LDeFYZJzD3T0/WIruHASiUkPmhmUr8aq0KgGa9sEbnShHGfchTFSPQu9yis3jFjcZhvyoRbJty6S/w9hCiM/f7Tz7OPfh2B/DqUuCDOOjH+GzCu9xSyILgTyo9vRRVN7p/D9QJ+RzSU0I8Jb8OMAIwQB0VrVNMQhWiqMyW2cF0cAY/ua5jQQvAGk40+HiFSd7kHdUn9rfFfXkzXv7/VpS+H7Vzq655SWHgAReZx5tFIWTui2VNJJ6RPA0ek4thLLmGgNy47kvJutF4/wV8BB/5zIiVnNjEs3o641HDlcFtSr0aj5xpliC2WbUp4foz1MRU7JszPZHlNzFn2+3mNUc80ghd59TBSa6tNdcwodWpi319atnz2BV1anr95c/7G8zAwzb0fXYbZfQADDuD/ZefS4RpWo88mpuhEfgkvr2c77lqztPRxSlkpHy70o4X5n7hSHywt/wdSjqnZWaTksC1ODtBXwysfOkST+RbzHJTQj07kzJm1dCaiOX5ols96I8wOjfDWAF2VCGdtD/8o9c4pSAsD1fLkFITy0AjvDNDNKLPjf5ih+giH7uM0BNPHv7cfN0FmCwAA";
77      private static final Log log = LogFactory.getLog(TaxonsLocalUI.class);
78      private static final long serialVersionUID = 1L;
79  
80      /*-----------------------------------------------------------------------*/
81      /*--------------------------- Internal states ---------------------------*/
82      /*-----------------------------------------------------------------------*/
83  
84      protected List<Object> $activeBindings = new ArrayList<Object>();
85      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
86      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
87      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
88      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
89      private boolean allComponentsCreated;
90      protected final JAXXContext delegateContext = new DefaultJAXXContext();
91  
92      /*-----------------------------------------------------------------------*/
93      /*------------------------ Protected components  ------------------------*/
94      /*-----------------------------------------------------------------------*/
95  
96      protected ReefDbHelpBroker broker;
97      protected JPanel buttonsPanel;
98      protected JButton gererTaxonsLocalTableNouveauBouton;
99      protected JButton gererTaxonsLocalTableRemplacerBouton;
100     protected JButton gererTaxonsLocalTableSupprimerBouton;
101     protected final TaxonsLocalUIHandler handler = createHandler();
102     protected TaxonsLocalUIModel model;
103     protected TaxonMenuUI taxonsLocalMenuUI;
104     protected SwingTable taxonsLocalTable;
105 
106     /*-----------------------------------------------------------------------*/
107     /*------------------------- Private components  -------------------------*/
108     /*-----------------------------------------------------------------------*/
109 
110     private TaxonsLocalUI $JPanel0 = this;
111     private JPanel $JPanel1;
112     private JScrollPane $JScrollPane0;
113 
114     /*-----------------------------------------------------------------------*/
115     /*---------------------------- Constructors  ----------------------------*/
116     /*-----------------------------------------------------------------------*/
117 
118     public TaxonsLocalUI(ApplicationUI parentUI) {
119         ApplicationUIUtil.setParentUI(this, parentUI);
120             $initialize();
121     }
122 
123     public TaxonsLocalUI(LayoutManager param0, boolean param1) {
124         super(param0 ,param1);
125         $initialize();
126     }
127 
128     public TaxonsLocalUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
129         super(param1 ,param2);
130         JAXXUtil.initContext(this, parentContext);
131         $initialize();
132     }
133 
134     public TaxonsLocalUI(boolean param0) {
135         super(param0);
136         $initialize();
137     }
138 
139     public TaxonsLocalUI(JAXXContext parentContext, boolean param1) {
140         super(param1);
141         JAXXUtil.initContext(this, parentContext);
142         $initialize();
143     }
144 
145     public TaxonsLocalUI() {
146         $initialize();
147     }
148 
149     public TaxonsLocalUI(JAXXContext parentContext) {
150         JAXXUtil.initContext(this, parentContext);
151         $initialize();
152     }
153 
154     public TaxonsLocalUI(LayoutManager param0) {
155         super(param0);
156         $initialize();
157     }
158 
159     public TaxonsLocalUI(JAXXContext parentContext, LayoutManager param1) {
160         super(param1);
161         JAXXUtil.initContext(this, parentContext);
162         $initialize();
163     }
164 
165     /*-----------------------------------------------------------------------*/
166     /*--------------------------- Statics methods ---------------------------*/
167     /*-----------------------------------------------------------------------*/
168 
169     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
170         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
171     }
172 
173     /*-----------------------------------------------------------------------*/
174     /*---------------------- JAXXObject implementation ----------------------*/
175     /*-----------------------------------------------------------------------*/
176 
177     @Override
178     public void applyDataBinding(String $binding) {
179         if (allComponentsCreated && $bindings.containsKey($binding)) {
180             getDataBinding($binding).applyDataBinding();
181         }
182         processDataBinding($binding);
183     }
184 
185     @Override
186     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
187         super.firePropertyChange(propertyName, oldValue, newValue);
188     }
189 
190     @Override
191     public Map<String, Object> get$objectMap() {
192         return $objectMap;
193     }
194 
195     @Override
196     public JAXXBinding getDataBinding(String bindingId) {
197         return $bindings.get(bindingId);
198     }
199 
200     @Override
201     public JAXXBinding[] getDataBindings() {
202         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
203     }
204 
205     @Override
206     public Object getObjectById(String id) {
207         return $objectMap.get(id);
208     }
209 
210     @Override
211     public void processDataBinding(String $binding, boolean $force) {
212         if (!$force && $activeBindings.contains($binding)) { 
213             return;
214         }
215         $activeBindings.add($binding);
216         try {
217             if (allComponentsCreated && $bindings.containsKey($binding)) {
218                 getDataBinding($binding).processDataBinding();
219             }
220         } finally {
221             $activeBindings.remove($binding);
222         }
223     }
224 
225     @Override
226     public void processDataBinding(String $binding) {
227         processDataBinding($binding, false);
228     }
229 
230     @Override
231     public void registerDataBinding(JAXXBinding binding) {
232         $bindings.put(binding.getId(), binding);
233     }
234 
235     @Override
236     public void removeDataBinding(String $binding) {
237         if (allComponentsCreated && $bindings.containsKey($binding)) {
238             getDataBinding($binding).removeDataBinding();
239         }
240     }
241 
242     /*-----------------------------------------------------------------------*/
243     /*--------------------- JAXXContext implementation  ---------------------*/
244     /*-----------------------------------------------------------------------*/
245 
246     @Override
247     public <T> T getContextValue(Class<T> clazz) {
248         return delegateContext.getContextValue(clazz, null);
249     }
250 
251     @Override
252     public <T> T getContextValue(Class<T> clazz, String name) {
253         return delegateContext.getContextValue(clazz, name);
254     }
255 
256     @Override
257     public JAXXContext getDelegateContext() {
258         return delegateContext;
259     }
260 
261     @Override
262     public <O extends Container> O getParentContainer(Class<O> clazz) {
263         return SwingUtil.getParentContainer(this, clazz);
264     }
265 
266     @Override
267     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
268         return SwingUtil.getParentContainer(source, clazz);
269     }
270 
271     @Override
272     public <T> void removeContextValue(Class<T> clazz) {
273         delegateContext.removeContextValue(clazz, null);
274     }
275 
276     @Override
277     public <T> void removeContextValue(Class<T> clazz, String name) {
278         delegateContext.removeContextValue(clazz, name);
279     }
280 
281     @Override
282     public <T> void setContextValue(T o) {
283         delegateContext.setContextValue(o, null);
284     }
285 
286     @Override
287     public <T> void setContextValue(T o, String name) {
288         delegateContext.setContextValue(o, name);
289     }
290 
291     /*-----------------------------------------------------------------------*/
292     /*---------------------------- Event methods ----------------------------*/
293     /*-----------------------------------------------------------------------*/
294 
295     public void doActionPerformed__on__gererTaxonsLocalTableNouveauBouton(ActionEvent event) {
296         if (log.isDebugEnabled()) {
297             log.debug(event);
298         }
299         model.addNewRow();
300     }
301 
302     /*-----------------------------------------------------------------------*/
303     /*----------------------- Public acessor methods  -----------------------*/
304     /*-----------------------------------------------------------------------*/
305 
306     public ReefDbHelpBroker getBroker() {
307         return broker;
308     }
309 
310     public JPanel getButtonsPanel() {
311         return buttonsPanel;
312     }
313 
314     public JButton getGererTaxonsLocalTableNouveauBouton() {
315         return gererTaxonsLocalTableNouveauBouton;
316     }
317 
318     public JButton getGererTaxonsLocalTableRemplacerBouton() {
319         return gererTaxonsLocalTableRemplacerBouton;
320     }
321 
322     public JButton getGererTaxonsLocalTableSupprimerBouton() {
323         return gererTaxonsLocalTableSupprimerBouton;
324     }
325 
326     public TaxonsLocalUIHandler getHandler() {
327         return handler;
328     }
329 
330     public TaxonsLocalUIModel getModel() {
331         return model;
332     }
333 
334     public TaxonMenuUI getTaxonsLocalMenuUI() {
335         return taxonsLocalMenuUI;
336     }
337 
338     public SwingTable getTaxonsLocalTable() {
339         return taxonsLocalTable;
340     }
341 
342     /*-----------------------------------------------------------------------*/
343     /*--------------------- Protected acessors methods  ---------------------*/
344     /*-----------------------------------------------------------------------*/
345 
346     protected JPanel get$JPanel1() {
347         return $JPanel1;
348     }
349 
350     protected JScrollPane get$JScrollPane0() {
351         return $JScrollPane0;
352     }
353 
354     /*-----------------------------------------------------------------------*/
355     /*--------------------- Components creation methods ---------------------*/
356     /*-----------------------------------------------------------------------*/
357 
358     protected void addChildrenToButtonsPanel() {
359         if (!allComponentsCreated) {
360             return;
361         }
362         buttonsPanel.add(gererTaxonsLocalTableNouveauBouton);
363         buttonsPanel.add(gererTaxonsLocalTableSupprimerBouton);
364         buttonsPanel.add(gererTaxonsLocalTableRemplacerBouton);
365     }
366 
367     protected void createBroker() {
368         $objectMap.put("broker", broker = new ReefDbHelpBroker("reefdb.home.help"));
369     }
370 
371     protected void createButtonsPanel() {
372         $objectMap.put("buttonsPanel", buttonsPanel = new JPanel());
373         
374         buttonsPanel.setName("buttonsPanel");
375         buttonsPanel.setLayout(new BoxLayout(buttonsPanel, BoxLayout.LINE_AXIS));
376     }
377 
378     protected void createGererTaxonsLocalTableNouveauBouton() {
379         $objectMap.put("gererTaxonsLocalTableNouveauBouton", gererTaxonsLocalTableNouveauBouton = new JButton());
380         
381         gererTaxonsLocalTableNouveauBouton.setName("gererTaxonsLocalTableNouveauBouton");
382         gererTaxonsLocalTableNouveauBouton.setText(t("reefdb.common.new"));
383         gererTaxonsLocalTableNouveauBouton.setToolTipText(t("reefdb.common.new"));
384         gererTaxonsLocalTableNouveauBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__gererTaxonsLocalTableNouveauBouton"));
385     }
386 
387     protected void createGererTaxonsLocalTableRemplacerBouton() {
388         $objectMap.put("gererTaxonsLocalTableRemplacerBouton", gererTaxonsLocalTableRemplacerBouton = new JButton());
389         
390         gererTaxonsLocalTableRemplacerBouton.setName("gererTaxonsLocalTableRemplacerBouton");
391         gererTaxonsLocalTableRemplacerBouton.setText(t("reefdb.common.replace"));
392         gererTaxonsLocalTableRemplacerBouton.setToolTipText(t("reefdb.common.replace"));
393         gererTaxonsLocalTableRemplacerBouton.putClientProperty("applicationAction", OpenReplaceTaxonAction.class);
394     }
395 
396     protected void createGererTaxonsLocalTableSupprimerBouton() {
397         $objectMap.put("gererTaxonsLocalTableSupprimerBouton", gererTaxonsLocalTableSupprimerBouton = new JButton());
398         
399         gererTaxonsLocalTableSupprimerBouton.setName("gererTaxonsLocalTableSupprimerBouton");
400         gererTaxonsLocalTableSupprimerBouton.setText(t("reefdb.common.delete"));
401         gererTaxonsLocalTableSupprimerBouton.setToolTipText(t("reefdb.common.delete"));
402         gererTaxonsLocalTableSupprimerBouton.putClientProperty("applicationAction", DeleteTaxonAction.class);
403     }
404 
405     protected TaxonsLocalUIHandler createHandler() {
406         return new TaxonsLocalUIHandler();
407     }
408 
409     protected void createModel() {
410         $objectMap.put("model", model = getContextValue(TaxonsLocalUIModel.class));
411     }
412 
413     protected void createTaxonsLocalMenuUI() {
414         $objectMap.put("taxonsLocalMenuUI", taxonsLocalMenuUI = new TaxonMenuUI(this));
415         
416         taxonsLocalMenuUI.setName("taxonsLocalMenuUI");
417     }
418 
419     protected void createTaxonsLocalTable() {
420         $objectMap.put("taxonsLocalTable", taxonsLocalTable = new SwingTable());
421         
422         taxonsLocalTable.setName("taxonsLocalTable");
423     }
424 
425     /*-----------------------------------------------------------------------*/
426     /*------------------------ Internal jaxx methods ------------------------*/
427     /*-----------------------------------------------------------------------*/
428 
429     private void $completeSetup() {
430         allComponentsCreated = true;
431         if (log.isDebugEnabled()) {
432             log.debug(this);
433         }
434         // inline complete setup of $JPanel0
435         add(taxonsLocalMenuUI, BorderLayout.LINE_START);
436         add($JPanel1, BorderLayout.CENTER);
437         // inline complete setup of $JPanel1
438         $JPanel1.add($JScrollPane0);
439         $JPanel1.add(buttonsPanel, BorderLayout.PAGE_END);
440         // inline complete setup of $JScrollPane0
441         $JScrollPane0.getViewport().add(taxonsLocalTable);
442         addChildrenToButtonsPanel();
443         
444         // apply 2 data bindings
445         JAXXUtil.applyDataBinding(this, $bindings.keySet());
446         
447         // apply 9 property setters
448         gererTaxonsLocalTableNouveauBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
449         gererTaxonsLocalTableSupprimerBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
450         gererTaxonsLocalTableRemplacerBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
451         gererTaxonsLocalTableNouveauBouton.setIcon(SwingUtil.createActionIcon("add"));
452         gererTaxonsLocalTableSupprimerBouton.setIcon(SwingUtil.createActionIcon("delete"));
453         gererTaxonsLocalTableRemplacerBouton.setIcon(SwingUtil.createActionIcon("replace"));
454     }
455 
456     private void $initialize() {
457         if (allComponentsCreated) {
458             return;
459         }
460         if (log.isDebugEnabled()) {
461             log.debug(this);
462         }
463         handler.beforeInit(this);
464         $objectMap.put("$JPanel0", $JPanel0);
465         createModel();
466         createBroker();
467         createTaxonsLocalMenuUI();
468         // inline creation of $JPanel1
469         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
470         
471         $JPanel1.setName("$JPanel1");
472         $JPanel1.setLayout(new BorderLayout());
473         // inline creation of $JScrollPane0
474         $objectMap.put("$JScrollPane0", $JScrollPane0 = new JScrollPane());
475         
476         $JScrollPane0.setName("$JScrollPane0");
477         createTaxonsLocalTable();
478         createButtonsPanel();
479         createGererTaxonsLocalTableNouveauBouton();
480         createGererTaxonsLocalTableSupprimerBouton();
481         createGererTaxonsLocalTableRemplacerBouton();
482         // inline creation of $JPanel0
483         setName("$JPanel0");
484         setLayout(new BorderLayout());
485         
486         // registers 2 data bindings
487         $registerDefaultBindings();
488         $completeSetup();
489         handler.afterInit(this);
490     }
491 
492     private void $registerDefaultBindings() {
493         // register 2 data bindings
494         registerDataBinding(new DefaultJAXXBinding(this, BINDING_GERER_TAXONS_LOCAL_TABLE_SUPPRIMER_BOUTON_ENABLED, true) {
495         
496             @Override
497             public void applyDataBinding() {
498                 if (model != null) {
499                     model.addPropertyChangeListener("selectedRows", this);
500                 }
501             }
502         
503             @Override
504             public void processDataBinding() {
505                 if (model != null && model.getSelectedRows() != null) {
506                     gererTaxonsLocalTableSupprimerBouton.setEnabled(!model.getSelectedRows().isEmpty());
507                 }
508             }
509         
510             @Override
511             public void removeDataBinding() {
512                 if (model != null) {
513                     model.removePropertyChangeListener("selectedRows", this);
514                 }
515             }
516         });
517         registerDataBinding(new DefaultJAXXBinding(this, BINDING_GERER_TAXONS_LOCAL_TABLE_REMPLACER_BOUTON_ENABLED, true) {
518         
519             @Override
520             public void applyDataBinding() {
521                 if (model != null) {
522                     model.addPropertyChangeListener("selectedRows", this);
523                 }
524             }
525         
526             @Override
527             public void processDataBinding() {
528                 if (model != null && model.getSelectedRows() != null) {
529                     gererTaxonsLocalTableRemplacerBouton.setEnabled(model.getSelectedRows().size() == 1);
530                 }
531             }
532         
533             @Override
534             public void removeDataBinding() {
535                 if (model != null) {
536                     model.removePropertyChangeListener("selectedRows", this);
537                 }
538             }
539         });
540     }
541 
542 }