View Javadoc
1   package fr.ifremer.dali.ui.swing.content.manage.filter.element;
2   
3   import fr.ifremer.dali.dto.configuration.filter.FilterDTO;
4   import fr.ifremer.dali.ui.swing.DaliHelpBroker;
5   import fr.ifremer.dali.ui.swing.DaliUIContext;
6   import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
7   import fr.ifremer.dali.ui.swing.util.DaliUI;
8   import fr.ifremer.quadrige3.ui.core.dto.QuadrigeBean;
9   import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
10  import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
11  import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedBeanDoubleList;
12  import fr.ifremer.quadrige3.ui.swing.plaf.WaitBlockingLayerUI;
13  import java.awt.BorderLayout;
14  import java.awt.Component;
15  import java.awt.Container;
16  import java.awt.GridLayout;
17  import java.awt.LayoutManager;
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  import java.util.TreeMap;
23  import javax.swing.Box;
24  import javax.swing.BoxLayout;
25  import javax.swing.JLabel;
26  import javax.swing.JPanel;
27  import javax.swing.SwingConstants;
28  import jaxx.runtime.JAXXBinding;
29  import jaxx.runtime.JAXXContext;
30  import jaxx.runtime.JAXXObject;
31  import jaxx.runtime.JAXXObjectDescriptor;
32  import jaxx.runtime.JAXXUtil;
33  import jaxx.runtime.SwingUtil;
34  import jaxx.runtime.binding.DefaultJAXXBinding;
35  import jaxx.runtime.context.DefaultJAXXContext;
36  import org.apache.commons.logging.Log;
37  import org.apache.commons.logging.LogFactory;
38  import static org.nuiton.i18n.I18n.t;
39  
40  public abstract class FilterElementUI<E extends QuadrigeBean> extends JPanel implements DaliUI<FilterElementUIModel, AbstractDaliUIHandler<FilterElementUIModel, ?>>, JAXXObject {
41  
42      /*-----------------------------------------------------------------------*/
43      /*------------------ Constants for all public bindings ------------------*/
44      /*-----------------------------------------------------------------------*/
45  
46      public static final String BINDING_LIST_BLOCK_LAYER_BLOCK = "listBlockLayer.block";
47  
48      /*-----------------------------------------------------------------------*/
49      /*------------------------- Other static fields -------------------------*/
50      /*-----------------------------------------------------------------------*/
51  
52      private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAALVWz28bRRSeuHESJ20aEjUtSSqFINFUSONDBZcgaH7YSooTqtgVFb4w9o7tacc705nZZk0UxAXO/Alw54LEjRPiwJkDF8S/gBAHrog3s5td21knkVJ8WO/OvO+bb9687+1+9yfKa4XeeEbCEKvAN6xL8aPNp08/ajyjTbNDdVMxaYRC0W8sh3J1NOMl49qgN+sVCy/G8OK26ErhU78PvVFB09r0ONUdSo1BdwcRTa2L1WR6I5SBOmVNRGWxfvP3X7mvvS++zSEUSlA3A1tZvQiV7mS8gnLMM2geVnpJipz4bZChmN8GvTfs2DYnWh+QLn2BPkeTFTQhiQIyg9Yuv2XH4fChNOhmi3FDVYnTLoQ/2TOo3FKYtRQ8K+wRznDAsD4CEbgpfANBuEt80qY4QmIaQXF5kEhKt8iEQfmu8Cg36MNXQ7xv2VL2iYYSz6ky6N5I+h142gXMlotMobOcabPFRfN5hfQsxbt9FC8C4inWpg9SHslJC39MWISBEQfr3+r8QDYfE9/ue96eXBhzPHKDNryQoBYHUPvUD5Kg2/ZyK4lcHoisQoaahgl/VPicJ4IGpxXY5i4lHlVJzNIIys2XhHFiMaRxVrsbtLiVBL6UoYh6SeDqYPRcFL2TyDJo+/ycN08rGTco8XEphELxqLcFDylLvCOFlgfMBjbGqY1Tn43VUV4FMGzQnfpZ5x/CVOT5O0Oet4Ru9t/Fhd9+/OOH8qnRr8PatzJD+/oUGFAqIaHQmF36ZuTywDBe3Cdyo44K2qXPNbGVDGHVeBrEwXqvWTi2cLxLdAco8pO///Tz4qe/XkO5MprmgnhlYuP3UMF0FGRBcC+UHzx0iq4fTcF1zmqzJhLKsw44ON5ydxGwh5uKEkNrzHDIuZtZN+trzl6xSwfOHxMpeQ8bG792//5JCElcyUhispNG4Zd/FqrfPzxN5Bhs7PWR4Wky85+gCeZz5lPXM+N2mNkjZ6SmgSfStpfVCBHUptMeNRtnKBn7+m13LZ7JW86gKW4LvSwgc/PHfXjovw1xYtC4oSHU+FujExYPOp4wsAs9cGmwd+8MqXKuukjVNYOmiesKe7atovEW871EyYpTAhMt1sYgIIhPjEd2nzFC8BqTNRe8NCLYMJkldcbNbgXGCP8ilf01t3vFmuurtrOiBjtyzba2S5zrQkco9hmkj/BNztp+171kbx9XbU/aFr42xDcab5cOaqXD9JyX+0WS01Y6+nDP673/n8qlfpU67tijRZ7T4S/SWIBajNB2W1aACuDvBnSiox3aFIoYa518i3AN44t2PFrgsZCBLPkW5iW4qbh99uA2/jiATlmwqEOq7XdcHLjQYe0OZKRjIuNE5RxPzgaa7gfcsGildPlx+4YxaPLYfa+cDLthJftwo4FM6w6/7C5hinzDflrADiIRmOkKtHE4zvXs8h76hLmM7TjpCfAomn3PI4asNqA9AP/7Z9jH7HX6QkY7/KW9fJXNsHhlhuUrM9wFhv8ACq8lCVoMAAA=";
53      private static final Log log = LogFactory.getLog(FilterElementUI.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 doubleListHeader;
74      protected ExtendedBeanDoubleList<E> filterDoubleList;
75      protected JLabel filterElementAvailableLabel;
76      protected JPanel filterElementMenuPanel;
77      protected JPanel filterElementPanel;
78      protected JLabel filterElementSelectedLabel;
79      protected JPanel filterElementSelectionPanel;
80      protected FilterElementUI<E> filterElementUI = this;
81      protected WaitBlockingLayerUI listBlockLayer;
82      protected FilterElementUIModel<E> model;
83  
84      /*-----------------------------------------------------------------------*/
85      /*---------------------------- Constructors  ----------------------------*/
86      /*-----------------------------------------------------------------------*/
87  
88      public FilterElementUI(ApplicationUI parentUI) {
89          ApplicationUIUtil.setParentUI(this, parentUI);
90              $initialize();
91      }
92  
93      public FilterElementUI() {
94          $initialize();
95      }
96  
97      public FilterElementUI(JAXXContext parentContext) {
98          JAXXUtil.initContext(this, parentContext);
99          $initialize();
100     }
101 
102     public FilterElementUI(boolean param0) {
103         super(param0);
104         $initialize();
105     }
106 
107     public FilterElementUI(JAXXContext parentContext, boolean param1) {
108         super(param1);
109         JAXXUtil.initContext(this, parentContext);
110         $initialize();
111     }
112 
113     public FilterElementUI(LayoutManager param0) {
114         super(param0);
115         $initialize();
116     }
117 
118     public FilterElementUI(JAXXContext parentContext, LayoutManager param1) {
119         super(param1);
120         JAXXUtil.initContext(this, parentContext);
121         $initialize();
122     }
123 
124     public FilterElementUI(LayoutManager param0, boolean param1) {
125         super(param0 ,param1);
126         $initialize();
127     }
128 
129     public FilterElementUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
130         super(param1 ,param2);
131         JAXXUtil.initContext(this, parentContext);
132         $initialize();
133     }
134 
135     /*-----------------------------------------------------------------------*/
136     /*--------------------------- Statics methods ---------------------------*/
137     /*-----------------------------------------------------------------------*/
138 
139     public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
140         return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
141     }
142 
143     /*-----------------------------------------------------------------------*/
144     /*---------------------- JAXXObject implementation ----------------------*/
145     /*-----------------------------------------------------------------------*/
146 
147     @Override
148     public void applyDataBinding(String $binding) {
149         if (allComponentsCreated && $bindings.containsKey($binding)) {
150             getDataBinding($binding).applyDataBinding();
151         }
152         processDataBinding($binding);
153     }
154 
155     @Override
156     public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
157         super.firePropertyChange(propertyName, oldValue, newValue);
158     }
159 
160     @Override
161     public Map<String, Object> get$objectMap() {
162         return $objectMap;
163     }
164 
165     @Override
166     public JAXXBinding getDataBinding(String bindingId) {
167         return $bindings.get(bindingId);
168     }
169 
170     @Override
171     public JAXXBinding[] getDataBindings() {
172         return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
173     }
174 
175     @Override
176     public Object getObjectById(String id) {
177         return $objectMap.get(id);
178     }
179 
180     @Override
181     public void processDataBinding(String $binding, boolean $force) {
182         if (!$force && $activeBindings.contains($binding)) { 
183             return;
184         }
185         $activeBindings.add($binding);
186         try {
187             if (allComponentsCreated && $bindings.containsKey($binding)) {
188                 getDataBinding($binding).processDataBinding();
189             }
190         } finally {
191             $activeBindings.remove($binding);
192         }
193     }
194 
195     @Override
196     public void processDataBinding(String $binding) {
197         processDataBinding($binding, false);
198     }
199 
200     @Override
201     public void registerDataBinding(JAXXBinding binding) {
202         $bindings.put(binding.getId(), binding);
203     }
204 
205     @Override
206     public void removeDataBinding(String $binding) {
207         if (allComponentsCreated && $bindings.containsKey($binding)) {
208             getDataBinding($binding).removeDataBinding();
209         }
210     }
211 
212     /*-----------------------------------------------------------------------*/
213     /*--------------------- JAXXContext implementation  ---------------------*/
214     /*-----------------------------------------------------------------------*/
215 
216     @Override
217     public <T> T getContextValue(Class<T> clazz) {
218         return delegateContext.getContextValue(clazz, null);
219     }
220 
221     @Override
222     public <T> T getContextValue(Class<T> clazz, String name) {
223         return delegateContext.getContextValue(clazz, name);
224     }
225 
226     @Override
227     public JAXXContext getDelegateContext() {
228         return delegateContext;
229     }
230 
231     @Override
232     public <O extends Container> O getParentContainer(Class<O> clazz) {
233         return SwingUtil.getParentContainer(this, clazz);
234     }
235 
236     @Override
237     public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
238         return SwingUtil.getParentContainer(source, clazz);
239     }
240 
241     @Override
242     public <T> void removeContextValue(Class<T> clazz) {
243         delegateContext.removeContextValue(clazz, null);
244     }
245 
246     @Override
247     public <T> void removeContextValue(Class<T> clazz, String name) {
248         delegateContext.removeContextValue(clazz, name);
249     }
250 
251     @Override
252     public <T> void setContextValue(T o) {
253         delegateContext.setContextValue(o, null);
254     }
255 
256     @Override
257     public <T> void setContextValue(T o, String name) {
258         delegateContext.setContextValue(o, name);
259     }
260 
261     /*-----------------------------------------------------------------------*/
262     /*----------------------- Public acessor methods  -----------------------*/
263     /*-----------------------------------------------------------------------*/
264 
265     public DaliHelpBroker getBroker() {
266         return broker;
267     }
268 
269     public JPanel getDoubleListHeader() {
270         return doubleListHeader;
271     }
272 
273     public ExtendedBeanDoubleList<E> getFilterDoubleList() {
274         return filterDoubleList;
275     }
276 
277     public JLabel getFilterElementAvailableLabel() {
278         return filterElementAvailableLabel;
279     }
280 
281     public JPanel getFilterElementMenuPanel() {
282         return filterElementMenuPanel;
283     }
284 
285     public JPanel getFilterElementPanel() {
286         return filterElementPanel;
287     }
288 
289     public JLabel getFilterElementSelectedLabel() {
290         return filterElementSelectedLabel;
291     }
292 
293     public JPanel getFilterElementSelectionPanel() {
294         return filterElementSelectionPanel;
295     }
296 
297     public WaitBlockingLayerUI getListBlockLayer() {
298         return listBlockLayer;
299     }
300 
301     public FilterElementUIModel<E> getModel() {
302         return model;
303     }
304 
305     /*-----------------------------------------------------------------------*/
306     /*--------------------- Components creation methods ---------------------*/
307     /*-----------------------------------------------------------------------*/
308 
309     protected void addChildrenToDoubleListHeader() {
310         if (!allComponentsCreated) {
311             return;
312         }
313         doubleListHeader.add(filterElementAvailableLabel);
314         doubleListHeader.add(filterElementSelectedLabel);
315     }
316 
317     protected void addChildrenToFilterElementPanel() {
318         if (!allComponentsCreated) {
319             return;
320         }
321         filterElementPanel.add(filterElementMenuPanel, BorderLayout.WEST);
322         filterElementPanel.add(filterElementSelectionPanel, BorderLayout.CENTER);
323     }
324 
325     protected void addChildrenToFilterElementSelectionPanel() {
326         if (!allComponentsCreated) {
327             return;
328         }
329         filterElementSelectionPanel.add(doubleListHeader, BorderLayout.PAGE_START);
330         filterElementSelectionPanel.add(filterDoubleList, BorderLayout.CENTER);
331     }
332 
333     protected void addChildrenToFilterElementUI() {
334         if (!allComponentsCreated) {
335             return;
336         }
337         add(SwingUtil.boxComponentWithJxLayer(filterElementPanel));
338     }
339 
340     protected void createBroker() {
341         $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
342     }
343 
344     protected void createDoubleListHeader() {
345         $objectMap.put("doubleListHeader", doubleListHeader = new JPanel());
346         
347         doubleListHeader.setName("doubleListHeader");
348         doubleListHeader.setLayout(new GridLayout(1,2));
349     }
350 
351     protected void createFilterDoubleList() {
352         $objectMap.put("filterDoubleList", filterDoubleList = new ExtendedBeanDoubleList<E>());
353         
354         filterDoubleList.setName("filterDoubleList");
355         filterDoubleList.setFilterable(true);
356         filterDoubleList.setShowDecorator(false);
357         filterDoubleList.setShowSelectPopupEnabled(true);
358         filterDoubleList.setProperty("elements");
359         filterDoubleList.setShowReset(true);
360         filterDoubleList.setHighlightFilterText(true);
361         filterDoubleList.setUseMultiSelect(false);
362         filterDoubleList.setToolTipText(t("dali.filter.available.filter"));
363     }
364 
365     protected void createFilterElementAvailableLabel() {
366         $objectMap.put("filterElementAvailableLabel", filterElementAvailableLabel = new JLabel());
367         
368         filterElementAvailableLabel.setName("filterElementAvailableLabel");
369         filterElementAvailableLabel.setText(t("dali.filter.available.label"));
370     }
371 
372     protected void createFilterElementMenuPanel() {
373         $objectMap.put("filterElementMenuPanel", filterElementMenuPanel = new JPanel());
374         
375         filterElementMenuPanel.setName("filterElementMenuPanel");
376     }
377 
378     protected void createFilterElementPanel() {
379         $objectMap.put("filterElementPanel", filterElementPanel = new JPanel());
380         
381         filterElementPanel.setName("filterElementPanel");
382         filterElementPanel.setLayout(new BorderLayout());
383     }
384 
385     protected void createFilterElementSelectedLabel() {
386         $objectMap.put("filterElementSelectedLabel", filterElementSelectedLabel = new JLabel());
387         
388         filterElementSelectedLabel.setName("filterElementSelectedLabel");
389         filterElementSelectedLabel.setText(t("dali.filter.selected.label"));
390     }
391 
392     protected void createFilterElementSelectionPanel() {
393         $objectMap.put("filterElementSelectionPanel", filterElementSelectionPanel = new JPanel());
394         
395         filterElementSelectionPanel.setName("filterElementSelectionPanel");
396         filterElementSelectionPanel.setLayout(new BorderLayout());
397     }
398 
399     protected void createListBlockLayer() {
400         $objectMap.put("listBlockLayer", listBlockLayer = new WaitBlockingLayerUI());
401     }
402 
403     protected void createModel() {
404         $objectMap.put("model", model = null);
405     }
406 
407     /*-----------------------------------------------------------------------*/
408     /*------------------------ Internal jaxx methods ------------------------*/
409     /*-----------------------------------------------------------------------*/
410 
411     private void $completeSetup() {
412         allComponentsCreated = true;
413         if (log.isDebugEnabled()) {
414             log.debug(this);
415         }
416         addChildrenToFilterElementUI();
417         addChildrenToFilterElementPanel();
418         addChildrenToFilterElementSelectionPanel();
419         addChildrenToDoubleListHeader();
420         
421         // apply 1 data bindings
422         JAXXUtil.applyDataBinding(this, $bindings.keySet());
423         
424         // apply 7 property setters
425         filterElementAvailableLabel.setHorizontalAlignment(SwingConstants.CENTER);
426         filterElementSelectedLabel.setHorizontalAlignment(SwingConstants.CENTER);
427         filterDoubleList.setBean(model);
428     }
429 
430     private void $initialize() {
431         if (allComponentsCreated) {
432             return;
433         }
434         if (log.isDebugEnabled()) {
435             log.debug(this);
436         }
437         $objectMap.put("filterElementUI", filterElementUI);
438         createModel();
439         createBroker();
440         createListBlockLayer();
441         createFilterElementPanel();
442         createFilterElementMenuPanel();
443         createFilterElementSelectionPanel();
444         createDoubleListHeader();
445         createFilterElementAvailableLabel();
446         createFilterElementSelectedLabel();
447         createFilterDoubleList();
448         // inline creation of filterElementUI
449         setName("filterElementUI");
450         setLayout(new BorderLayout());
451         
452         // registers 1 data bindings
453         $registerDefaultBindings();
454         $completeSetup();
455     }
456 
457     private void $registerDefaultBindings() {
458         // register 1 data bindings
459         registerDataBinding(new DefaultJAXXBinding(this, BINDING_LIST_BLOCK_LAYER_BLOCK, true) {
460         
461             @Override
462             public void applyDataBinding() {
463                 if (model != null) {
464                     model.addPropertyChangeListener("loading", this);
465                 }
466             }
467         
468             @Override
469             public void processDataBinding() {
470                 if (model != null) {
471                     listBlockLayer.setBlock(model.isLoading());
472                 }
473             }
474         
475             @Override
476             public void removeDataBinding() {
477                 if (model != null) {
478                     model.removePropertyChangeListener("loading", this);
479                 }
480             }
481         });
482     }
483 
484 }