View Javadoc
1   package fr.ifremer.reefdb.ui.swing.content.manage.rule.pmfm;
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.util.ReefDbUI;
33  import java.awt.BorderLayout;
34  import java.awt.Component;
35  import java.awt.Container;
36  import java.awt.FlowLayout;
37  import java.awt.LayoutManager;
38  import java.awt.event.ActionEvent;
39  import java.awt.event.ActionListener;
40  import java.util.ArrayList;
41  import java.util.HashMap;
42  import java.util.List;
43  import java.util.Map;
44  import java.util.TreeMap;
45  import javax.swing.BorderFactory;
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 jaxx.runtime.swing.help.JAXXHelpUI;
60  import org.apache.commons.logging.Log;
61  import org.apache.commons.logging.LogFactory;
62  import static org.nuiton.i18n.I18n.t;
63  
64  public class ControlPmfmTableUI extends JPanel implements JAXXHelpUI<ReefDbHelpBroker>, ReefDbUI<ControlPmfmTableUIModel, ControlPmfmTableUIHandler>, JAXXObject {
65  
66      /*-----------------------------------------------------------------------*/
67      /*------------------ Constants for all public bindings ------------------*/
68      /*-----------------------------------------------------------------------*/
69  
70      public static final String BINDING_ADD_PMFM_BUTTON_ENABLED = "addPmfmButton.enabled";
71      public static final String BINDING_REMOVE_PMFM_BUTTON_ENABLED = "removePmfmButton.enabled";
72  
73      /*-----------------------------------------------------------------------*/
74      /*------------------------- Other static fields -------------------------*/
75      /*-----------------------------------------------------------------------*/
76  
77      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1Vz29TRxBem9ghTik/QiE0oSQBpYmQ1kXcmqpAoBFJzQ/FQYrwoVl7N87SfW+XfevkRRFV/wT+BLhzQeqtp6qHnnvoBfEvVFUPvVad2Wf7xfYjSQWWvHreme+bb+bNjF/9SQqRJdNPWBxT2wqdDARdubW+/qD+RDTcHRE1rDROW5J8cnmSr5FR3r2PHLlcqyC83IaXb+vA6FCE+9ALFVKK3K4S0ZYQzpGLvYhGFJWrXfNCbFq2w9oVlcX64u+/8s/5jy/zhMQG1I1AKlOHodJMhiokL7kjZyDSNisrFjZBhpVhE/SewLvbikXRfRaIp+QHMlwhRcMskDkyc/SUPYfHxwZiNXTorFYPg81gjdWVeLTsyNKmpXLTikBYaoXY5HXakjTaASUU/YGYBixkTQGJKUENgCG1fiJjfJyiI4VAc6Ec+fbDEN9DtpS9WLf6e2EduXoA/Sr8vlO/C7hF753Czw8GeMhClHseax63CVaqDXBSaELgSBd/qr+EjtB9Qp62GLeyKa6nWhx60So+ewASnenyHb+y4uN/AW+nR4C/7Y3d8b2Gvz/FY7xrO8E4R02LLedAIRnrIUtu0XUizQQU622RgvD+UtvHkomeVoYhoemQpF2cq5ECvjyYxPHa4FytgimZqPG+iUJCb/333NgfP7/9aakzRiWI/Umm674tAO1trDbQBhJDn0xmqOWkKt9jZqEGwygUrBC/IiYzhFXbZhAH8U4jnCKc3mXRFlAUht/88uu5jd+PkfwSKSnN+BJD/2Uy4rYsVEErHpsbN72ij3aOw3kKvnnsT2059ueNvUX/lAB3acMK5sSadErwxDLn5mbanZsOgEOHmfn5Z5DWd9tMSc4AXmF17NGLewdAnsVQ58mMOneTrY/89s9Y9fXNTq1zkPuFd7qn9S48JkUZKhkKv7Ta+yhzSY2aSLS4TvdO1iYimavItKf0c39eHSjukCMlqKXU4TKCyTFoeQe3IoadeLpdlYYOAh1Sbxp1Wqs1ada8x/hA3cAJagd7cViEKAEgZ/f88qIy+oZLP7lzWFcUdM0XDJ+uk/55+7/SixBDONFVf7ZXfcfam8DEQAKJX38OX2bkMDU7OzWdXDeFS96w4Kt6J5qbR8fAuN13ZDqwJw5LNgf5KbarwZl8/BW0L5uqy5DDIvp6gD+HZ+lQRrxexaOazXDhvRkmj5BVCaaxGQbwv7V+ANNnR9KycQDD9BG0DMlGsrHfS4U8RMV/oYSXYqIJAAA=";
78      private static final Log log = LogFactory.getLog(ControlPmfmTableUI.class);
79      private static final long serialVersionUID = 1L;
80  
81      /*-----------------------------------------------------------------------*/
82      /*--------------------------- Internal states ---------------------------*/
83      /*-----------------------------------------------------------------------*/
84  
85      protected List<Object> $activeBindings = new ArrayList<Object>();
86      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
87      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
88      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
89      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
90      private boolean allComponentsCreated;
91      protected final JAXXContext delegateContext = new DefaultJAXXContext();
92  
93      /*-----------------------------------------------------------------------*/
94      /*------------------------ Protected components  ------------------------*/
95      /*-----------------------------------------------------------------------*/
96  
97      protected JScrollPane ControlPmfmTableUIPanel;
98      protected JButton addPmfmButton;
99      protected ReefDbHelpBroker broker;
100     protected SwingTable controlPmfmTable;
101     protected ControlPmfmTableUI controlPmfmTableUI = this;
102     protected final ControlPmfmTableUIHandler handler = createHandler();
103     protected ControlPmfmTableUIModel model;
104     protected JButton removePmfmButton;
105 
106     /*-----------------------------------------------------------------------*/
107     /*------------------------- Private components  -------------------------*/
108     /*-----------------------------------------------------------------------*/
109 
110     private JPanel $JPanel0;
111     private JPanel $JPanel1;
112 
113     /*-----------------------------------------------------------------------*/
114     /*---------------------------- Constructors  ----------------------------*/
115     /*-----------------------------------------------------------------------*/
116 
117     public ControlPmfmTableUI(ApplicationUI parentUI) {
118         ApplicationUIUtil.setParentUI(this, parentUI);
119             $initialize();
120     }
121 
122     public ControlPmfmTableUI(LayoutManager param0, boolean param1) {
123         super(param0 ,param1);
124         $initialize();
125     }
126 
127     public ControlPmfmTableUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
128         super(param1 ,param2);
129         JAXXUtil.initContext(this, parentContext);
130         $initialize();
131     }
132 
133     public ControlPmfmTableUI(boolean param0) {
134         super(param0);
135         $initialize();
136     }
137 
138     public ControlPmfmTableUI(JAXXContext parentContext, boolean param1) {
139         super(param1);
140         JAXXUtil.initContext(this, parentContext);
141         $initialize();
142     }
143 
144     public ControlPmfmTableUI() {
145         $initialize();
146     }
147 
148     public ControlPmfmTableUI(JAXXContext parentContext) {
149         JAXXUtil.initContext(this, parentContext);
150         $initialize();
151     }
152 
153     public ControlPmfmTableUI(LayoutManager param0) {
154         super(param0);
155         $initialize();
156     }
157 
158     public ControlPmfmTableUI(JAXXContext parentContext, LayoutManager param1) {
159         super(param1);
160         JAXXUtil.initContext(this, parentContext);
161         $initialize();
162     }
163 
164     /*-----------------------------------------------------------------------*/
165     /*--------------------------- Statics methods ---------------------------*/
166     /*-----------------------------------------------------------------------*/
167 
168     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
169         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
170     }
171 
172     /*-----------------------------------------------------------------------*/
173     /*---------------------- JAXXObject implementation ----------------------*/
174     /*-----------------------------------------------------------------------*/
175 
176     @Override
177     public void applyDataBinding(String $binding) {
178         if (allComponentsCreated && $bindings.containsKey($binding)) {
179             getDataBinding($binding).applyDataBinding();
180         }
181         processDataBinding($binding);
182     }
183 
184     @Override
185     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
186         super.firePropertyChange(propertyName, oldValue, newValue);
187     }
188 
189     @Override
190     public Map<String, Object> get$objectMap() {
191         return $objectMap;
192     }
193 
194     @Override
195     public JAXXBinding getDataBinding(String bindingId) {
196         return $bindings.get(bindingId);
197     }
198 
199     @Override
200     public JAXXBinding[] getDataBindings() {
201         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
202     }
203 
204     @Override
205     public Object getObjectById(String id) {
206         return $objectMap.get(id);
207     }
208 
209     @Override
210     public void processDataBinding(String $binding, boolean $force) {
211         if (!$force && $activeBindings.contains($binding)) { 
212             return;
213         }
214         $activeBindings.add($binding);
215         try {
216             if (allComponentsCreated && $bindings.containsKey($binding)) {
217                 getDataBinding($binding).processDataBinding();
218             }
219         } finally {
220             $activeBindings.remove($binding);
221         }
222     }
223 
224     @Override
225     public void processDataBinding(String $binding) {
226         processDataBinding($binding, false);
227     }
228 
229     @Override
230     public void registerDataBinding(JAXXBinding binding) {
231         $bindings.put(binding.getId(), binding);
232     }
233 
234     @Override
235     public void removeDataBinding(String $binding) {
236         if (allComponentsCreated && $bindings.containsKey($binding)) {
237             getDataBinding($binding).removeDataBinding();
238         }
239     }
240 
241     /*-----------------------------------------------------------------------*/
242     /*--------------------- JAXXContext implementation  ---------------------*/
243     /*-----------------------------------------------------------------------*/
244 
245     @Override
246     public <T> T getContextValue(Class<T> clazz) {
247         return delegateContext.getContextValue(clazz, null);
248     }
249 
250     @Override
251     public <T> T getContextValue(Class<T> clazz, String name) {
252         return delegateContext.getContextValue(clazz, name);
253     }
254 
255     @Override
256     public JAXXContext getDelegateContext() {
257         return delegateContext;
258     }
259 
260     @Override
261     public <O extends Container> O getParentContainer(Class<O> clazz) {
262         return SwingUtil.getParentContainer(this, clazz);
263     }
264 
265     @Override
266     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
267         return SwingUtil.getParentContainer(source, clazz);
268     }
269 
270     @Override
271     public <T> void removeContextValue(Class<T> clazz) {
272         delegateContext.removeContextValue(clazz, null);
273     }
274 
275     @Override
276     public <T> void removeContextValue(Class<T> clazz, String name) {
277         delegateContext.removeContextValue(clazz, name);
278     }
279 
280     @Override
281     public <T> void setContextValue(T o) {
282         delegateContext.setContextValue(o, null);
283     }
284 
285     @Override
286     public <T> void setContextValue(T o, String name) {
287         delegateContext.setContextValue(o, name);
288     }
289 
290     /*-----------------------------------------------------------------------*/
291     /*---------------------------- Event methods ----------------------------*/
292     /*-----------------------------------------------------------------------*/
293 
294     public void doActionPerformed__on__addPmfmButton(ActionEvent event) {
295         if (log.isDebugEnabled()) {
296             log.debug(event);
297         }
298         handler.openAddPmfmDialog();
299     }
300 
301     public void doActionPerformed__on__removePmfmButton(ActionEvent event) {
302         if (log.isDebugEnabled()) {
303             log.debug(event);
304         }
305         handler.removePmfm();
306     }
307 
308     /*-----------------------------------------------------------------------*/
309     /*----------------------- Public acessor methods  -----------------------*/
310     /*-----------------------------------------------------------------------*/
311 
312     public JButton getAddPmfmButton() {
313         return addPmfmButton;
314     }
315 
316     public ReefDbHelpBroker getBroker() {
317         return broker;
318     }
319 
320     public SwingTable getControlPmfmTable() {
321         return controlPmfmTable;
322     }
323 
324     public JScrollPane getControlPmfmTableUIPanel() {
325         return ControlPmfmTableUIPanel;
326     }
327 
328     public ControlPmfmTableUIHandler getHandler() {
329         return handler;
330     }
331 
332     public ControlPmfmTableUIModel getModel() {
333         return model;
334     }
335 
336     public JButton getRemovePmfmButton() {
337         return removePmfmButton;
338     }
339 
340     /*-----------------------------------------------------------------------*/
341     /*---------------------------- Other methods ----------------------------*/
342     /*-----------------------------------------------------------------------*/
343 
344     @Override
345     public void registerHelpId(ReefDbHelpBroker broker, Component component, String helpId) {
346         broker.installUI(component, helpId);
347     }
348 
349     @Override
350     public void showHelp(String helpId) {
351         getBroker().showHelp(this, helpId);
352     }
353 
354     /*-----------------------------------------------------------------------*/
355     /*--------------------- Protected acessors methods  ---------------------*/
356     /*-----------------------------------------------------------------------*/
357 
358     protected JPanel get$JPanel0() {
359         return $JPanel0;
360     }
361 
362     protected JPanel get$JPanel1() {
363         return $JPanel1;
364     }
365 
366     /*-----------------------------------------------------------------------*/
367     /*--------------------- Components creation methods ---------------------*/
368     /*-----------------------------------------------------------------------*/
369 
370     protected void addChildrenToControlPmfmTableUI() {
371         if (!allComponentsCreated) {
372             return;
373         }
374         add(ControlPmfmTableUIPanel);
375         add($JPanel0, BorderLayout.PAGE_END);
376     }
377 
378     protected void addChildrenToControlPmfmTableUIPanel() {
379         if (!allComponentsCreated) {
380             return;
381         }
382         ControlPmfmTableUIPanel.getViewport().add(controlPmfmTable);
383     }
384 
385     protected void createAddPmfmButton() {
386         $objectMap.put("addPmfmButton", addPmfmButton = new JButton());
387         
388         addPmfmButton.setName("addPmfmButton");
389         addPmfmButton.setText(t("reefdb.common.add"));
390         addPmfmButton.setToolTipText(t("reefdb.rule.pmfm.add.tip"));
391         addPmfmButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__addPmfmButton"));
392     }
393 
394     protected void createBroker() {
395         $objectMap.put("broker", broker = new ReefDbHelpBroker("reefdb.home.help"));
396     }
397 
398     protected void createControlPmfmTable() {
399         $objectMap.put("controlPmfmTable", controlPmfmTable = new SwingTable());
400         
401         controlPmfmTable.setName("controlPmfmTable");
402     }
403 
404     protected void createControlPmfmTableUIPanel() {
405         $objectMap.put("ControlPmfmTableUIPanel", ControlPmfmTableUIPanel = new JScrollPane());
406         
407         ControlPmfmTableUIPanel.setName("ControlPmfmTableUIPanel");
408     }
409 
410     protected ControlPmfmTableUIHandler createHandler() {
411         return new ControlPmfmTableUIHandler();
412     }
413 
414     protected void createModel() {
415         $objectMap.put("model", model = getContextValue(ControlPmfmTableUIModel.class));
416     }
417 
418     protected void createRemovePmfmButton() {
419         $objectMap.put("removePmfmButton", removePmfmButton = new JButton());
420         
421         removePmfmButton.setName("removePmfmButton");
422         removePmfmButton.setText(t("reefdb.common.delete"));
423         removePmfmButton.setToolTipText(t("reefdb.rule.pmfm.delete.tip"));
424         removePmfmButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__removePmfmButton"));
425     }
426 
427     /*-----------------------------------------------------------------------*/
428     /*------------------------ Internal jaxx methods ------------------------*/
429     /*-----------------------------------------------------------------------*/
430 
431     private void $completeSetup() {
432         allComponentsCreated = true;
433         if (log.isDebugEnabled()) {
434             log.debug(this);
435         }
436         addChildrenToControlPmfmTableUI();
437         addChildrenToControlPmfmTableUIPanel();
438         // inline complete setup of $JPanel0
439         $JPanel0.add($JPanel1, BorderLayout.LINE_START);
440         // inline complete setup of $JPanel1
441         $JPanel1.add(addPmfmButton);
442         $JPanel1.add(removePmfmButton);
443         
444         // apply 2 data bindings
445         JAXXUtil.applyDataBinding(this, $bindings.keySet());
446         
447         // apply 8 property setters
448         addPmfmButton.setAlignmentX(Component.CENTER_ALIGNMENT);
449         removePmfmButton.setAlignmentX(Component.CENTER_ALIGNMENT);
450         setBorder(BorderFactory.createTitledBorder(t("reefdb.rule.pmfm.title")));
451         addPmfmButton.setIcon(SwingUtil.createActionIcon("add"));
452         removePmfmButton.setIcon(SwingUtil.createActionIcon("delete"));
453     }
454 
455     private void $initialize() {
456         if (allComponentsCreated) {
457             return;
458         }
459         if (log.isDebugEnabled()) {
460             log.debug(this);
461         }
462         handler.beforeInit(this);
463         $objectMap.put("controlPmfmTableUI", controlPmfmTableUI);
464         createModel();
465         createBroker();
466         createControlPmfmTableUIPanel();
467         createControlPmfmTable();
468         // inline creation of $JPanel0
469         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
470         
471         $JPanel0.setName("$JPanel0");
472         $JPanel0.setLayout(new BorderLayout());
473         // inline creation of $JPanel1
474         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
475         
476         $JPanel1.setName("$JPanel1");
477         $JPanel1.setLayout(new FlowLayout());
478         createAddPmfmButton();
479         createRemovePmfmButton();
480         // inline creation of controlPmfmTableUI
481         setName("controlPmfmTableUI");
482         setLayout(new BorderLayout());
483         controlPmfmTableUI.putClientProperty("validatorLabel", t("reefdb.rule.pmfm.title"));
484         
485         // registers 2 data bindings
486         $registerDefaultBindings();
487         $completeSetup();
488         handler.afterInit(this);
489     }
490 
491     private void $registerDefaultBindings() {
492         // register 2 data bindings
493         registerDataBinding(new DefaultJAXXBinding(this, BINDING_ADD_PMFM_BUTTON_ENABLED, true) {
494         
495             @Override
496             public void applyDataBinding() {
497                 if (model != null) {
498                     model.addPropertyChangeListener("editable", this);
499                 }
500             }
501         
502             @Override
503             public void processDataBinding() {
504                 if (model != null) {
505                     addPmfmButton.setEnabled(model.isEditable());
506                 }
507             }
508         
509             @Override
510             public void removeDataBinding() {
511                 if (model != null) {
512                     model.removePropertyChangeListener("editable", this);
513                 }
514             }
515         });
516         registerDataBinding(new DefaultJAXXBinding(this, BINDING_REMOVE_PMFM_BUTTON_ENABLED, true, true) {
517         
518             @Override
519             public void applyDataBinding() {
520                 if (model != null) {
521                     model.addPropertyChangeListener("editable", this);
522                 }
523                 if (model != null) {
524                     model.addPropertyChangeListener("selectedRows", this);
525                 }
526             }
527         
528             @Override
529             public void processDataBinding() {
530                 if (model != null && model.getSelectedRows() != null) {
531                     removePmfmButton.setEnabled(model.isEditable() && !model.getSelectedRows().isEmpty());
532                 }
533             }
534         
535             @Override
536             public void removeDataBinding() {
537                 if (model != null) {
538                     model.removePropertyChangeListener("editable", this);
539                 }
540                 if (model != null) {
541                     model.removePropertyChangeListener("selectedRows", this);
542                 }
543             }
544         });
545     }
546 
547 }