View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.rule.department;
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 ControlDepartmentTableUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ControlDepartmentTableUIModel, ControlDepartmentTableUIHandler>, JAXXObject {
40  
41      /*-----------------------------------------------------------------------*/
42      /*------------------ Constants for all public bindings ------------------*/
43      /*-----------------------------------------------------------------------*/
44  
45      public static final String BINDING_REMOVE_DEPARTMENT_BUTTON_ENABLED = "removeDepartmentButton.enabled";
46  
47      /*-----------------------------------------------------------------------*/
48      /*------------------------- Other static fields -------------------------*/
49      /*-----------------------------------------------------------------------*/
50  
51      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1UQW8bRRR+dmKncYCWRISUpjQJqHWENKbqMQhKEqImuCXUqRTVBxjvTJ0puzvb2XGyUVTET+AnwJ0LEjdOiANnDlwQfwEhDlwR7806u3ayiSNRSx7tznvf97739r333Z9QiQ0sPuVJwkwvtCqQbOvD3d1POk+lZ9dl7BkVWW0g/ZXKUG7DlMjuYwtvtZsEb/ThjTUdRDqU4QB6pQm12B76Mt6T0lq4Pozw4rjRyswrSdQzx6yZqCLWb/7+q/y1+OrbMkASobpJTGVhFCrPZLwJZSUsTGOkfd7wedhFGUaFXdT7Mt2t+TyOH/BAPoMvYaIJ1YgbJLOwdPGUHYfDJ5GFOU+H1mh/XSKVDRCywzu+fLRpYfuJYeqJkYE0THBfsZ5i8QGqYYRBTxbwkHclJudLJjICTLKYMopc3KqFSqCF9C08etEh7hNvHqfaMfoLaSzcOjPQOr7dQ8yq88yh188qzDYPSfrr9D2SPslWy0NXn0wEn8xYZotZLLABQc96XBjVlXdyVZa8WIueHYDopjPWS29vORXvYq8MyXC3wwqOfW/T+xt0zGW2GS5Ermy1Zy2qhZkhyvSWANfyrFC33pcnoWS90fc0cG2o8XGkWD5Sec+X2lChj4tzO9c+PYUP0ZTO39yJ+SNCZ/13dua3H//4YWNw6F4rdB3YGTgMkdERtoai0JfTietZ5Tfu82iljSzSx4XjFsp8gbBW34ziMN6rBGcEZ/d4vIcUlYnff/p59vNfx6C8ATVfc7HByX8TJu2ewSpoXyTRB3edopcOLuF5Bf9l6lltBPXs2tGqe0qBh8wzklu5o6wvRWqp2/qS6+aT42HJaWl5+Tmm9tk+egiOFE3eoc5dPBoBe55gvecL6p0l3Zn85Z+Z1vd3j2tewhpcPdM9r3vlMVRV6KtQulXX32KFq20qimVP6HxbFe0vOGeBRf1ZvuXOd06VesxCDSurdLhJFDCGw2Bh3MoE9+llVx9PB4EOmTNMWa39HRXtOPt8Yf3QEWsYJT2KeNvVhZ7uQPGojVI4fkJhFXebtDITOT0o8tg2rPNGoc7Ul6RamJAh1Qsz/PiouJRMxR8J5TZSfXnh5s2FRbe9WVfa9AtL8VAfxPVlcgwie1inDjpdgjO2xqgqlDBxnx9qdIZX3sNG5gsdFQpcTu+filKiszaSka636fi0mOHqBTTVsLDdkNLYPYfpzQtpeXwOw+IFtIwrL92+/0uFN0LFf3SV0nacCQAA";
52      private static final Log log = LogFactory.getLog(ControlDepartmentTableUI.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 addDepartmentButton;
72      protected DaliHelpBroker broker;
73      protected SwingTable controlDepartmentTable;
74      protected ControlDepartmentTableUI controlDepartmentTableUI = this;
75      protected JScrollPane controlDepartmentTableUIPanel;
76      protected final ControlDepartmentTableUIHandler handler = createHandler();
77      protected ControlDepartmentTableUIModel model;
78      protected JButton removeDepartmentButton;
79  
80      /*-----------------------------------------------------------------------*/
81      /*------------------------- Private components  -------------------------*/
82      /*-----------------------------------------------------------------------*/
83  
84      private JPanel $JPanel0;
85      private JPanel $JPanel1;
86  
87      /*-----------------------------------------------------------------------*/
88      /*---------------------------- Constructors  ----------------------------*/
89      /*-----------------------------------------------------------------------*/
90  
91      public ControlDepartmentTableUI(ApplicationUI parentUI) {
92          ApplicationUIUtil.setParentUI(this, parentUI);
93              $initialize();
94      }
95  
96      public ControlDepartmentTableUI() {
97          $initialize();
98      }
99  
100     public ControlDepartmentTableUI(JAXXContext parentContext) {
101         JAXXUtil.initContext(this, parentContext);
102         $initialize();
103     }
104 
105     public ControlDepartmentTableUI(boolean param0) {
106         super(param0);
107         $initialize();
108     }
109 
110     public ControlDepartmentTableUI(JAXXContext parentContext, boolean param1) {
111         super(param1);
112         JAXXUtil.initContext(this, parentContext);
113         $initialize();
114     }
115 
116     public ControlDepartmentTableUI(LayoutManager param0) {
117         super(param0);
118         $initialize();
119     }
120 
121     public ControlDepartmentTableUI(JAXXContext parentContext, LayoutManager param1) {
122         super(param1);
123         JAXXUtil.initContext(this, parentContext);
124         $initialize();
125     }
126 
127     public ControlDepartmentTableUI(LayoutManager param0, boolean param1) {
128         super(param0 ,param1);
129         $initialize();
130     }
131 
132     public ControlDepartmentTableUI(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__addDepartmentButton(ActionEvent event) {
269         if (log.isDebugEnabled()) {
270             log.debug(event);
271         }
272         handler.openAddDialog();
273     }
274 
275     public void doActionPerformed__on__removeDepartmentButton(ActionEvent event) {
276         if (log.isDebugEnabled()) {
277             log.debug(event);
278         }
279         handler.removeDepartments();
280     }
281 
282     /*-----------------------------------------------------------------------*/
283     /*----------------------- Public acessor methods  -----------------------*/
284     /*-----------------------------------------------------------------------*/
285 
286     public JButton getAddDepartmentButton() {
287         return addDepartmentButton;
288     }
289 
290     public DaliHelpBroker getBroker() {
291         return broker;
292     }
293 
294     public SwingTable getControlDepartmentTable() {
295         return controlDepartmentTable;
296     }
297 
298     public JScrollPane getControlDepartmentTableUIPanel() {
299         return controlDepartmentTableUIPanel;
300     }
301 
302     public ControlDepartmentTableUIHandler getHandler() {
303         return handler;
304     }
305 
306     public ControlDepartmentTableUIModel getModel() {
307         return model;
308     }
309 
310     public JButton getRemoveDepartmentButton() {
311         return removeDepartmentButton;
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 addChildrenToControlDepartmentTableUI() {
345         if (!allComponentsCreated) {
346             return;
347         }
348         add(controlDepartmentTableUIPanel);
349         add($JPanel0, BorderLayout.PAGE_END);
350     }
351 
352     protected void addChildrenToControlDepartmentTableUIPanel() {
353         if (!allComponentsCreated) {
354             return;
355         }
356         controlDepartmentTableUIPanel.getViewport().add(controlDepartmentTable);
357     }
358 
359     protected void createAddDepartmentButton() {
360         $objectMap.put("addDepartmentButton", addDepartmentButton = new JButton());
361         
362         addDepartmentButton.setName("addDepartmentButton");
363         addDepartmentButton.setText(t("dali.common.add"));
364         addDepartmentButton.setToolTipText(t("dali.rule.department.add.tip"));
365         addDepartmentButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__addDepartmentButton"));
366     }
367 
368     protected void createBroker() {
369         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
370     }
371 
372     protected void createControlDepartmentTable() {
373         $objectMap.put("controlDepartmentTable", controlDepartmentTable = new SwingTable());
374         
375         controlDepartmentTable.setName("controlDepartmentTable");
376     }
377 
378     protected void createControlDepartmentTableUIPanel() {
379         $objectMap.put("controlDepartmentTableUIPanel", controlDepartmentTableUIPanel = new JScrollPane());
380         
381         controlDepartmentTableUIPanel.setName("controlDepartmentTableUIPanel");
382     }
383 
384     protected ControlDepartmentTableUIHandler createHandler() {
385         return new ControlDepartmentTableUIHandler();
386     }
387 
388     protected void createModel() {
389         $objectMap.put("model", model = getContextValue(ControlDepartmentTableUIModel.class));
390     }
391 
392     protected void createRemoveDepartmentButton() {
393         $objectMap.put("removeDepartmentButton", removeDepartmentButton = new JButton());
394         
395         removeDepartmentButton.setName("removeDepartmentButton");
396         removeDepartmentButton.setText(t("dali.common.delete"));
397         removeDepartmentButton.setToolTipText(t("dali.rule.department.delete.tip"));
398         removeDepartmentButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__removeDepartmentButton"));
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         addChildrenToControlDepartmentTableUI();
411         addChildrenToControlDepartmentTableUIPanel();
412         // inline complete setup of $JPanel0
413         $JPanel0.add($JPanel1, BorderLayout.LINE_START);
414         // inline complete setup of $JPanel1
415         $JPanel1.add(addDepartmentButton);
416         $JPanel1.add(removeDepartmentButton);
417         
418         // apply 1 data bindings
419         JAXXUtil.applyDataBinding(this, $bindings.keySet());
420         
421         // apply 7 property setters
422         addDepartmentButton.setAlignmentX(Component.CENTER_ALIGNMENT);
423         removeDepartmentButton.setAlignmentX(Component.CENTER_ALIGNMENT);
424         setBorder(BorderFactory.createTitledBorder(t("dali.rule.department.title")));
425         addDepartmentButton.setIcon(SwingUtil.createActionIcon("add"));
426         removeDepartmentButton.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("controlDepartmentTableUI", controlDepartmentTableUI);
438         createModel();
439         createBroker();
440         createControlDepartmentTableUIPanel();
441         createControlDepartmentTable();
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         createAddDepartmentButton();
452         createRemoveDepartmentButton();
453         // inline creation of controlDepartmentTableUI
454         setName("controlDepartmentTableUI");
455         setLayout(new BorderLayout());
456         controlDepartmentTableUI.putClientProperty("validatorLabel", t("dali.rule.department.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_DEPARTMENT_BUTTON_ENABLED, true, true) {
467         
468             @Override
469             public void applyDataBinding() {
470                 if (controlDepartmentTable != null) {
471                     controlDepartmentTable.addPropertyChangeListener("editable", this);
472                 }
473                 if (model != null) {
474                     model.addPropertyChangeListener("selectedRows", this);
475                 }
476             }
477         
478             @Override
479             public void processDataBinding() {
480                 if (model != null && model.getSelectedRows() != null && controlDepartmentTable != null) {
481                     removeDepartmentButton.setEnabled(controlDepartmentTable.isEditable() && !model.getSelectedRows().isEmpty());
482                 }
483             }
484         
485             @Override
486             public void removeDataBinding() {
487                 if (controlDepartmentTable != null) {
488                     controlDepartmentTable.removePropertyChangeListener("editable", this);
489                 }
490                 if (model != null) {
491                     model.removePropertyChangeListener("selectedRows", this);
492                 }
493             }
494         });
495     }
496 
497 }