1 package fr.ifremer.dali.ui.swing.content.manage.filter.element.menu;
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.content.manage.filter.element.AbstractFilterElementUIHandler;
7 import fr.ifremer.dali.ui.swing.content.manage.filter.element.FilterElementUIModel;
8 import fr.ifremer.dali.ui.swing.util.AbstractDaliUIHandler;
9 import fr.ifremer.dali.ui.swing.util.DaliUI;
10 import fr.ifremer.quadrige3.ui.core.dto.QuadrigeBean;
11 import fr.ifremer.quadrige3.ui.swing.ApplicationUI;
12 import fr.ifremer.quadrige3.ui.swing.ApplicationUIUtil;
13 import fr.ifremer.quadrige3.ui.swing.component.bean.ExtendedComboBox;
14 import java.awt.BorderLayout;
15 import java.awt.Component;
16 import java.awt.Container;
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.BorderFactory;
24 import javax.swing.Box;
25 import javax.swing.BoxLayout;
26 import javax.swing.JButton;
27 import javax.swing.JLabel;
28 import javax.swing.JPanel;
29 import javax.swing.SwingConstants;
30 import jaxx.runtime.JAXXBinding;
31 import jaxx.runtime.JAXXContext;
32 import jaxx.runtime.JAXXObject;
33 import jaxx.runtime.JAXXObjectDescriptor;
34 import jaxx.runtime.JAXXUtil;
35 import jaxx.runtime.SwingUtil;
36 import jaxx.runtime.binding.DefaultJAXXBinding;
37 import jaxx.runtime.context.DefaultJAXXContext;
38 import org.apache.commons.logging.Log;
39 import org.apache.commons.logging.LogFactory;
40 import static org.nuiton.i18n.I18n.t;
41
42 public class ApplyFilterUI extends JPanel implements DaliUI<ApplyFilterUIModel, ApplyFilterUIHandler>, JAXXObject {
43
44
45
46
47
48 public static final String BINDING_APPLY_FILTER_COMBO_SELECTED_ITEM = "applyFilterCombo.selectedItem";
49
50
51
52
53
54 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1UTW8jRRAtGzuxnQ2EREQbCFIICJJLG4lj+Nhks9Z65Q3SJkgrjATtmbbTS3u6t6eGjBUt4ifwE+DOBYkbJ8SBMwcuiL+AEAeuiOqeie0kYzkHLHnGrq569ar6VX33J1RjC6894WnKbBKhHAr2YP/x4w97T0SAhyIOrDSoLWSfUhnKXVgKx/YY4fVux4U38/DmXT00OhLRVPReBxoxjpSIT4VAhFcvRwRx3DweH++lJrEXqGNSRajf/P1X+evwq2/LAKkhdgtUyta8qEkllQ6UZYiwSpm+4E3FowHRsDIaEN9lZ7ureBwf8aF4Cl/CYgcWDLcEhrB985I9ho9PDcIyN0aNWlKhsB+1Edp9y2TfiqGwLORKskSy+IwosEBHSIhsyCM+EKzvQ5hQ5OqsIkrY/jSWMT7LAkJ1qEOhEI7+N+yHDnCSYKFn9efCIrw1M8Mh/btPMQfecxK6MlV/h/cczVXX6TSPe+CNzrleGEOd7mmE96YSP014aOVAvDNdX34frCd4xO6lVG0oQh98oNPL8Ese/iBBpK7A2iU2mTX3t/DKJXGRbNlEthNdlbpQtQmZEW53ryv9ER1lGr99ReMO0J/+u772249//NC6EHaNcr9U6Do1lyQ4Y7Whe5Eu9QuZqhOUqvmQm70u1GO64SAb2s0CYsf5MZGjfC+6cObC2X0enxJEdfH3n35e/+zX56DcgobSPGxx59+GOp5a6oJWYWo+uOMZ3Tqr0XOFvhWERqYw3lPUpwrahF7L5H92KAJtOWGQavtcxWSvO/sjEbs9kbtW3C0iLJ57YT9LqXWbBa0b8+/Vf/ln7fj7OxftK1E5GzPdJy2sfgwLMlIyEn4z5ENfuAmWTCySUE+Gu2jcgQZ+5ar48lnY8s83rnWr5MZL29CN19H5gf+VtXnEAis4ihOJSoTZyQ7ubPvBy0c4e93LB9kLm6Hz397dpb65lMw3xP16G67uIzOHXBmhptyAttyNrZ5fHcxn7spESjf35mxWudHjFFG6tiJuwOpWJm0RtlEMaYgzpbCBwAxnZ5eo1fLxGFGLMxLz0vui5qUnfa9+6oJkwFHqaD9wT4SN86kdmhlZ4NRBVBrc/2+7RQyVvozCcec2fefooC8H2SrOrlFl23IJtVYn0px455dnOKM0RbVNr7p5ZTkhKj7S5AzPvxty5Fs94klr8f1r0CX3bNwAseYm+WRk/Bh9UoyzfgOcigyytTwDY4Mw/gOfXPfv3AgAAA==";
55 private static final Log log = LogFactory.getLog(ApplyFilterUI.class);
56 private static final long serialVersionUID = 1L;
57
58
59
60
61
62 protected List<Object> $activeBindings = new ArrayList<Object>();
63 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
64 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
65 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
66 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
67 private boolean allComponentsCreated;
68 protected final JAXXContext delegateContext = new DefaultJAXXContext();
69
70
71
72
73
74 protected JButton applyButton;
75 protected ExtendedComboBox<FilterDTO> applyFilterCombo;
76 protected JLabel applyFilterLabel;
77 protected ApplyFilterUI applyFilterUI = this;
78 protected DaliHelpBroker broker;
79 protected final ApplyFilterUIHandler handler = createHandler();
80 protected ApplyFilterUIModel model;
81
82
83
84
85
86
87
88 @Override
89 public void setEnabled(boolean enabled) {
90 handler.setEnabled(enabled);
91 }
92
93
94
95
96
97 public ApplyFilterUI(ApplicationUI parentUI) {
98 ApplicationUIUtil.setParentUI(this, parentUI);
99 $initialize();
100 }
101
102 public ApplyFilterUI() {
103 $initialize();
104 }
105
106 public ApplyFilterUI(JAXXContext parentContext) {
107 JAXXUtil.initContext(this, parentContext);
108 $initialize();
109 }
110
111 public ApplyFilterUI(boolean param0) {
112 super(param0);
113 $initialize();
114 }
115
116 public ApplyFilterUI(JAXXContext parentContext, boolean param1) {
117 super(param1);
118 JAXXUtil.initContext(this, parentContext);
119 $initialize();
120 }
121
122 public ApplyFilterUI(LayoutManager param0) {
123 super(param0);
124 $initialize();
125 }
126
127 public ApplyFilterUI(JAXXContext parentContext, LayoutManager param1) {
128 super(param1);
129 JAXXUtil.initContext(this, parentContext);
130 $initialize();
131 }
132
133 public ApplyFilterUI(LayoutManager param0, boolean param1) {
134 super(param0 ,param1);
135 $initialize();
136 }
137
138 public ApplyFilterUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
139 super(param1 ,param2);
140 JAXXUtil.initContext(this, parentContext);
141 $initialize();
142 }
143
144
145
146
147
148 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
149 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
150 }
151
152
153
154
155
156 @Override
157 public void applyDataBinding(String $binding) {
158 if (allComponentsCreated && $bindings.containsKey($binding)) {
159 getDataBinding($binding).applyDataBinding();
160 }
161 processDataBinding($binding);
162 }
163
164 @Override
165 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
166 super.firePropertyChange(propertyName, oldValue, newValue);
167 }
168
169 @Override
170 public Map<String, Object> get$objectMap() {
171 return $objectMap;
172 }
173
174 @Override
175 public JAXXBinding getDataBinding(String bindingId) {
176 return $bindings.get(bindingId);
177 }
178
179 @Override
180 public JAXXBinding[] getDataBindings() {
181 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
182 }
183
184 @Override
185 public Object getObjectById(String id) {
186 return $objectMap.get(id);
187 }
188
189 @Override
190 public void processDataBinding(String $binding, boolean $force) {
191 if (!$force && $activeBindings.contains($binding)) {
192 return;
193 }
194 $activeBindings.add($binding);
195 try {
196 if (allComponentsCreated && $bindings.containsKey($binding)) {
197 getDataBinding($binding).processDataBinding();
198 }
199 } finally {
200 $activeBindings.remove($binding);
201 }
202 }
203
204 @Override
205 public void processDataBinding(String $binding) {
206 processDataBinding($binding, false);
207 }
208
209 @Override
210 public void registerDataBinding(JAXXBinding binding) {
211 $bindings.put(binding.getId(), binding);
212 }
213
214 @Override
215 public void removeDataBinding(String $binding) {
216 if (allComponentsCreated && $bindings.containsKey($binding)) {
217 getDataBinding($binding).removeDataBinding();
218 }
219 }
220
221
222
223
224
225 @Override
226 public <T> T getContextValue(Class<T> clazz) {
227 return delegateContext.getContextValue(clazz, null);
228 }
229
230 @Override
231 public <T> T getContextValue(Class<T> clazz, String name) {
232 return delegateContext.getContextValue(clazz, name);
233 }
234
235 @Override
236 public JAXXContext getDelegateContext() {
237 return delegateContext;
238 }
239
240 @Override
241 public <O extends Container> O getParentContainer(Class<O> clazz) {
242 return SwingUtil.getParentContainer(this, clazz);
243 }
244
245 @Override
246 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
247 return SwingUtil.getParentContainer(source, clazz);
248 }
249
250 @Override
251 public <T> void removeContextValue(Class<T> clazz) {
252 delegateContext.removeContextValue(clazz, null);
253 }
254
255 @Override
256 public <T> void removeContextValue(Class<T> clazz, String name) {
257 delegateContext.removeContextValue(clazz, name);
258 }
259
260 @Override
261 public <T> void setContextValue(T o) {
262 delegateContext.setContextValue(o, null);
263 }
264
265 @Override
266 public <T> void setContextValue(T o, String name) {
267 delegateContext.setContextValue(o, name);
268 }
269
270
271
272
273
274 public JButton getApplyButton() {
275 return applyButton;
276 }
277
278 public ExtendedComboBox<FilterDTO> getApplyFilterCombo() {
279 return applyFilterCombo;
280 }
281
282 public JLabel getApplyFilterLabel() {
283 return applyFilterLabel;
284 }
285
286 public DaliHelpBroker getBroker() {
287 return broker;
288 }
289
290 public ApplyFilterUIHandler getHandler() {
291 return handler;
292 }
293
294 public ApplyFilterUIModel getModel() {
295 return model;
296 }
297
298
299
300
301
302 protected void addChildrenToApplyFilterUI() {
303 if (!allComponentsCreated) {
304 return;
305 }
306 add(applyFilterLabel, BorderLayout.PAGE_START);
307 add(applyFilterCombo, BorderLayout.CENTER);
308 add(applyButton, BorderLayout.PAGE_END);
309 }
310
311 protected void createApplyButton() {
312 $objectMap.put("applyButton", applyButton = new JButton());
313
314 applyButton.setName("applyButton");
315 applyButton.setText(t("dali.config.menu.apply.label"));
316 applyButton.setToolTipText(t("dali.config.menu.apply.tip"));
317 applyButton.putClientProperty("applicationAction", ApplyFilterAction.class);
318 }
319
320 protected void createApplyFilterCombo() {
321 $objectMap.put("applyFilterCombo", applyFilterCombo = new ExtendedComboBox<FilterDTO>(this));
322
323 applyFilterCombo.setName("applyFilterCombo");
324 applyFilterCombo.setFilterable(true);
325 applyFilterCombo.setShowDecorator(false);
326 applyFilterCombo.setProperty("filter");
327 applyFilterCombo.setShowReset(true);
328 }
329
330 protected void createApplyFilterLabel() {
331 $objectMap.put("applyFilterLabel", applyFilterLabel = new JLabel());
332
333 applyFilterLabel.setName("applyFilterLabel");
334 applyFilterLabel.setText(t("dali.filter.filterElement.filter.label"));
335 }
336
337 protected void createBroker() {
338 $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
339 }
340
341 protected ApplyFilterUIHandler createHandler() {
342 return new ApplyFilterUIHandler();
343 }
344
345 protected void createModel() {
346 $objectMap.put("model", model = getContextValue(ApplyFilterUIModel.class));
347 }
348
349
350
351
352
353 private void $completeSetup() {
354 allComponentsCreated = true;
355 if (log.isDebugEnabled()) {
356 log.debug(this);
357 }
358 addChildrenToApplyFilterUI();
359
360
361 JAXXUtil.applyDataBinding(this, $bindings.keySet());
362
363
364 applyFilterCombo.setBeanType(FilterDTO.class);
365 setBorder(BorderFactory.createTitledBorder(t("dali.filter.filterElement.apply.title")));
366 applyFilterLabel.setLabelFor(applyFilterCombo);
367 applyFilterCombo.setBean(model);
368 applyButton.setIcon(SwingUtil.createActionIcon("find"));
369 }
370
371 private void $initialize() {
372 if (allComponentsCreated) {
373 return;
374 }
375 if (log.isDebugEnabled()) {
376 log.debug(this);
377 }
378 handler.beforeInit(this);
379 $objectMap.put("applyFilterUI", applyFilterUI);
380 createModel();
381 createBroker();
382 createApplyFilterLabel();
383 createApplyFilterCombo();
384 createApplyButton();
385
386 setName("applyFilterUI");
387 setLayout(new BorderLayout());
388
389
390 $registerDefaultBindings();
391 $completeSetup();
392 handler.afterInit(this);
393 }
394
395 private void $registerDefaultBindings() {
396
397 registerDataBinding(new DefaultJAXXBinding(this, BINDING_APPLY_FILTER_COMBO_SELECTED_ITEM, true) {
398
399 @Override
400 public void applyDataBinding() {
401 if (model != null) {
402 model.addPropertyChangeListener("filter", this);
403 }
404 }
405
406 @Override
407 public void processDataBinding() {
408 if (model != null) {
409 applyFilterCombo.setSelectedItem(model.getFilter());
410 }
411 }
412
413 @Override
414 public void removeDataBinding() {
415 if (model != null) {
416 model.removePropertyChangeListener("filter", this);
417 }
418 }
419 });
420 }
421
422 }