1 package fr.ifremer.tutti.ui.swing.content.db;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import fr.ifremer.tutti.ui.swing.TuttiHelpBroker;
28 import fr.ifremer.tutti.ui.swing.TuttiUIContext;
29 import fr.ifremer.tutti.ui.swing.util.TuttiUI;
30 import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil;
31 import java.awt.BorderLayout;
32 import java.awt.Component;
33 import java.awt.Container;
34 import java.awt.GridLayout;
35 import java.awt.LayoutManager;
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.List;
39 import java.util.Map;
40 import java.util.TreeMap;
41 import javax.swing.JButton;
42 import javax.swing.JPanel;
43 import javax.swing.JTextPane;
44 import javax.swing.border.EmptyBorder;
45 import jaxx.runtime.JAXXBinding;
46 import jaxx.runtime.JAXXContext;
47 import jaxx.runtime.JAXXObject;
48 import jaxx.runtime.JAXXObjectDescriptor;
49 import jaxx.runtime.JAXXUtil;
50 import jaxx.runtime.SwingUtil;
51 import jaxx.runtime.binding.DefaultJAXXBinding;
52 import jaxx.runtime.context.DefaultJAXXContext;
53 import jaxx.runtime.swing.help.JAXXHelpUI;
54 import org.apache.commons.logging.Log;
55 import org.apache.commons.logging.LogFactory;
56 import static org.nuiton.i18n.I18n.t;
57
58 public class DbManagerUI extends JPanel implements JAXXHelpUI<TuttiHelpBroker>, TuttiUI<TuttiUIContext, DbManagerUIHandler>, JAXXObject {
59
60
61
62
63
64 public static final String BINDING_EXPORT_DB_BUTTON_VISIBLE = "exportDbButton.visible";
65 public static final String BINDING_INSTALL_OR_REINSTALL_DB_BUTTON_TEXT = "installOrReinstallDbButton.text";
66 public static final String BINDING_INSTALL_OR_REINSTALL_DB_BUTTON_TOOL_TIP_TEXT = "installOrReinstallDbButton.toolTipText";
67 public static final String BINDING_OPEN_DB_BUTTON_VISIBLE = "openDbButton.visible";
68 public static final String BINDING_UPGRADE_DB_BUTTON_VISIBLE = "upgradeDbButton.visible";
69
70
71
72
73
74 private static final String $jaxxObjectDescriptor = "H4sIAAAAAAAAAK1XTW8bRRiemDiu47ZpnbakNFGdBCIH6DoVioQUBM2nmshpUOKoFTmEWe/YnrLeHWbHzQYriJ/AT4A7FyQuwAlx6JkDF8RfQBUHroh3Ztfrr12vrRBFa3vmfZ/345n32d3v/kJJh6P559h1Nd6wBK0TbW/92bMD/Tkpiy3ilDllwubI+xtLoMQJyhjBuiPQ4klRuhd898KmXWe2RawO77UimnTEuUmcGiFCoLluj7LjFI6C7TWXNXgLNUgqDPWbv18lvja++jaBkMsguwyUkovzalcyXkQJagiUhUgvcMHEVhXS4NSqQr7X5NqmiR3nCa6Tz9GXKFVEEwxzABNoYfiSFYbyd5lANw19H1u4SnjJZh9ji5gCrVS4Riuc1AnXREMIqjWo5pxBHlrZtgTAaoaubbUcj3cZU4ATAiXrtiEh8tEQJfnzeHdTIrmi7Tqhc/szwgVajvF9TEy2oWzbzmlqVWw//azslOt77KlFaZUOjKekMa9jQW1rnRMs0O0ulxLkJd2keTbwSuGydFA/b3UDXrUZsbb0DcgOqkLTXWjeqrScESijq18qqZb3G9RyBDbNA35I/K8tLGkxq1yDWNcpUMvFAIupBqtybJBBIMSNAuHoXteJhVnQ2rPQPqxjJyjJG7As0MxJ//gcwpY3ODM9gyMB1e6/d6Z///nPH3Za05KF2LdDTTuGHU4x49BuLqgMPeWNSkNQs7CP2doJSjvEBKVQSjAbktiRvw3JQbyb0l2T7tpj7NQAIpn645df73z622sosYMmTRsbO1ja76K0qHHogm0aLvvokcro6tkVuN6QuUFTT7FhPCW0WhPHFoWhfL2ppkGrEtFezi9fuNCV2ZCuBKnp6Zf/TB99/6jVmTHI9G6kebs7yU/QBLVMahGlJL5IhCpHhjmkYdhtMQiTB8QYSMQ1E+vEfEpFTeav9t5R10JYFyZqqlSBEqsrbkOavacqkN9WPcC+IRgAlzytwbjDGWsueFoQ6JUmNxYu+mOEiRrzpSIqUgKmtmZz+gXMLzbXTVq16kpYp5p7RVm+trn9pLR9eCHQpKcDu1IKUaZDSsIyudGxr3DiEhmXQmhzQwrhXNMiZ7ntOhPnG2opv/puzv9fhkyuEIMKrJswlskKNh34TFfscsPpXsv4ol06Z9JCqm6hJupmWL690hiXrhQ/+vB9a98idduiZVDvXpq8dmmBsmn1wDZ7CgFMWvbCKTuBDppD3X58NdZ2Q8TTg9LK8ij3MjbpWz0wdAHdhmYI9LBZw5ZhQjwYVR/QU0Z5K8h7U0ydLX3bpQ5MsGx+62Au9x/Mvoq9kwpMCNs2S5SVVNSV6KiUhQUNI2zAzWN07vJRlfi3nDjq9kekTsGqzP0Ag4hLe0advN2PybfNUj6apVZt4SQtxrkJysJ46blNx3GR6uNiKSKw96gRx8T6aEwcKNBB3U/JuKr3qRfUoUpg3m72HdLc0lJuvr1ahNsnMfJyXnzK5gaW1SZsKZIwvwHhdM0Pdoogq+v5bXSqoiQveA6LY2tzNLaOmYEFGcxXtqGMHnBSIfIVgWKzk7pbzUEk5eIKGkb+2tWHU/VmrF8EW73Pt6MTFqVzrafi/5mvbXcIdfNi90zYYJqi5K9VxjDyF5Q8mvwFblHy1/2CEUeRfG408bkNxuj6B3BwcU6nlgH9/LAPfUxeJ2MR5fKP8vJTOML0pRHuDlHVOC17r1cRGPeGyuLlAIT7l0aYvzTC4qUR3gKE/wARvL+N/BEAAA==";
75 private static final Log log = LogFactory.getLog(DbManagerUI.class);
76 private static final long serialVersionUID = 1L;
77
78
79
80
81
82 protected List<Object> $activeBindings = new ArrayList<Object>();
83 protected Map<String, Object> $bindingSources = new HashMap<String, Object>();
84 protected final Map<String, JAXXBinding> $bindings = new TreeMap<String, JAXXBinding>();
85 protected Map<String, Object> $objectMap = new HashMap<String, Object>();
86 protected Map<?, ?> $previousValues = new HashMap<Object, Object>();
87 private boolean allComponentsCreated;
88 protected final JAXXContext delegateContext = new DefaultJAXXContext();
89
90
91
92
93
94 protected JPanel actions;
95 protected TuttiHelpBroker broker;
96 protected DbManagerUI dbManagerTopPanel = this;
97 protected JButton exportDbButton;
98 protected final DbManagerUIHandler handler = createHandler();
99 protected JButton importDbButton;
100 protected JPanel infoPanel;
101 protected JTextPane informationArea;
102 protected JButton installOrReinstallDbButton;
103 protected TuttiUIContext model;
104 protected JButton openDbButton;
105 protected JButton upgradeDbButton;
106
107
108
109
110
111 public DbManagerUI(TuttiUI parentUI) {
112 TuttiUIUtil.setParentUI(this, parentUI);
113 $initialize();
114 }
115
116 public DbManagerUI(LayoutManager param0, boolean param1) {
117 super(param0 ,param1);
118 $initialize();
119 }
120
121 public DbManagerUI(JAXXContext parentContext, LayoutManager param1, boolean param2) {
122 super(param1 ,param2);
123 JAXXUtil.initContext(this, parentContext);
124 $initialize();
125 }
126
127 public DbManagerUI(LayoutManager param0) {
128 super(param0);
129 $initialize();
130 }
131
132 public DbManagerUI(JAXXContext parentContext, LayoutManager param1) {
133 super(param1);
134 JAXXUtil.initContext(this, parentContext);
135 $initialize();
136 }
137
138 public DbManagerUI() {
139 $initialize();
140 }
141
142 public DbManagerUI(JAXXContext parentContext) {
143 JAXXUtil.initContext(this, parentContext);
144 $initialize();
145 }
146
147 public DbManagerUI(boolean param0) {
148 super(param0);
149 $initialize();
150 }
151
152 public DbManagerUI(JAXXContext parentContext, boolean param1) {
153 super(param1);
154 JAXXUtil.initContext(this, parentContext);
155 $initialize();
156 }
157
158
159
160
161
162 public static JAXXObjectDescriptor $getJAXXObjectDescriptor() {
163 return JAXXUtil.decodeCompressedJAXXObjectDescriptor($jaxxObjectDescriptor);
164 }
165
166
167
168
169
170 @Override
171 public void applyDataBinding(String $binding) {
172 if (allComponentsCreated && $bindings.containsKey($binding)) {
173 getDataBinding($binding).applyDataBinding();
174 }
175 processDataBinding($binding);
176 }
177
178 @Override
179 public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
180 super.firePropertyChange(propertyName, oldValue, newValue);
181 }
182
183 @Override
184 public Map<String, Object> get$objectMap() {
185 return $objectMap;
186 }
187
188 @Override
189 public JAXXBinding getDataBinding(String bindingId) {
190 return $bindings.get(bindingId);
191 }
192
193 @Override
194 public JAXXBinding[] getDataBindings() {
195 return $bindings.values().toArray(new JAXXBinding[$bindings.size()]);
196 }
197
198 @Override
199 public Object getObjectById(String id) {
200 return $objectMap.get(id);
201 }
202
203 @Override
204 public void processDataBinding(String $binding, boolean $force) {
205 if (!$force && $activeBindings.contains($binding)) {
206 return;
207 }
208 $activeBindings.add($binding);
209 try {
210 if (allComponentsCreated && $bindings.containsKey($binding)) {
211 getDataBinding($binding).processDataBinding();
212 }
213 } finally {
214 $activeBindings.remove($binding);
215 }
216 }
217
218 @Override
219 public void processDataBinding(String $binding) {
220 processDataBinding($binding, false);
221 }
222
223 @Override
224 public void registerDataBinding(JAXXBinding binding) {
225 $bindings.put(binding.getId(), binding);
226 }
227
228 @Override
229 public void removeDataBinding(String $binding) {
230 if (allComponentsCreated && $bindings.containsKey($binding)) {
231 getDataBinding($binding).removeDataBinding();
232 }
233 }
234
235
236
237
238
239 @Override
240 public <T> T getContextValue(Class<T> clazz) {
241 return delegateContext.getContextValue(clazz, null);
242 }
243
244 @Override
245 public <T> T getContextValue(Class<T> clazz, String name) {
246 return delegateContext.getContextValue(clazz, name);
247 }
248
249 @Override
250 public JAXXContext getDelegateContext() {
251 return delegateContext;
252 }
253
254 @Override
255 public <O extends Container> O getParentContainer(Class<O> clazz) {
256 return SwingUtil.getParentContainer(this, clazz);
257 }
258
259 @Override
260 public <O extends Container> O getParentContainer(Object source, Class<O> clazz) {
261 return SwingUtil.getParentContainer(source, clazz);
262 }
263
264 @Override
265 public <T> void removeContextValue(Class<T> clazz) {
266 delegateContext.removeContextValue(clazz, null);
267 }
268
269 @Override
270 public <T> void removeContextValue(Class<T> clazz, String name) {
271 delegateContext.removeContextValue(clazz, name);
272 }
273
274 @Override
275 public <T> void setContextValue(T o) {
276 delegateContext.setContextValue(o, null);
277 }
278
279 @Override
280 public <T> void setContextValue(T o, String name) {
281 delegateContext.setContextValue(o, name);
282 }
283
284
285
286
287
288 public JPanel getActions() {
289 return actions;
290 }
291
292 public TuttiHelpBroker getBroker() {
293 return broker;
294 }
295
296 public JButton getExportDbButton() {
297 return exportDbButton;
298 }
299
300 public DbManagerUIHandler getHandler() {
301 return handler;
302 }
303
304 public JButton getImportDbButton() {
305 return importDbButton;
306 }
307
308 public JPanel getInfoPanel() {
309 return infoPanel;
310 }
311
312 public JTextPane getInformationArea() {
313 return informationArea;
314 }
315
316 public JButton getInstallOrReinstallDbButton() {
317 return installOrReinstallDbButton;
318 }
319
320 public TuttiUIContext getModel() {
321 return model;
322 }
323
324 public JButton getOpenDbButton() {
325 return openDbButton;
326 }
327
328 public JButton getUpgradeDbButton() {
329 return upgradeDbButton;
330 }
331
332
333
334
335
336 @Override
337 public void registerHelpId(TuttiHelpBroker broker, Component component, String helpId) {
338 broker.installUI(component, helpId);
339 }
340
341 @Override
342 public void showHelp(String helpId) {
343 getBroker().showHelp(this, helpId);
344 }
345
346
347
348
349
350 protected void addChildrenToActions() {
351 if (!allComponentsCreated) {
352 return;
353 }
354 actions.add(openDbButton);
355 actions.add(installOrReinstallDbButton);
356 actions.add(importDbButton);
357 actions.add(upgradeDbButton);
358 actions.add(exportDbButton);
359 }
360
361 protected void addChildrenToDbManagerTopPanel() {
362 if (!allComponentsCreated) {
363 return;
364 }
365 add(infoPanel, BorderLayout.CENTER);
366 add(actions, BorderLayout.SOUTH);
367 }
368
369 protected void addChildrenToInfoPanel() {
370 if (!allComponentsCreated) {
371 return;
372 }
373 infoPanel.add(informationArea, BorderLayout.CENTER);
374 }
375
376 protected void createActions() {
377 $objectMap.put("actions", actions = new JPanel());
378
379 actions.setName("actions");
380 actions.setLayout(new GridLayout(0, 1));
381 }
382
383 protected void createBroker() {
384 $objectMap.put("broker", broker = new TuttiHelpBroker("tutti.dbManager.help"));
385 }
386
387 protected void createExportDbButton() {
388 $objectMap.put("exportDbButton", exportDbButton = new JButton());
389
390 exportDbButton.setName("exportDbButton");
391 exportDbButton.setText(t("tutti.dbManager.action.exportDb"));
392 exportDbButton.setToolTipText(t("tutti.dbManager.action.exportDb.tip"));
393 exportDbButton.putClientProperty("help", "tutti.dbManager.action.exportDb.help");
394 exportDbButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.db.actions.ExportDbAction.class);
395 }
396
397 protected DbManagerUIHandler createHandler() {
398 return new DbManagerUIHandler();
399 }
400
401 protected void createImportDbButton() {
402 $objectMap.put("importDbButton", importDbButton = new JButton());
403
404 importDbButton.setName("importDbButton");
405 importDbButton.setText(t("tutti.dbManager.action.importDb"));
406 importDbButton.setToolTipText(t("tutti.dbManager.action.importDb.tip"));
407 importDbButton.putClientProperty("help", "tutti.dbManager.action.importDb.help");
408 importDbButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.db.actions.ImportOrReimportDbAction.class);
409 }
410
411 protected void createInfoPanel() {
412 $objectMap.put("infoPanel", infoPanel = new JPanel());
413
414 infoPanel.setName("infoPanel");
415 infoPanel.setLayout(new BorderLayout());
416 }
417
418 protected void createInformationArea() {
419 $objectMap.put("informationArea", informationArea = new JTextPane());
420
421 informationArea.setName("informationArea");
422 informationArea.setEditable(false);
423 informationArea.setFocusable(false);
424 informationArea.setContentType("text/html");
425 }
426
427 protected void createInstallOrReinstallDbButton() {
428 $objectMap.put("installOrReinstallDbButton", installOrReinstallDbButton = new JButton());
429
430 installOrReinstallDbButton.setName("installOrReinstallDbButton");
431 installOrReinstallDbButton.putClientProperty("help", "tutti.dbManager.action.installDb.help");
432 installOrReinstallDbButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.db.actions.InstallOrReinstallDbAction.class);
433 }
434
435 protected void createModel() {
436 $objectMap.put("model", model = getContextValue(TuttiUIContext.class));
437 }
438
439 protected void createOpenDbButton() {
440 $objectMap.put("openDbButton", openDbButton = new JButton());
441
442 openDbButton.setName("openDbButton");
443 openDbButton.setText(t("tutti.dbManager.action.openDb"));
444 openDbButton.setToolTipText(t("tutti.dbManager.action.openDb.tip"));
445 SwingUtil.setComponentHeight(openDbButton,50);
446 openDbButton.putClientProperty("help", "tutti.dbManager.action.openDb.help");
447 openDbButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.db.actions.OpenDbAction.class);
448 }
449
450 protected void createUpgradeDbButton() {
451 $objectMap.put("upgradeDbButton", upgradeDbButton = new JButton());
452
453 upgradeDbButton.setName("upgradeDbButton");
454 upgradeDbButton.setText(t("tutti.dbManager.action.upgradeDb"));
455 upgradeDbButton.setToolTipText(t("tutti.dbManager.action.upgradeDb.tip"));
456 upgradeDbButton.putClientProperty("help", "tutti.dbManager.action.upgradeDb.help");
457 upgradeDbButton.putClientProperty("applicationAction", fr.ifremer.tutti.ui.swing.content.db.actions.UpdateDbAction.class);
458 }
459
460
461
462
463
464 private void $completeSetup() {
465 allComponentsCreated = true;
466 if (log.isDebugEnabled()) {
467 log.debug(this);
468 }
469 addChildrenToDbManagerTopPanel();
470 addChildrenToInfoPanel();
471 addChildrenToActions();
472
473
474 JAXXUtil.applyDataBinding(this, $bindings.keySet());
475
476
477 informationArea.setBorder(new EmptyBorder(5, 5, 5, 5));
478 openDbButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.dbManager.action.openDb.mnemonic"),'Z'));
479 openDbButton.setIcon(SwingUtil.createActionIcon("open-db"));
480 installOrReinstallDbButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.dbManager.action.installDb.mnemonic"),'Z'));
481 installOrReinstallDbButton.setIcon(SwingUtil.createActionIcon("install-db"));
482 importDbButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.dbManager.action.importDb.mnemonic"),'Z'));
483 importDbButton.setIcon(SwingUtil.createActionIcon("import-db"));
484 upgradeDbButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.dbManager.action.upgradeDb.mnemonic"),'Z'));
485 upgradeDbButton.setIcon(SwingUtil.createActionIcon("update-referential"));
486 exportDbButton.setMnemonic(SwingUtil.getFirstCharAt(t("tutti.dbManager.action.exportDb.mnemonic"),'Z'));
487 exportDbButton.setIcon(SwingUtil.createActionIcon("export-db"));
488
489
490 TuttiHelpBroker _broker = getBroker();
491 registerHelpId(_broker, dbManagerTopPanel, "tutti.dbManager.help");
492 registerHelpId(_broker, openDbButton, "tutti.dbManager.action.openDb.help");
493 registerHelpId(_broker, installOrReinstallDbButton, "tutti.dbManager.action.installDb.help");
494 registerHelpId(_broker, importDbButton, "tutti.dbManager.action.importDb.help");
495 registerHelpId(_broker, upgradeDbButton, "tutti.dbManager.action.upgradeDb.help");
496 registerHelpId(_broker, exportDbButton, "tutti.dbManager.action.exportDb.help");
497 _broker.prepareUI(this);
498 }
499
500 private void $initialize() {
501 if (allComponentsCreated) {
502 return;
503 }
504 if (log.isDebugEnabled()) {
505 log.debug(this);
506 }
507 handler.beforeInit(this);
508 $objectMap.put("dbManagerTopPanel", dbManagerTopPanel);
509 createModel();
510 createBroker();
511 createInfoPanel();
512 createInformationArea();
513 createActions();
514 createOpenDbButton();
515 createInstallOrReinstallDbButton();
516 createImportDbButton();
517 createUpgradeDbButton();
518 createExportDbButton();
519
520 setName("dbManagerTopPanel");
521 setLayout(new BorderLayout());
522 dbManagerTopPanel.putClientProperty("help", "tutti.dbManager.help");
523
524
525 $registerDefaultBindings();
526 $completeSetup();
527 handler.afterInit(this);
528 }
529
530 private void $registerDefaultBindings() {
531
532 registerDataBinding(new DefaultJAXXBinding(this, BINDING_OPEN_DB_BUTTON_VISIBLE, true, true) {
533
534 @Override
535 public void applyDataBinding() {
536 if (model != null) {
537 model.addPropertyChangeListener("dbExist", this);
538 }
539 if (model != null) {
540 model.addPropertyChangeListener("dbLoaded", this);
541 }
542 }
543
544 @Override
545 public void processDataBinding() {
546 if (model != null) {
547 openDbButton.setVisible(model.isDbExist() && !model.isDbLoaded());
548 }
549 }
550
551 @Override
552 public void removeDataBinding() {
553 if (model != null) {
554 model.removePropertyChangeListener("dbExist", this);
555 }
556 if (model != null) {
557 model.removePropertyChangeListener("dbLoaded", this);
558 }
559 }
560 });
561 registerDataBinding(new DefaultJAXXBinding(this, BINDING_INSTALL_OR_REINSTALL_DB_BUTTON_TEXT, true) {
562
563 @Override
564 public void applyDataBinding() {
565 if (model != null) {
566 model.addPropertyChangeListener("dbExist", this);
567 }
568 }
569
570 @Override
571 public void processDataBinding() {
572 if (model != null) {
573 installOrReinstallDbButton.setText(t(handler.getInstallButtonText(model.isDbExist())));
574 }
575 }
576
577 @Override
578 public void removeDataBinding() {
579 if (model != null) {
580 model.removePropertyChangeListener("dbExist", this);
581 }
582 }
583 });
584 registerDataBinding(new DefaultJAXXBinding(this, BINDING_INSTALL_OR_REINSTALL_DB_BUTTON_TOOL_TIP_TEXT, true) {
585
586 @Override
587 public void applyDataBinding() {
588 if (model != null) {
589 model.addPropertyChangeListener("dbExist", this);
590 }
591 }
592
593 @Override
594 public void processDataBinding() {
595 if (model != null) {
596 installOrReinstallDbButton.setToolTipText(t(handler.getInstallButtonTip(model.isDbExist())));
597 }
598 }
599
600 @Override
601 public void removeDataBinding() {
602 if (model != null) {
603 model.removePropertyChangeListener("dbExist", this);
604 }
605 }
606 });
607 registerDataBinding(new DefaultJAXXBinding(this, BINDING_UPGRADE_DB_BUTTON_VISIBLE, true) {
608
609 @Override
610 public void applyDataBinding() {
611 if (model != null) {
612 model.addPropertyChangeListener("dbLoaded", this);
613 }
614 }
615
616 @Override
617 public void processDataBinding() {
618 if (model != null) {
619 upgradeDbButton.setVisible(model.isDbLoaded());
620 }
621 }
622
623 @Override
624 public void removeDataBinding() {
625 if (model != null) {
626 model.removePropertyChangeListener("dbLoaded", this);
627 }
628 }
629 });
630 registerDataBinding(new DefaultJAXXBinding(this, BINDING_EXPORT_DB_BUTTON_VISIBLE, true) {
631
632 @Override
633 public void applyDataBinding() {
634 if (model != null) {
635 model.addPropertyChangeListener("dbLoaded", this);
636 }
637 }
638
639 @Override
640 public void processDataBinding() {
641 if (model != null) {
642 exportDbButton.setVisible(model.isDbLoaded());
643 }
644 }
645
646 @Override
647 public void removeDataBinding() {
648 if (model != null) {
649 model.removePropertyChangeListener("dbLoaded", this);
650 }
651 }
652 });
653 }
654
655 }