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