01: package com.vividsolutions.jump.workbench.ui.plugin.datastore;
02:
03: import java.awt.Component;
04: import java.util.Collection;
05:
06: import javax.swing.SwingUtilities;
07:
08: import com.vividsolutions.jump.task.TaskMonitor;
09: import com.vividsolutions.jump.workbench.model.Layerable;
10: import com.vividsolutions.jump.workbench.model.StandardCategoryNames;
11: import com.vividsolutions.jump.workbench.plugin.PlugInContext;
12: import com.vividsolutions.jump.workbench.plugin.ThreadedBasePlugIn;
13: import com.vividsolutions.jump.workbench.ui.GUIUtil;
14: import com.vividsolutions.jump.workbench.ui.OKCancelDialog;
15:
16: public abstract class AbstractAddDatastoreLayerPlugIn extends
17: ThreadedBasePlugIn {
18:
19: public boolean execute(final PlugInContext context)
20: throws Exception {
21: // The user may have added connections using the Connection Manager
22: // Toolbox. So refresh the connectionComboBox.
23: // [Jon Aquino 2005-03-15]
24: panel(context).populateConnectionComboBox();
25: OKCancelDialog dlg = getDialog(context);
26: dlg.setVisible(true);
27:
28: return dlg.wasOKPressed();
29: }
30:
31: public void run(TaskMonitor monitor, final PlugInContext context)
32: throws Exception {
33: final Layerable layer = createLayerable(panel(context),
34: monitor, context);
35: SwingUtilities.invokeLater(new Runnable() {
36:
37: public void run() {
38: Collection selectedCategories = context
39: .getLayerNamePanel().getSelectedCategories();
40: context
41: .getLayerManager()
42: .addLayerable(
43: selectedCategories.isEmpty() ? StandardCategoryNames.WORKING
44: : selectedCategories.iterator()
45: .next().toString(),
46: layer);
47: }
48: });
49: }
50:
51: protected abstract Layerable createLayerable(ConnectionPanel panel,
52: TaskMonitor monitor, PlugInContext context)
53: throws Exception;
54:
55: private OKCancelDialog getDialog(PlugInContext context) {
56: if (dialog == null) {
57: // Cache the dialog between invocations of this menu item,
58: // to preserve the dialog's useful cache of dataset names.
59: // [Jon Aquino 2005-03-11]
60: dialog = createDialog(context);
61: }
62: return dialog;
63: }
64:
65: protected ConnectionPanel panel(PlugInContext context) {
66: return (ConnectionPanel) getDialog(context)
67: .getCustomComponent();
68: }
69:
70: private OKCancelDialog dialog;
71:
72: private OKCancelDialog createDialog(PlugInContext context) {
73: OKCancelDialog dialog = new OKCancelDialog(context
74: .getWorkbenchFrame(), getName(), true,
75: createPanel(context), new OKCancelDialog.Validator() {
76: public String validateInput(Component component) {
77: return ((ConnectionPanel) component)
78: .validateInput();
79: }
80: });
81: dialog.pack();
82: GUIUtil.centreOnWindow(dialog);
83: return dialog;
84: }
85:
86: protected abstract ConnectionPanel createPanel(PlugInContext context);
87: }
|