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
44
45
46 public static final String BINDING_LIST_BLOCK_LAYER_BLOCK = "listBlockLayer.block";
47
48
49
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
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
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
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
137
138
139 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
140 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
141 }
142
143
144
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
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
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
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
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
422 JAXXUtil.applyDataBinding(this, $bindings.keySet());
423
424
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
449 setName("filterElementUI");
450 setLayout(new BorderLayout());
451
452
453 $registerDefaultBindings();
454 $completeSetup();
455 }
456
457 private void $registerDefaultBindings() {
458
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 }