View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.referential.pmfm.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.pmfm.menu.PmfmMenuUI;
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 PmfmsLocalUI extends JPanel implements ReefDbUI<PmfmsLocalUIModel, PmfmsLocalUIHandler>, JAXXObject {
64  
65      /*-----------------------------------------------------------------------*/
66      /*------------------ Constants for all public bindings ------------------*/
67      /*-----------------------------------------------------------------------*/
68  
69      public static final String BINDING_MANAGE_QUADRUPLETS_LOCAL_TABLE_DELETE_BOUTON_ENABLED = "manageQuadrupletsLocalTableDeleteBouton.enabled";
70      public static final String BINDING_MANAGE_QUADRUPLETS_LOCAL_TABLE_REPLACE_BOUTON_ENABLED = "manageQuadrupletsLocalTableReplaceBouton.enabled";
71  
72      /*-----------------------------------------------------------------------*/
73      /*------------------------- Other static fields -------------------------*/
74      /*-----------------------------------------------------------------------*/
75  
76      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1Vz28bRRQeO7HTOCltCUmDKJCUAIlA41ZcEKHQpiFqIqctdipFWPwY746daWdnprOzzYaoiD+BPwHuXJC4cUIcOHPggvgXUMWBK+LNrr2bbdY/wFjyaHbee99775t93377Byr5Gi3fJ2GIdSAM8yjeubG/f6d1nzpmk/qOZspIjeJfoYiKTTTjJue+Qa80aza82g2v3pSekoKKE9HrNVTxzRGn/gGlxqAXsxGO71cbiXk9VIHuoSZF5aF+/eeT4lful98UEQoVVDcDrSwNi0o7mayhInMNehYyPSJVTkQHytBMdKDes/bsJie+f5t49CH6Ak3VUFkRDWAGXR695Qgjig+VQWdWdu4SQfkVg3bbGrO2ph7VWFPadls4YNg/hPzYkcIAHPaIIB0K5ja1iRnhWHltD3PpwPYubP2a3d7bVipKUjao5EmXcoPq/yv+rgVNk5RbWj6g2qA3BmSpw/Nm6xbEbUTeafh5lUDvUhHc2zZoZ4xyPcCIqo3BbJLpJFeP8qtw0/ZSwy5ofJr1Pbuy03C05Nza4I4uZgJSk3WfT6LOpd3skRanBuETzTwMiKtZh76V9mOsF27YfRRgcRYTuNlWYIwUflLfxWy61ZiGDy1uoCDdidS3ZfCIkmBDBoBg0Fym/o0I16K8lIC9PgBsk8IzjbGs++Vs6KA66lRx4uTEavRCZkJh9nE6++lwFpqopAM4NmixeVou6mCKhWLxKaGwgJH174W5X3/4/futnjrMQu75XNcT4gZTq7RU8GYzm/pcLA2BYby6S9R6E037QIoTK9+lnMIaXTMUB/ku2HBsw/Et4h8ARGnqtx9/WvjslwlU3EIVLom7Raz/Npo2BxpYkNwN1fvXo4pmD8/Aeh7+EwZVwI9JsW2HAU0QF5Rr0tAQ1OhCd14c6XlSYEEPDZoxUvI9pvb6eIRA3aUc6pL6W9M//zXX+O56j74CtPN8X/eUwtJHqMwEZ4JG8tpVzlw5nVE+DVyZKmSeZqJ/8cKrrsK8Ga1XTrFYAgn4lCjFmUMslzciRuF7dHxHUdF9Z62OxAbs2DoeP0X9lI79Evrns+Qm5uwV9POaosL2Abf56nGk3LhDTUwrdevy0F9dwz77nK6uLV27tnT1cRjY3t6ObsTu3hlCUGYS/ytBi8exFgzjpuxGbgk1z2Wb7lmzzPRxSolZOV7uxwzzP/CUOVpdy+VlVHEbRksBOuPkCHwNeuZdlxiy1GLCBVF971Tagl0rQxHt8cd2+SQfYWFshJdH6KpCOOsI+Hya/QFIyyPV8mAAwsrYCK+N0M0kc+KPzVh9hGP3MQjB9vEPbivX83YLAAA=";
77      private static final Log log = LogFactory.getLog(PmfmsLocalUI.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 final PmfmsLocalUIHandler handler = createHandler();
99      protected JButton manageQuadrupletsLocalTableDeleteBouton;
100     protected JButton manageQuadrupletsLocalTableNouveauBouton;
101     protected JButton manageQuadrupletsLocalTableReplaceBouton;
102     protected PmfmsLocalUIModel model;
103     protected PmfmMenuUI pmfmsLocalMenuUI;
104     protected SwingTable pmfmsLocalTable;
105 
106     /*-----------------------------------------------------------------------*/
107     /*------------------------- Private components  -------------------------*/
108     /*-----------------------------------------------------------------------*/
109 
110     private PmfmsLocalUI $JPanel0 = this;
111     private JPanel $JPanel1;
112     private JScrollPane $JScrollPane0;
113 
114     /*-----------------------------------------------------------------------*/
115     /*---------------------------- Constructors  ----------------------------*/
116     /*-----------------------------------------------------------------------*/
117 
118     public PmfmsLocalUI(ApplicationUI parentUI) {
119         ApplicationUIUtil.setParentUI(this, parentUI);
120             $initialize();
121     }
122 
123     public PmfmsLocalUI(LayoutManager param0, boolean param1) {
124         super(param0 ,param1);
125         $initialize();
126     }
127 
128     public PmfmsLocalUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
129         super(param1 ,param2);
130         JAXXUtil.initContext(this, parentContext);
131         $initialize();
132     }
133 
134     public PmfmsLocalUI(boolean param0) {
135         super(param0);
136         $initialize();
137     }
138 
139     public PmfmsLocalUI(JAXXContext parentContext, boolean param1) {
140         super(param1);
141         JAXXUtil.initContext(this, parentContext);
142         $initialize();
143     }
144 
145     public PmfmsLocalUI() {
146         $initialize();
147     }
148 
149     public PmfmsLocalUI(JAXXContext parentContext) {
150         JAXXUtil.initContext(this, parentContext);
151         $initialize();
152     }
153 
154     public PmfmsLocalUI(LayoutManager param0) {
155         super(param0);
156         $initialize();
157     }
158 
159     public PmfmsLocalUI(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__manageQuadrupletsLocalTableNouveauBouton(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 PmfmsLocalUIHandler getHandler() {
315         return handler;
316     }
317 
318     public JButton getManageQuadrupletsLocalTableDeleteBouton() {
319         return manageQuadrupletsLocalTableDeleteBouton;
320     }
321 
322     public JButton getManageQuadrupletsLocalTableNouveauBouton() {
323         return manageQuadrupletsLocalTableNouveauBouton;
324     }
325 
326     public JButton getManageQuadrupletsLocalTableReplaceBouton() {
327         return manageQuadrupletsLocalTableReplaceBouton;
328     }
329 
330     public PmfmsLocalUIModel getModel() {
331         return model;
332     }
333 
334     public PmfmMenuUI getPmfmsLocalMenuUI() {
335         return pmfmsLocalMenuUI;
336     }
337 
338     public SwingTable getPmfmsLocalTable() {
339         return pmfmsLocalTable;
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(manageQuadrupletsLocalTableNouveauBouton);
363         buttonsPanel.add(manageQuadrupletsLocalTableDeleteBouton);
364         buttonsPanel.add(manageQuadrupletsLocalTableReplaceBouton);
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 PmfmsLocalUIHandler createHandler() {
379         return new PmfmsLocalUIHandler();
380     }
381 
382     protected void createManageQuadrupletsLocalTableDeleteBouton() {
383         $objectMap.put("manageQuadrupletsLocalTableDeleteBouton", manageQuadrupletsLocalTableDeleteBouton = new JButton());
384         
385         manageQuadrupletsLocalTableDeleteBouton.setName("manageQuadrupletsLocalTableDeleteBouton");
386         manageQuadrupletsLocalTableDeleteBouton.setText(t("reefdb.common.delete"));
387         manageQuadrupletsLocalTableDeleteBouton.setToolTipText(t("reefdb.common.delete"));
388         manageQuadrupletsLocalTableDeleteBouton.putClientProperty("applicationAction", DeletePmfmAction.class);
389     }
390 
391     protected void createManageQuadrupletsLocalTableNouveauBouton() {
392         $objectMap.put("manageQuadrupletsLocalTableNouveauBouton", manageQuadrupletsLocalTableNouveauBouton = new JButton());
393         
394         manageQuadrupletsLocalTableNouveauBouton.setName("manageQuadrupletsLocalTableNouveauBouton");
395         manageQuadrupletsLocalTableNouveauBouton.setText(t("reefdb.common.new"));
396         manageQuadrupletsLocalTableNouveauBouton.setToolTipText(t("reefdb.common.new"));
397         manageQuadrupletsLocalTableNouveauBouton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__manageQuadrupletsLocalTableNouveauBouton"));
398     }
399 
400     protected void createManageQuadrupletsLocalTableReplaceBouton() {
401         $objectMap.put("manageQuadrupletsLocalTableReplaceBouton", manageQuadrupletsLocalTableReplaceBouton = new JButton());
402         
403         manageQuadrupletsLocalTableReplaceBouton.setName("manageQuadrupletsLocalTableReplaceBouton");
404         manageQuadrupletsLocalTableReplaceBouton.setText(t("reefdb.common.replace"));
405         manageQuadrupletsLocalTableReplaceBouton.setToolTipText(t("reefdb.common.replace"));
406         manageQuadrupletsLocalTableReplaceBouton.putClientProperty("applicationAction", OpenReplacePmfmAction.class);
407     }
408 
409     protected void createModel() {
410         $objectMap.put("model", model = getContextValue(PmfmsLocalUIModel.class));
411     }
412 
413     protected void createPmfmsLocalMenuUI() {
414         $objectMap.put("pmfmsLocalMenuUI", pmfmsLocalMenuUI = new PmfmMenuUI(this));
415         
416         pmfmsLocalMenuUI.setName("pmfmsLocalMenuUI");
417     }
418 
419     protected void createPmfmsLocalTable() {
420         $objectMap.put("pmfmsLocalTable", pmfmsLocalTable = new SwingTable());
421         
422         pmfmsLocalTable.setName("pmfmsLocalTable");
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(pmfmsLocalMenuUI, 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(pmfmsLocalTable);
442         addChildrenToButtonsPanel();
443         
444         // apply 2 data bindings
445         JAXXUtil.applyDataBinding(this, $bindings.keySet());
446         
447         // apply 9 property setters
448         manageQuadrupletsLocalTableNouveauBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
449         manageQuadrupletsLocalTableDeleteBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
450         manageQuadrupletsLocalTableReplaceBouton.setAlignmentX(Component.CENTER_ALIGNMENT);
451         manageQuadrupletsLocalTableNouveauBouton.setIcon(SwingUtil.createActionIcon("add"));
452         manageQuadrupletsLocalTableDeleteBouton.setIcon(SwingUtil.createActionIcon("delete"));
453         manageQuadrupletsLocalTableReplaceBouton.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         createPmfmsLocalMenuUI();
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         createPmfmsLocalTable();
478         createButtonsPanel();
479         createManageQuadrupletsLocalTableNouveauBouton();
480         createManageQuadrupletsLocalTableDeleteBouton();
481         createManageQuadrupletsLocalTableReplaceBouton();
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_MANAGE_QUADRUPLETS_LOCAL_TABLE_DELETE_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                     manageQuadrupletsLocalTableDeleteBouton.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_MANAGE_QUADRUPLETS_LOCAL_TABLE_REPLACE_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                     manageQuadrupletsLocalTableReplaceBouton.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 }