1 package fr.ifremer.dali.ui.swing.content.extraction.filters;
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.plaf.WaitBlockingLayerUI;
9 import fr.ifremer.quadrige3.ui.swing.table.SwingTable;
10 import java.awt.BorderLayout;
11 import java.awt.Component;
12 import java.awt.Container;
13 import java.awt.LayoutManager;
14 import java.awt.event.ActionEvent;
15 import java.awt.event.ActionListener;
16 import java.awt.event.KeyEvent;
17 import java.awt.event.KeyListener;
18 import java.awt.event.MouseEvent;
19 import java.awt.event.MouseListener;
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.TreeMap;
25 import javax.swing.BorderFactory;
26 import javax.swing.JButton;
27 import javax.swing.JMenuItem;
28 import javax.swing.JPanel;
29 import javax.swing.JPopupMenu;
30 import javax.swing.JScrollPane;
31 import jaxx.runtime.JAXXBinding;
32 import jaxx.runtime.JAXXContext;
33 import jaxx.runtime.JAXXObject;
34 import jaxx.runtime.JAXXObjectDescriptor;
35 import jaxx.runtime.JAXXUtil;
36 import jaxx.runtime.SwingUtil;
37 import jaxx.runtime.binding.DefaultJAXXBinding;
38 import jaxx.runtime.context.DefaultJAXXContext;
39 import jaxx.runtime.swing.help.JAXXHelpUI;
40 import org.apache.commons.logging.Log;
41 import org.apache.commons.logging.LogFactory;
42 import static org.nuiton.i18n.I18n.t;
43
44 public class ExtractionFiltersUI extends JPanel implements JAXXHelpUI<DaliHelpBroker>, DaliUI<ExtractionFiltersUIModel, ExtractionFiltersUIHandler>, JAXXObject {
45
46
47
48
49
50 public static final String BINDING_EDIT_FILTER_BUTTON_ENABLED = "editFilterButton.enabled";
51 public static final String BINDING_EDIT_FILTER_MENU_ITEM_ENABLED = "editFilterMenuItem.enabled";
52 public static final String BINDING_TABLE_BLOCK_LAYER_BLOCK = "tableBlockLayer.block";
53
54
55
56
57
58 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAO1WQW8bRRSemDhpHEpLo6StGpCTVm1yYIxAqpBSoCTFNJUDVZ2KCF863h070453prNvG0dRET+BnwB3LkjcOCEOnDlwQfwFhDhwRbw363iz9SbOoUd8GK/fe983772d942/+5OVY8eWHot+n7skAtWT/N5HOzuftR/LAO7IOHDKgnEs/UyUWKnFZsOhPQZ2tdUgeG0Ar22YnjWRjI6g1xqsEsO+lvGulADsjTwiiONac+he69vEHbIOkypi/ebvv0pfh199W2KsbzG7WSylOg6VVTLZYCUVAruAOz0TNS2iLqbhVNTFfM+SbUOLOP5U9ORT9iWbbrApKxySAVs+fcmew+P7Ftic7IMTASgT1ZUG6eKHm8A+6TiuOk72pOOh0Ionisd7mAgPTATIyzMY76Q4/vEok7V+pylg5Z4JpQbWeEnMW0SX0U+1nXkiHbAbx/LfwV93EbPuIzPoORBtLde1CZ40xD5x3DzC8TQRoVNd+W5GZLXo8M+FAo9Bi4cdLbbiKe8bm2CHF+jF9QfYe964JaMki74gQwVpYeTYBNkDNp9DHdoJMT8ELmatigeNaQbOaH1fRBLYxRxF5iH0zJDk4ijJNmUPjJ/cBl8jb9KzBxDflSHtm6O0tLdeTwDQhFXn20K+fGJnrqXWt+n3VVqWhr7zWctSQjzIOb7UStHXLA7hldwQ4njzbLyz+ZtosbJL0AzsUmtUER6gK9WCSy9oARF6778Lc7/9+McP9UMBmMG95wtDj+gXDqZ1xuLJU7T1uXT6E1C6tiXsWgtZpEbx8+K2WJBYc+DG5HC/1wnOCc7vingXKcrTv//088KjX19hpTqraCPCuqD4TTYDuw67YHTYtx/e9hm9uncG1/OUG42VcSGNRP1g3T+lwH0eOClAbivQMkw9K7Cy7AeuYH6B4pZXV5/3sXmLBc0bVtCe+eWfueb3tw8bOIEFXT42PGti+Qs2pSKtIuk1dCCPhZo5a2OZhCaTwSJhZMXKaAdTy/36zkjLJnH2U8gmyRmbpHOKX4BcKNLH9YeiuBZtEshZMEZvK7vtIdUTIYDKzqZlROOH94Y8WPIqy1XcwJeMg7CyWr1+vZoauxKaaNIy7Z4MH5g99C+9X40SrfNxg4hMd7NAfIdU+03/cujpPVYoYf+3qrhVI9I1rlElvDzbdNPgkTwYSfo5sLPtwT20YbTBWX3rYFdEoUbVxvw2TNRRGJc+oz93aa2sFub44pU4LkVSCi32DdbDXrsVChDVtooowQ9G6CdorYxlJPMjWkQxw/IpcqrggehGPfxTsXMC041TME2qIL1NjuG4fKp6zJgs/gPEoIzP/QoAAA==";
59 private static final Log log = LogFactory.getLog(ExtractionFiltersUI.class);
60 private static final long serialVersionUID = 1L;
61
62
63
64
65
66 protected List<Object> $activeBindings = new ArrayList<Object>();
67 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
68 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
69 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
70 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
71 private boolean allComponentsCreated;
72 protected final JAXXContext delegateContext = new DefaultJAXXContext();
73
74
75
76
77
78 protected DaliHelpBroker broker;
79 protected JButton editFilterButton;
80 protected JMenuItem editFilterMenuItem;
81 protected ExtractionFiltersUI extractionFiltersUI = this;
82 protected JPanel extractionsFiltersPanelButtons;
83 protected JScrollPane extractionsFiltersScrollPane;
84 protected SwingTable extractionsFiltersTable;
85 protected final ExtractionFiltersUIHandler handler = createHandler();
86 protected ExtractionFiltersUIModel model;
87 protected WaitBlockingLayerUI tableBlockLayer;
88 protected JPopupMenu tablePopup;
89
90
91
92
93
94 private JPanel $JPanel0;
95
96
97
98
99
100 public ExtractionFiltersUI(ApplicationUI parentUI) {
101 ApplicationUIUtil.setParentUI(this, parentUI);
102 $initialize();
103 }
104
105 public ExtractionFiltersUI() {
106 $initialize();
107 }
108
109 public ExtractionFiltersUI(JAXXContext parentContext) {
110 JAXXUtil.initContext(this, parentContext);
111 $initialize();
112 }
113
114 public ExtractionFiltersUI(boolean param0) {
115 super(param0);
116 $initialize();
117 }
118
119 public ExtractionFiltersUI(JAXXContext parentContext, boolean param1) {
120 super(param1);
121 JAXXUtil.initContext(this, parentContext);
122 $initialize();
123 }
124
125 public ExtractionFiltersUI(LayoutManager param0) {
126 super(param0);
127 $initialize();
128 }
129
130 public ExtractionFiltersUI(JAXXContext parentContext, LayoutManager param1) {
131 super(param1);
132 JAXXUtil.initContext(this, parentContext);
133 $initialize();
134 }
135
136 public ExtractionFiltersUI(LayoutManager param0, boolean param1) {
137 super(param0 ,param1);
138 $initialize();
139 }
140
141 public ExtractionFiltersUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
142 super(param1 ,param2);
143 JAXXUtil.initContext(this, parentContext);
144 $initialize();
145 }
146
147
148
149
150
151 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
152 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
153 }
154
155
156
157
158
159 @Override
160 public void applyDataBinding(String $binding) {
161 if (allComponentsCreated && $bindings.containsKey($binding)) {
162 getDataBinding($binding).applyDataBinding();
163 }
164 processDataBinding($binding);
165 }
166
167 @Override
168 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
169 super.firePropertyChange(propertyName, oldValue, newValue);
170 }
171
172 @Override
173 public Map<String, Object> get$objectMap() {
174 return $objectMap;
175 }
176
177 @Override
178 public JAXXBinding getDataBinding(String bindingId) {
179 return $bindings.get(bindingId);
180 }
181
182 @Override
183 public JAXXBinding[] getDataBindings() {
184 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
185 }
186
187 @Override
188 public Object getObjectById(String id) {
189 return $objectMap.get(id);
190 }
191
192 @Override
193 public void processDataBinding(String $binding, boolean $force) {
194 if (!$force && $activeBindings.contains($binding)) {
195 return;
196 }
197 $activeBindings.add($binding);
198 try {
199 if (allComponentsCreated && $bindings.containsKey($binding)) {
200 getDataBinding($binding).processDataBinding();
201 }
202 } finally {
203 $activeBindings.remove($binding);
204 }
205 }
206
207 @Override
208 public void processDataBinding(String $binding) {
209 processDataBinding($binding, false);
210 }
211
212 @Override
213 public void registerDataBinding(JAXXBinding binding) {
214 $bindings.put(binding.getId(), binding);
215 }
216
217 @Override
218 public void removeDataBinding(String $binding) {
219 if (allComponentsCreated && $bindings.containsKey($binding)) {
220 getDataBinding($binding).removeDataBinding();
221 }
222 }
223
224
225
226
227
228 @Override
229 public <T> T getContextValue(Class<T> clazz) {
230 return delegateContext.getContextValue(clazz, null);
231 }
232
233 @Override
234 public <T> T getContextValue(Class<T> clazz, String name) {
235 return delegateContext.getContextValue(clazz, name);
236 }
237
238 @Override
239 public JAXXContext getDelegateContext() {
240 return delegateContext;
241 }
242
243 @Override
244 public <O extends Container> O getParentContainer(Class<O> clazz) {
245 return SwingUtil.getParentContainer(this, clazz);
246 }
247
248 @Override
249 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
250 return SwingUtil.getParentContainer(source, clazz);
251 }
252
253 @Override
254 public <T> void removeContextValue(Class<T> clazz) {
255 delegateContext.removeContextValue(clazz, null);
256 }
257
258 @Override
259 public <T> void removeContextValue(Class<T> clazz, String name) {
260 delegateContext.removeContextValue(clazz, name);
261 }
262
263 @Override
264 public <T> void setContextValue(T o) {
265 delegateContext.setContextValue(o, null);
266 }
267
268 @Override
269 public <T> void setContextValue(T o, String name) {
270 delegateContext.setContextValue(o, name);
271 }
272
273
274
275
276
277 public void doActionPerformed__on__editFilterButton(ActionEvent event) {
278 if (log.isDebugEnabled()) {
279 log.debug(event);
280 }
281 handler.editFilter();
282 }
283
284 public void doActionPerformed__on__editFilterMenuItem(ActionEvent event) {
285 if (log.isDebugEnabled()) {
286 log.debug(event);
287 }
288 handler.editFilter();
289 }
290
291 public void doKeyPressed__on__extractionsFiltersTable(KeyEvent event) {
292 if (log.isDebugEnabled()) {
293 log.debug(event);
294 }
295 handler.openRowMenu(event, tablePopup);
296 }
297
298 public void doMouseClicked__on__extractionsFiltersTable(MouseEvent event) {
299 if (log.isDebugEnabled()) {
300 log.debug(event);
301 }
302 handler.autoSelectRowInTable(event, tablePopup);
303 }
304
305
306
307
308
309 public DaliHelpBroker getBroker() {
310 return broker;
311 }
312
313 public JButton getEditFilterButton() {
314 return editFilterButton;
315 }
316
317 public JMenuItem getEditFilterMenuItem() {
318 return editFilterMenuItem;
319 }
320
321 public JPanel getExtractionsFiltersPanelButtons() {
322 return extractionsFiltersPanelButtons;
323 }
324
325 public JScrollPane getExtractionsFiltersScrollPane() {
326 return extractionsFiltersScrollPane;
327 }
328
329 public SwingTable getExtractionsFiltersTable() {
330 return extractionsFiltersTable;
331 }
332
333 public ExtractionFiltersUIHandler getHandler() {
334 return handler;
335 }
336
337 public ExtractionFiltersUIModel getModel() {
338 return model;
339 }
340
341 public WaitBlockingLayerUI getTableBlockLayer() {
342 return tableBlockLayer;
343 }
344
345 public JPopupMenu getTablePopup() {
346 return tablePopup;
347 }
348
349
350
351
352
353 @Override
354 public void registerHelpId(DaliHelpBroker broker, Component component, String helpId) {
355 broker.installUI(component, helpId);
356 }
357
358 @Override
359 public void showHelp(String helpId) {
360 getBroker().showHelp(this, helpId);
361 }
362
363
364
365
366
367 protected JPanel get$JPanel0() {
368 return $JPanel0;
369 }
370
371
372
373
374
375 protected void addChildrenToExtractionFiltersUI() {
376 if (!allComponentsCreated) {
377 return;
378 }
379 add(SwingUtil.boxComponentWithJxLayer(extractionsFiltersScrollPane));
380 add(extractionsFiltersPanelButtons, BorderLayout.PAGE_END);
381 }
382
383 protected void addChildrenToExtractionsFiltersPanelButtons() {
384 if (!allComponentsCreated) {
385 return;
386 }
387 extractionsFiltersPanelButtons.add($JPanel0, BorderLayout.LINE_START);
388 }
389
390 protected void addChildrenToExtractionsFiltersScrollPane() {
391 if (!allComponentsCreated) {
392 return;
393 }
394 extractionsFiltersScrollPane.getViewport().add(extractionsFiltersTable);
395 }
396
397 protected void addChildrenToTablePopup() {
398 if (!allComponentsCreated) {
399 return;
400 }
401 tablePopup.add(editFilterMenuItem);
402 }
403
404 protected void createBroker() {
405 $objectMap.put("broker", broker = new DaliHelpBroker("dali.home.help"));
406 }
407
408 protected void createEditFilterButton() {
409 $objectMap.put("editFilterButton", editFilterButton = new JButton());
410
411 editFilterButton.setName("editFilterButton");
412 editFilterButton.setText(t("dali.extraction.filters.edit.label"));
413 editFilterButton.setToolTipText(t("dali.extraction.filters.edit.tip"));
414 editFilterButton.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__editFilterButton"));
415 }
416
417 protected void createEditFilterMenuItem() {
418 $objectMap.put("editFilterMenuItem", editFilterMenuItem = new JMenuItem());
419
420 editFilterMenuItem.setName("editFilterMenuItem");
421 editFilterMenuItem.setText(t("dali.extraction.filters.edit.label"));
422 editFilterMenuItem.setToolTipText(t("dali.extraction.filters.edit.tip"));
423 editFilterMenuItem.addActionListener(JAXXUtil.getEventListener(ActionListener.class, "actionPerformed", this, "doActionPerformed__on__editFilterMenuItem"));
424 }
425
426 protected void createExtractionsFiltersPanelButtons() {
427 $objectMap.put("extractionsFiltersPanelButtons", extractionsFiltersPanelButtons = new JPanel());
428
429 extractionsFiltersPanelButtons.setName("extractionsFiltersPanelButtons");
430 extractionsFiltersPanelButtons.setLayout(new BorderLayout());
431 }
432
433 protected void createExtractionsFiltersScrollPane() {
434 $objectMap.put("extractionsFiltersScrollPane", extractionsFiltersScrollPane = new JScrollPane());
435
436 extractionsFiltersScrollPane.setName("extractionsFiltersScrollPane");
437 }
438
439 protected void createExtractionsFiltersTable() {
440 $objectMap.put("extractionsFiltersTable", extractionsFiltersTable = new SwingTable());
441
442 extractionsFiltersTable.setName("extractionsFiltersTable");
443 extractionsFiltersTable.addKeyListener(JAXXUtil.getEventListener(KeyListener.class, "keyPressed", this, "doKeyPressed__on__extractionsFiltersTable"));
444 extractionsFiltersTable.addMouseListener(JAXXUtil.getEventListener(MouseListener.class, "mouseClicked", this, "doMouseClicked__on__extractionsFiltersTable"));
445 }
446
447 protected ExtractionFiltersUIHandler createHandler() {
448 return new ExtractionFiltersUIHandler();
449 }
450
451 protected void createModel() {
452 $objectMap.put("model", model = getContextValue(ExtractionFiltersUIModel.class));
453 }
454
455 protected void createTableBlockLayer() {
456 $objectMap.put("tableBlockLayer", tableBlockLayer = new WaitBlockingLayerUI());
457 }
458
459 protected void createTablePopup() {
460 $objectMap.put("tablePopup", tablePopup = new JPopupMenu());
461
462 tablePopup.setName("tablePopup");
463 }
464
465
466
467
468
469 private void $completeSetup() {
470 allComponentsCreated = true;
471 if (log.isDebugEnabled()) {
472 log.debug(this);
473 }
474 addChildrenToExtractionFiltersUI();
475 addChildrenToTablePopup();
476 addChildrenToExtractionsFiltersScrollPane();
477 addChildrenToExtractionsFiltersPanelButtons();
478
479 $JPanel0.add(editFilterButton);
480
481
482 JAXXUtil.applyDataBinding(this, $bindings.keySet());
483
484
485 editFilterButton.setAlignmentX(Component.CENTER_ALIGNMENT);
486 setBorder(BorderFactory.createTitledBorder(t("dali.extraction.filters.title")));
487 tableBlockLayer.setBlockingColor(handler.getConfig().getColorBlockingLayer());
488 editFilterMenuItem.setIcon(SwingUtil.createActionIcon("edit"));
489 editFilterButton.setIcon(SwingUtil.createActionIcon("edit"));
490 }
491
492 private void $initialize() {
493 if (allComponentsCreated) {
494 return;
495 }
496 if (log.isDebugEnabled()) {
497 log.debug(this);
498 }
499 handler.beforeInit(this);
500 $objectMap.put("extractionFiltersUI", extractionFiltersUI);
501 createModel();
502 createBroker();
503 createTableBlockLayer();
504 createTablePopup();
505 createEditFilterMenuItem();
506 createExtractionsFiltersScrollPane();
507 createExtractionsFiltersTable();
508 createExtractionsFiltersPanelButtons();
509
510 $objectMap.put("$JPanel0", $JPanel0 = new JPanel());
511
512 $JPanel0.setName("$JPanel0");
513 createEditFilterButton();
514
515 setName("extractionFiltersUI");
516 setLayout(new BorderLayout());
517
518
519 $registerDefaultBindings();
520 $completeSetup();
521 handler.afterInit(this);
522 }
523
524 private void $registerDefaultBindings() {
525
526 registerDataBinding(new DefaultJAXXBinding(this, BINDING_TABLE_BLOCK_LAYER_BLOCK, true) {
527
528 @Override
529 public void applyDataBinding() {
530 if (model != null) {
531 model.addPropertyChangeListener("loading", this);
532 }
533 }
534
535 @Override
536 public void processDataBinding() {
537 if (model != null) {
538 tableBlockLayer.setBlock(model.isLoading());
539 }
540 }
541
542 @Override
543 public void removeDataBinding() {
544 if (model != null) {
545 model.removePropertyChangeListener("loading", this);
546 }
547 }
548 });
549 registerDataBinding(new DefaultJAXXBinding(this, BINDING_EDIT_FILTER_MENU_ITEM_ENABLED, true, true) {
550
551 @Override
552 public void applyDataBinding() {
553 if (model != null) {
554 model.addPropertyChangeListener("loading", this);
555 }
556 if (model != null) {
557 model.addPropertyChangeListener("singleSelectedRow", this);
558 }
559 if (model != null) {
560 model.addPropertyChangeListener("selectedExtraction", this);
561 }
562 }
563
564 @Override
565 public void processDataBinding() {
566 if (model != null) {
567 editFilterMenuItem.setEnabled(!model.isLoading() && model.getSingleSelectedRow() != null && model.getSelectedExtraction() != null);
568 }
569 }
570
571 @Override
572 public void removeDataBinding() {
573 if (model != null) {
574 model.removePropertyChangeListener("loading", this);
575 }
576 if (model != null) {
577 model.removePropertyChangeListener("singleSelectedRow", this);
578 }
579 if (model != null) {
580 model.removePropertyChangeListener("selectedExtraction", this);
581 }
582 }
583 });
584 registerDataBinding(new DefaultJAXXBinding(this, BINDING_EDIT_FILTER_BUTTON_ENABLED, true, true) {
585
586 @Override
587 public void applyDataBinding() {
588 if (model != null) {
589 model.addPropertyChangeListener("loading", this);
590 }
591 if (model != null) {
592 model.addPropertyChangeListener("singleSelectedRow", this);
593 }
594 if (model != null) {
595 model.addPropertyChangeListener("selectedExtraction", this);
596 }
597 }
598
599 @Override
600 public void processDataBinding() {
601 if (model != null) {
602 editFilterButton.setEnabled(!model.isLoading() && model.getSingleSelectedRow() != null && model.getSelectedExtraction() != null);
603 }
604 }
605
606 @Override
607 public void removeDataBinding() {
608 if (model != null) {
609 model.removePropertyChangeListener("loading", this);
610 }
611 if (model != null) {
612 model.removePropertyChangeListener("singleSelectedRow", this);
613 }
614 if (model != null) {
615 model.removePropertyChangeListener("selectedExtraction", this);
616 }
617 }
618 });
619 }
620
621 }