View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.rule.program;
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 ControlProgramTableUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ControlProgramTableUIModel, ControlProgramTableUIHandler>, JAXXObject {
40  
41      /*-----------------------------------------------------------------------*/
42      /*------------------ Constants for all public bindings ------------------*/
43      /*-----------------------------------------------------------------------*/
44  
45      public static final String BINDING_REMOVE_PROGRAM_BUTTON_ENABLED = "removeProgramButton.enabled";
46  
47      /*-----------------------------------------------------------------------*/
48      /*------------------------- Other static fields -------------------------*/
49      /*-----------------------------------------------------------------------*/
50  
51      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1VQW8bRRR+dmKncQotiVqSNpQkoNYR0piqxyBI0zZKIpeGOkhRfYDxztSZsruznR0nG0Wt+hP6E+DOBYkbp6oHzhy4IP4CQhy4It6bdbx2vYkjgSWPdue973vfe37v+fs/oBQbWHzCk4SZTmhVINnW7d3dB60n0rN3ZewZFVltIP0UilBswpTo3ccWPmjWCV7rwmt3dBDpUIZ96JU6VGJ76Mt4T0pr4b1BhBfHtUbPvJJEHXPM2hOVx/rtX38WX4oX3xUBkgjVTWIqC6NQWSbjdSgqYWEaI+3zms/DNsowKmyj3rfo7o7P4/hzHsin8Bwm6lCOuEEyC0tnT9lxOHwSWbjk6dAa7W8b3TY82OEtX365aWHrsWHqsZGBNExwX7GOYvEBSmEEQGYW8JC3JWbmSxalaEwvhyyKXLiyhVKghfQtPPj/yO8TYxah3DL6G2ks3DgxxF1820DMmvPMoFdyK7HNQ1L8LlU/6TJsNTz088lE2MkexUwOhQXWJ+Vphwuj2vJWpseSF2vQswMQ13SP8tyHW07Cx9gWAxrc7WD4Y9+b9H6Fjtme7SIXoitrrWMt6oSZAb70lryvZvmgaL0vB3Bker/rZuDqQHfj3LBsbrLGLjShRD8lDudsc3jUHqIpHbLZN4aMCJ31n8szv/70+4/r/ZN1Kde1bzFgx2PvRNgOikJfSMeqY5Vfu8+jlSaySB+3itsa8znCGl0zisN47xCcEZxt8HgPKUoTv716ffnrX8aguA4VX3Oxzsl/EybtnsEqaF8k0WerTtH5g3N4XsRvkfpUG0F9unq05p5S4CHzjORW7ijrS5Faqra65Dp4YBgseSwtLz/DvL7aR7PgiK/zFnXrtaPTMM8SrPR8TqV76bYmf/57pvHD6nG1C5j93InuWcVLj6CsQl+F0m2y7pLK3VxTUSw7QmfLKG89wUn7KeqO7Q13fjRU4TELFSyo0uEm4WEMu9/CuJUJ7soLrjKeDgIdMmeYslr7Oyracfa54cqhF1YvSjoU7qarCD3dgpzBGqVt/A1tZVxg0sqevOl+ece2QYXzwwpTRxJpYUKGVCZMbOMop3xMxfeEcmunurxw/frColvLrC1t+pNK8VAfxNVlcgwie1illhnOPG87jEq+gPn6/FCjM7z9CfYsX2ipUOAG+nQoRIHOykhGut6m44t8hrkzaKpgPdthgP88u6cwXTuTlkenMCyeQcu48tIt+59UeCNU/AsDFz+NaQkAAA==";
52      private static final Log log = LogFactory.getLog(ControlProgramTableUI.class);
53      private static final long serialVersionUID = 1L;
54  
55      /*-----------------------------------------------------------------------*/
56      /*--------------------------- Internal states ---------------------------*/
57      /*-----------------------------------------------------------------------*/
58  
59      protected List<Object> $activeBindings = new ArrayList<Object>();
60      protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
61      protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
62      protected Map<String, Object> $objectMap = new HashMap<String, Object>();
63      protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
64      private boolean allComponentsCreated;
65      protected final JAXXContext delegateContext = new DefaultJAXXContext();
66  
67      /*-----------------------------------------------------------------------*/
68      /*------------------------ Protected components  ------------------------*/
69      /*-----------------------------------------------------------------------*/
70  
71      protected JButton addProgramButton;
72      protected DaliHelpBroker broker;
73      protected SwingTable controlProgramTable;
74      protected ControlProgramTableUI controlProgramTableUI = this;
75      protected JScrollPane controlProgramTableUIPanel;
76      protected final ControlProgramTableUIHandler handler = createHandler();
77      protected ControlProgramTableUIModel model;
78      protected JButton removeProgramButton;
79  
80      /*-----------------------------------------------------------------------*/
81      /*------------------------- Private components  -------------------------*/
82      /*-----------------------------------------------------------------------*/
83  
84      private JPanel $JPanel0;
85      private JPanel $JPanel1;
86  
87      /*-----------------------------------------------------------------------*/
88      /*---------------------------- Constructors  ----------------------------*/
89      /*-----------------------------------------------------------------------*/
90  
91      public ControlProgramTableUI(ApplicationUI parentUI) {
92          ApplicationUIUtil.setParentUI(this, parentUI);
93              $initialize();
94      }
95  
96      public ControlProgramTableUI() {
97          $initialize();
98      }
99  
100     public ControlProgramTableUI(JAXXContext parentContext) {
101         JAXXUtil.initContext(this, parentContext);
102         $initialize();
103     }
104 
105     public ControlProgramTableUI(boolean param0) {
106         super(param0);
107         $initialize();
108     }
109 
110     public ControlProgramTableUI(JAXXContext parentContext, boolean param1) {
111         super(param1);
112         JAXXUtil.initContext(this, parentContext);
113         $initialize();
114     }
115 
116     public ControlProgramTableUI(LayoutManager param0) {
117         super(param0);
118         $initialize();
119     }
120 
121     public ControlProgramTableUI(JAXXContext parentContext, LayoutManager param1) {
122         super(param1);
123         JAXXUtil.initContext(this, parentContext);
124         $initialize();
125     }
126 
127     public ControlProgramTableUI(LayoutManager param0, boolean param1) {
128         super(param0 ,param1);
129         $initialize();
130     }
131 
132     public ControlProgramTableUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
133         super(param1 ,param2);
134         JAXXUtil.initContext(this, parentContext);
135         $initialize();
136     }
137 
138     /*-----------------------------------------------------------------------*/
139     /*--------------------------- Statics methods ---------------------------*/
140     /*-----------------------------------------------------------------------*/
141 
142     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
143         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
144     }
145 
146     /*-----------------------------------------------------------------------*/
147     /*---------------------- JAXXObject implementation ----------------------*/
148     /*-----------------------------------------------------------------------*/
149 
150     @Override
151     public void applyDataBinding(String $binding) {
152         if (allComponentsCreated && $bindings.containsKey($binding)) {
153             getDataBinding($binding).applyDataBinding();
154         }
155         processDataBinding($binding);
156     }
157 
158     @Override
159     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
160         super.firePropertyChange(propertyName, oldValue, newValue);
161     }
162 
163     @Override
164     public Map<String, Object> get$objectMap() {
165         return $objectMap;
166     }
167 
168     @Override
169     public JAXXBinding getDataBinding(String bindingId) {
170         return $bindings.get(bindingId);
171     }
172 
173     @Override
174     public JAXXBinding[] getDataBindings() {
175         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
176     }
177 
178     @Override
179     public Object getObjectById(String id) {
180         return $objectMap.get(id);
181     }
182 
183     @Override
184     public void processDataBinding(String $binding, boolean $force) {
185         if (!$force && $activeBindings.contains($binding)) { 
186             return;
187         }
188         $activeBindings.add($binding);
189         try {
190             if (allComponentsCreated && $bindings.containsKey($binding)) {
191                 getDataBinding($binding).processDataBinding();
192             }
193         } finally {
194             $activeBindings.remove($binding);
195         }
196     }
197 
198     @Override
199     public void processDataBinding(String $binding) {
200         processDataBinding($binding, false);
201     }
202 
203     @Override
204     public void registerDataBinding(JAXXBinding binding) {
205         $bindings.put(binding.getId(), binding);
206     }
207 
208     @Override
209     public void removeDataBinding(String $binding) {
210         if (allComponentsCreated && $bindings.containsKey($binding)) {
211             getDataBinding($binding).removeDataBinding();
212         }
213     }
214 
215     /*-----------------------------------------------------------------------*/
216     /*--------------------- JAXXContext implementation  ---------------------*/
217     /*-----------------------------------------------------------------------*/
218 
219     @Override
220     public <T> T getContextValue(Class<T> clazz) {
221         return delegateContext.getContextValue(clazz, null);
222     }
223 
224     @Override
225     public <T> T getContextValue(Class<T> clazz, String name) {
226         return delegateContext.getContextValue(clazz, name);
227     }
228 
229     @Override
230     public JAXXContext getDelegateContext() {
231         return delegateContext;
232     }
233 
234     @Override
235     public <O extends Container> O getParentContainer(Class<O> clazz) {
236         return SwingUtil.getParentContainer(this, clazz);
237     }
238 
239     @Override
240     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
241         return SwingUtil.getParentContainer(source, clazz);
242     }
243 
244     @Override
245     public <T> void removeContextValue(Class<T> clazz) {
246         delegateContext.removeContextValue(clazz, null);
247     }
248 
249     @Override
250     public <T> void removeContextValue(Class<T> clazz, String name) {
251         delegateContext.removeContextValue(clazz, name);
252     }
253 
254     @Override
255     public <T> void setContextValue(T o) {
256         delegateContext.setContextValue(o, null);
257     }
258 
259     @Override
260     public <T> void setContextValue(T o, String name) {
261         delegateContext.setContextValue(o, name);
262     }
263 
264     /*-----------------------------------------------------------------------*/
265     /*---------------------------- Event methods ----------------------------*/
266     /*-----------------------------------------------------------------------*/
267 
268     public void doActionPerformed__on__addProgramButton(ActionEvent event) {
269         if (log.isDebugEnabled()) {
270             log.debug(event);
271         }
272         handler.openAddDialog();
273     }
274 
275     public void doActionPerformed__on__removeProgramButton(ActionEvent event) {
276         if (log.isDebugEnabled()) {
277             log.debug(event);
278         }
279         handler.removePrograms();
280     }
281 
282     /*-----------------------------------------------------------------------*/
283     /*----------------------- Public acessor methods  -----------------------*/
284     /*-----------------------------------------------------------------------*/
285 
286     public JButton getAddProgramButton() {
287         return addProgramButton;
288     }
289 
290     public DaliHelpBroker getBroker() {
291         return broker;
292     }
293 
294     public SwingTable getControlProgramTable() {
295         return controlProgramTable;
296     }
297 
298     public JScrollPane getControlProgramTableUIPanel() {
299         return controlProgramTableUIPanel;
300     }
301 
302     public ControlProgramTableUIHandler getHandler() {
303         return handler;
304     }
305 
306     public ControlProgramTableUIModel getModel() {
307         return model;
308     }
309 
310     public JButton getRemoveProgramButton() {
311         return removeProgramButton;
312     }
313 
314     /*-----------------------------------------------------------------------*/
315     /*---------------------------- Other methods ----------------------------*/
316     /*-----------------------------------------------------------------------*/
317 
318     @Override
319     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
320         broker.installUI(component, helpId);
321     }
322 
323     @Override
324     public void showHelp(String helpId) {
325         getBroker().showHelp(this, helpId);
326     }
327 
328     /*-----------------------------------------------------------------------*/
329     /*--------------------- Protected acessors methods  ---------------------*/
330     /*-----------------------------------------------------------------------*/
331 
332     protected JPanel get$JPanel0() {
333         return $JPanel0;
334     }
335 
336     protected JPanel get$JPanel1() {
337         return $JPanel1;
338     }
339 
340     /*-----------------------------------------------------------------------*/
341     /*--------------------- Components creation methods ---------------------*/
342     /*-----------------------------------------------------------------------*/
343 
344     protected void addChildrenToControlProgramTableUI() {
345         if (!allComponentsCreated) {
346             return;
347         }
348         add(controlProgramTableUIPanel);
349         add($JPanel0, BorderLayout.PAGE_END);
350     }
351 
352     protected void addChildrenToControlProgramTableUIPanel() {
353         if (!allComponentsCreated) {
354             return;
355         }
356         controlProgramTableUIPanel.getViewport().add(controlProgramTable);
357     }
358 
359     protected void createAddProgramButton() {
360         $objectMap.put("addProgramButton", addProgramButton = new JButton());
361         
362         addProgramButton.setName("addProgramButton");
363         addProgramButton.setText(t("dali.common.add"));
364         addProgramButton.setToolTipText(t("dali.rule.program.add.tip"));
365         addProgramButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__addProgramButton"));
366     }
367 
368     protected void createBroker() {
369         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
370     }
371 
372     protected void createControlProgramTable() {
373         $objectMap.put("controlProgramTable", controlProgramTable = new SwingTable());
374         
375         controlProgramTable.setName("controlProgramTable");
376     }
377 
378     protected void createControlProgramTableUIPanel() {
379         $objectMap.put("controlProgramTableUIPanel", controlProgramTableUIPanel = new JScrollPane());
380         
381         controlProgramTableUIPanel.setName("controlProgramTableUIPanel");
382     }
383 
384     protected ControlProgramTableUIHandler createHandler() {
385         return new ControlProgramTableUIHandler();
386     }
387 
388     protected void createModel() {
389         $objectMap.put("model", model = getContextValue(ControlProgramTableUIModel.class));
390     }
391 
392     protected void createRemoveProgramButton() {
393         $objectMap.put("removeProgramButton", removeProgramButton = new JButton());
394         
395         removeProgramButton.setName("removeProgramButton");
396         removeProgramButton.setText(t("dali.common.delete"));
397         removeProgramButton.setToolTipText(t("dali.rule.program.delete.tip"));
398         removeProgramButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__removeProgramButton"));
399     }
400 
401     /*-----------------------------------------------------------------------*/
402     /*------------------------ Internal jaxx methods ------------------------*/
403     /*-----------------------------------------------------------------------*/
404 
405     private void $completeSetup() {
406         allComponentsCreated = true;
407         if (log.isDebugEnabled()) {
408             log.debug(this);
409         }
410         addChildrenToControlProgramTableUI();
411         addChildrenToControlProgramTableUIPanel();
412         // inline complete setup of $JPanel0
413         $JPanel0.add($JPanel1, BorderLayout.LINE_START);
414         // inline complete setup of $JPanel1
415         $JPanel1.add(addProgramButton);
416         $JPanel1.add(removeProgramButton);
417         
418         // apply 1 data bindings
419         JAXXUtil.applyDataBinding(this, $bindings.keySet());
420         
421         // apply 7 property setters
422         addProgramButton.setAlignmentX(Component.CENTER_ALIGNMENT);
423         removeProgramButton.setAlignmentX(Component.CENTER_ALIGNMENT);
424         setBorder(BorderFactory.createTitledBorder(t("dali.rule.program.title")));
425         addProgramButton.setIcon(SwingUtil.createActionIcon("add"));
426         removeProgramButton.setIcon(SwingUtil.createActionIcon("delete"));
427     }
428 
429     private void $initialize() {
430         if (allComponentsCreated) {
431             return;
432         }
433         if (log.isDebugEnabled()) {
434             log.debug(this);
435         }
436         handler.beforeInit(this);
437         $objectMap.put("controlProgramTableUI", controlProgramTableUI);
438         createModel();
439         createBroker();
440         createControlProgramTableUIPanel();
441         createControlProgramTable();
442         // inline creation of $JPanel0
443         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
444         
445         $JPanel0.setName("$JPanel0");
446         $JPanel0.setLayout(new BorderLayout());
447         // inline creation of $JPanel1
448         $objectMap.put("$JPanel1", $JPanel1 = new JPanel());
449         
450         $JPanel1.setName("$JPanel1");
451         createAddProgramButton();
452         createRemoveProgramButton();
453         // inline creation of controlProgramTableUI
454         setName("controlProgramTableUI");
455         setLayout(new BorderLayout());
456         controlProgramTableUI.putClientProperty("validatorLabel", t("dali.rule.program.title"));
457         
458         // registers 1 data bindings
459         $registerDefaultBindings();
460         $completeSetup();
461         handler.afterInit(this);
462     }
463 
464     private void $registerDefaultBindings() {
465         // register 1 data bindings
466         registerDataBinding(new DefaultJAXXBinding(this, BINDING_REMOVE_PROGRAM_BUTTON_ENABLED, true, true) {
467         
468             @Override
469             public void applyDataBinding() {
470                 if (controlProgramTable != null) {
471                     controlProgramTable.addPropertyChangeListener("editable", this);
472                 }
473                 if (model != null) {
474                     model.addPropertyChangeListener("selectedRows", this);
475                 }
476             }
477         
478             @Override
479             public void processDataBinding() {
480                 if (controlProgramTable != null && model != null && model.getSelectedRows() != null) {
481                     removeProgramButton.setEnabled(controlProgramTable.isEditable() && !model.getSelectedRows().isEmpty());
482                 }
483             }
484         
485             @Override
486             public void removeDataBinding() {
487                 if (controlProgramTable != null) {
488                     controlProgramTable.removePropertyChangeListener("editable", this);
489                 }
490                 if (model != null) {
491                     model.removePropertyChangeListener("selectedRows", this);
492                 }
493             }
494         });
495     }
496 
497 }