package com.vividsolutions.jump.workbench.ui.plugin.datastore;
import java.awt.Component;
import java.util.Collection;
import javax.swing.SwingUtilities;
import com.vividsolutions.jump.task.TaskMonitor;
import com.vividsolutions.jump.workbench.model.Layerable;
import com.vividsolutions.jump.workbench.model.StandardCategoryNames;
import com.vividsolutions.jump.workbench.plugin.PlugInContext;
import com.vividsolutions.jump.workbench.plugin.ThreadedBasePlugIn;
import com.vividsolutions.jump.workbench.ui.GUIUtil;
import com.vividsolutions.jump.workbench.ui.OKCancelDialog;
import org.openjump.core.ui.plugin.AbstractThreadedUiPlugIn;
public abstract class AbstractAddDatastoreLayerPlugIn extends
AbstractThreadedUiPlugIn {
public boolean execute(final PlugInContext context) throws Exception {
// The user may have added connections using the Connection Manager
// Toolbox. So refresh the connectionComboBox.
// [Jon Aquino 2005-03-15]
panel(context).populateConnectionComboBox();
OKCancelDialog dlg = getDialog(context);
dlg.setVisible(true);
return dlg.wasOKPressed();
}
public void run(TaskMonitor monitor, final PlugInContext context)
throws Exception {
final Layerable layer = createLayerable(panel(context), monitor,
context);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Collection selectedCategories = context.getLayerNamePanel()
.getSelectedCategories();
context
.getLayerManager()
.addLayerable(
selectedCategories.isEmpty() ? StandardCategoryNames.WORKING
: selectedCategories.iterator().next()
.toString(), layer);
}
});
}
protected abstract Layerable createLayerable(ConnectionPanel panel,
TaskMonitor monitor, PlugInContext context) throws Exception;
protected OKCancelDialog getDialog(PlugInContext context) {
if (dialog == null) {
// Cache the dialog between invocations of this menu item,
// to preserve the dialog's useful cache of dataset names.
// [Jon Aquino 2005-03-11]
dialog = createDialog(context);
}
return dialog;
}
protected ConnectionPanel panel(PlugInContext context) {
return (ConnectionPanel) getDialog(context).getCustomComponent();
}
private OKCancelDialog dialog;
private OKCancelDialog createDialog(PlugInContext context) {
OKCancelDialog dialog = new OKCancelDialog(context.getWorkbenchFrame(),
getName(), true, createPanel(context),
new OKCancelDialog.Validator() {
public String validateInput(Component component) {
return ((ConnectionPanel) component).validateInput();
}
});
dialog.pack();
GUIUtil.centreOnWindow(dialog);
return dialog;
}
protected abstract ConnectionPanel createPanel(PlugInContext context);
}