View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.campaign.table;
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 CampaignsTableUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<CampaignsTableUIModel, CampaignsTableUIHandler>, JAXXObject {
40  
41      /*-----------------------------------------------------------------------*/
42      /*------------------ Constants for all public bindings ------------------*/
43      /*-----------------------------------------------------------------------*/
44  
45      public static final String BINDING_DELETE_CAMPAIGN_BUTTON_ENABLED = "deleteCampaignButton.enabled";
46      public static final String BINDING_NEW_CAMPAIGN_BUTTON_ENABLED = "newCampaignButton.enabled";
47  
48      /*-----------------------------------------------------------------------*/
49      /*------------------------- Other static fields -------------------------*/
50      /*-----------------------------------------------------------------------*/
51  
52      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1VTW8cRRAtb7zreJ0PYpPEIYHYJkrWQuoN4ugAie2YONoA8jqSxSJB70xn3WGmu9PTG49lBfET+Alw54LEjRPiwJkDF8RfQIgDV0R193pmx55kVyI+tKa7ql69eq6q/e5PqCYaFh/TNCW6LwyPGbl/Z2fno+5jFph1lgSaKyM1+L+JClQ6MBNm74mBNzstG94chDfXZKykYGIoeqUF9cTsRyzZZcwYeL0YESRJs52ZV1LV14eoGaky1G/+/qvydfjVtxWAVCG7aSxlYVRUXslkCyo8NDCLmZ7SZkRFD2loLnrI97R9W4toknxIY/YEvoSpFtQU1QhmYGn8kh2Gi0+Vgbqh3Yh9TAWLDHzwSBP+SLOYaRLSiJM+J8ke5ieBFAbhSEwF7TES0FhR3hPERZO1wTXZtteHm0q5BDUD1ViGFrn1kpAfWLgcvtbV8gumDdx4Lv463u5hzKrzzENPX7vfDrSMIlv7TQMXrb7pIGjIZN2ns6gzQYGQATKU+Emfhpr32Dt5dl9F2367AAszm6Gd6vaNkSIZyD9boOAei9lPXvOvN+39NXvMZ7Zzgu0dqrXqYA3MFQD9q3W/nEW9inIyw4qB1nZ14KfhcqGBcTRIPhp57050oKr7+GxgvnN8mrbQ5Odo/sgcWUBn/ffC3G8//vHDxvDwnC91HZp9bGqlpcIW4Db1WT85fcOj5gOqVjqIggUGfjFcKSHWHpiRHOY7Z8OJDSf3aLKLENWp33/6+cLnv56AygbUI0nDDWr9N2Ha7GpUQUZhqt6/7Rid2juJ5yuWm+1NqUPbm7cOVt2XD9wngWbUsG1uIhZ6S8M0llzX5t1vrUvLy89SlOxKiWQZ7+70L//Mtb+/fSjbBJZx6bnuuXTVT6DGRcQFc1tnsFBKt8yMSlg/lPniKFslUNglajBoN9z51jF9JtEb5eBSbNoFACdoiItv0rAUl9lZr4WMYykItrWBGSNltM3VtrOfL2qFHqgX7rIpJiwBBLp44PYO4UmbPmV3/XPDqmnpNJ1M9uttKBucUeSrOKqfUaUiHlBbwh1XCPbXwXphmvw7CaxKz44UXPODl9U8O1zzoa1Y9nyxbO90tPJ3DxZ96T1m/D+dhVtyL2ksoxh3Y2X2G8sL168vjK9P6YoYJZHt/4juS3SGM7dCauhCl4sQ99B7x3JM2LM+EtE+b9mjXY5waQxOdVSwJ2L8vdl5AdIbY3H59AUIi2NwmeSBX7X/iwUbweI/RUhuElEJAAA=";
53      private static final Log log = LogFactory.getLog(CampaignsTableUI.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 DaliHelpBroker broker;
73      protected JPanel buttonsPanel;
74      protected SwingTable campaignsTable;
75      protected JButton deleteCampaignButton;
76      protected final CampaignsTableUIHandler handler = createHandler();
77      protected CampaignsTableUIModel model;
78      protected JButton newCampaignButton;
79      protected CampaignsTableUI tablePanel = this;
80  
81      /*-----------------------------------------------------------------------*/
82      /*------------------------- Private components  -------------------------*/
83      /*-----------------------------------------------------------------------*/
84  
85      private JPanel $JPanel0;
86      private JScrollPane $JScrollPane0;
87  
88      /*-----------------------------------------------------------------------*/
89      /*---------------------------- Constructors  ----------------------------*/
90      /*-----------------------------------------------------------------------*/
91  
92      public CampaignsTableUI(ApplicationUI parentUI) {
93          ApplicationUIUtil.setParentUI(this, parentUI);
94              $initialize();
95      }
96  
97      public CampaignsTableUI() {
98          $initialize();
99      }
100 
101     public CampaignsTableUI(JAXXContext parentContext) {
102         JAXXUtil.initContext(this, parentContext);
103         $initialize();
104     }
105 
106     public CampaignsTableUI(boolean param0) {
107         super(param0);
108         $initialize();
109     }
110 
111     public CampaignsTableUI(JAXXContext parentContext, boolean param1) {
112         super(param1);
113         JAXXUtil.initContext(this, parentContext);
114         $initialize();
115     }
116 
117     public CampaignsTableUI(LayoutManager param0) {
118         super(param0);
119         $initialize();
120     }
121 
122     public CampaignsTableUI(JAXXContext parentContext, LayoutManager param1) {
123         super(param1);
124         JAXXUtil.initContext(this, parentContext);
125         $initialize();
126     }
127 
128     public CampaignsTableUI(LayoutManager param0, boolean param1) {
129         super(param0 ,param1);
130         $initialize();
131     }
132 
133     public CampaignsTableUI(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__newCampaignButton(ActionEvent event) {
270         if (log.isDebugEnabled()) {
271             log.debug(event);
272         }
273         model.addNewRow();
274     }
275 
276     /*-----------------------------------------------------------------------*/
277     /*----------------------- Public acessor methods  -----------------------*/
278     /*-----------------------------------------------------------------------*/
279 
280     public DaliHelpBroker getBroker() {
281         return broker;
282     }
283 
284     public JPanel getButtonsPanel() {
285         return buttonsPanel;
286     }
287 
288     public SwingTable getCampaignsTable() {
289         return campaignsTable;
290     }
291 
292     public JButton getDeleteCampaignButton() {
293         return deleteCampaignButton;
294     }
295 
296     public CampaignsTableUIHandler getHandler() {
297         return handler;
298     }
299 
300     public CampaignsTableUIModel getModel() {
301         return model;
302     }
303 
304     public JButton getNewCampaignButton() {
305         return newCampaignButton;
306     }
307 
308     /*-----------------------------------------------------------------------*/
309     /*---------------------------- Other methods ----------------------------*/
310     /*-----------------------------------------------------------------------*/
311 
312     @Override
313     public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
314         broker.installUI(component, helpId);
315     }
316 
317     @Override
318     public void showHelp(String helpId) {
319         getBroker().showHelp(this, helpId);
320     }
321 
322     /*-----------------------------------------------------------------------*/
323     /*--------------------- Protected acessors methods  ---------------------*/
324     /*-----------------------------------------------------------------------*/
325 
326     protected JPanel get$JPanel0() {
327         return $JPanel0;
328     }
329 
330     protected JScrollPane get$JScrollPane0() {
331         return $JScrollPane0;
332     }
333 
334     /*-----------------------------------------------------------------------*/
335     /*--------------------- Components creation methods ---------------------*/
336     /*-----------------------------------------------------------------------*/
337 
338     protected void addChildrenToButtonsPanel() {
339         if (!allComponentsCreated) {
340             return;
341         }
342         buttonsPanel.add($JPanel0, BorderLayout.LINE_START);
343     }
344 
345     protected void addChildrenToTablePanel() {
346         if (!allComponentsCreated) {
347             return;
348         }
349         add($JScrollPane0);
350         add(buttonsPanel, BorderLayout.PAGE_END);
351     }
352 
353     protected void createBroker() {
354         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
355     }
356 
357     protected void createButtonsPanel() {
358         $objectMap.put("buttonsPanel", buttonsPanel = new JPanel());
359         
360         buttonsPanel.setName("buttonsPanel");
361         buttonsPanel.setLayout(new BorderLayout());
362     }
363 
364     protected void createCampaignsTable() {
365         $objectMap.put("campaignsTable", campaignsTable = new SwingTable());
366         
367         campaignsTable.setName("campaignsTable");
368     }
369 
370     protected void createDeleteCampaignButton() {
371         $objectMap.put("deleteCampaignButton", deleteCampaignButton = new JButton());
372         
373         deleteCampaignButton.setName("deleteCampaignButton");
374         deleteCampaignButton.setText(t("dali.common.delete"));
375         deleteCampaignButton.setToolTipText(t("dali.campaign.delete.tip"));
376         deleteCampaignButton.putClientProperty("applicationAction", DeleteCampaignAction.class);
377     }
378 
379     protected CampaignsTableUIHandler createHandler() {
380         return new CampaignsTableUIHandler();
381     }
382 
383     protected void createModel() {
384         $objectMap.put("model", model = getContextValue(CampaignsTableUIModel.class));
385     }
386 
387     protected void createNewCampaignButton() {
388         $objectMap.put("newCampaignButton", newCampaignButton = new JButton());
389         
390         newCampaignButton.setName("newCampaignButton");
391         newCampaignButton.setText(t("dali.common.new"));
392         newCampaignButton.setToolTipText(t("dali.campaign.new.tip"));
393         newCampaignButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__newCampaignButton"));
394     }
395 
396     /*-----------------------------------------------------------------------*/
397     /*------------------------ Internal jaxx methods ------------------------*/
398     /*-----------------------------------------------------------------------*/
399 
400     private void $completeSetup() {
401         allComponentsCreated = true;
402         if (log.isDebugEnabled()) {
403             log.debug(this);
404         }
405         addChildrenToTablePanel();
406         // inline complete setup of $JScrollPane0
407         $JScrollPane0.getViewport().add(campaignsTable);
408         addChildrenToButtonsPanel();
409         // inline complete setup of $JPanel0
410         $JPanel0.add(newCampaignButton);
411         $JPanel0.add(deleteCampaignButton);
412         
413         // apply 2 data bindings
414         JAXXUtil.applyDataBinding(this, $bindings.keySet());
415         
416         // apply 7 property setters
417         newCampaignButton.setAlignmentX(Component.CENTER_ALIGNMENT);
418         deleteCampaignButton.setAlignmentX(Component.CENTER_ALIGNMENT);
419         setBorder(BorderFactory.createTitledBorder(t("dali.campaign.title")));
420         newCampaignButton.setIcon(SwingUtil.createActionIcon("add"));
421         deleteCampaignButton.setIcon(SwingUtil.createActionIcon("delete"));
422     }
423 
424     private void $initialize() {
425         if (allComponentsCreated) {
426             return;
427         }
428         if (log.isDebugEnabled()) {
429             log.debug(this);
430         }
431         handler.beforeInit(this);
432         $objectMap.put("tablePanel", tablePanel);
433         createModel();
434         createBroker();
435         // inline creation of $JScrollPane0
436         $objectMap.put("$JScrollPane0", $JScrollPane0 = new JScrollPane());
437         
438         $JScrollPane0.setName("$JScrollPane0");
439         createCampaignsTable();
440         createButtonsPanel();
441         // inline creation of $JPanel0
442         $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
443         
444         $JPanel0.setName("$JPanel0");
445         createNewCampaignButton();
446         createDeleteCampaignButton();
447         // inline creation of tablePanel
448         setName("tablePanel");
449         setLayout(new BorderLayout());
450         
451         // registers 2 data bindings
452         $registerDefaultBindings();
453         $completeSetup();
454         handler.afterInit(this);
455     }
456 
457     private void $registerDefaultBindings() {
458         // register 2 data bindings
459         registerDataBinding(new DefaultJAXXBinding(this, BINDING_NEW_CAMPAIGN_BUTTON_ENABLED, true) {
460         
461             @Override
462             public void applyDataBinding() {
463                 if (model != null) {
464                     model.addPropertyChangeListener("saveEnabled", this);
465                 }
466             }
467         
468             @Override
469             public void processDataBinding() {
470                 if (model != null) {
471                     newCampaignButton.setEnabled(model.isSaveEnabled());
472                 }
473             }
474         
475             @Override
476             public void removeDataBinding() {
477                 if (model != null) {
478                     model.removePropertyChangeListener("saveEnabled", this);
479                 }
480             }
481         });
482         registerDataBinding(new DefaultJAXXBinding(this, BINDING_DELETE_CAMPAIGN_BUTTON_ENABLED, true, true) {
483         
484             @Override
485             public void applyDataBinding() {
486                 if (model != null) {
487                     model.addPropertyChangeListener("selectedRows", this);
488                 }
489                 if (model != null) {
490                     model.addPropertyChangeListener("saveEnabled", this);
491                 }
492             }
493         
494             @Override
495             public void processDataBinding() {
496                 if (model != null && model.getSelectedRows() != null) {
497                     deleteCampaignButton.setEnabled(!model.getSelectedRows().isEmpty() && model.isSaveEnabled());
498                 }
499             }
500         
501             @Override
502             public void removeDataBinding() {
503                 if (model != null) {
504                     model.removePropertyChangeListener("selectedRows", this);
505                 }
506                 if (model != null) {
507                     model.removePropertyChangeListener("saveEnabled", this);
508                 }
509             }
510         });
511     }
512 
513 }