package org.openjump.core.ui.plugin.datastore; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.workbench.datastore.ConnectionDescriptor; import com.vividsolutions.jump.workbench.model.Layer; import com.vividsolutions.jump.workbench.model.Layerable; import com.vividsolutions.jump.workbench.plugin.EnableCheck; import com.vividsolutions.jump.workbench.plugin.EnableCheckFactory; import com.vividsolutions.jump.workbench.plugin.MultiEnableCheck; import com.vividsolutions.jump.workbench.plugin.PlugInContext; import com.vividsolutions.jump.workbench.ui.MenuNames; import com.vividsolutions.jump.workbench.ui.OKCancelDialog; import com.vividsolutions.jump.workbench.ui.plugin.datastore.ConnectionPanel; import com.vividsolutions.jump.workbench.ui.plugin.datastore.DataStoreQueryDataSource; import com.vividsolutions.jump.workbench.ui.plugin.datastore.RunDatastoreQueryPanel; import com.vividsolutions.jump.workbench.ui.plugin.datastore.RunDatastoreQueryPlugIn; import com.vividsolutions.jump.workbench.ui.plugin.FeatureInstaller; import com.vividsolutions.jump.workbench.WorkbenchContext; import java.util.Collection; import java.util.Map; import javax.swing.DefaultComboBoxModel; import javax.swing.ImageIcon; import javax.swing.JPopupMenu; import org.openjump.core.ui.images.IconLoader; /** * <code>EditDatastoreQueryPlugIn</code> load the query used to create a layer * in the RunDatastoreQueryPanel. * * @author <a href="mailto:michael.michaud@free.fr">Michaël Michaud</a> */ public class EditDataStoreQueryPlugIn extends RunDatastoreQueryPlugIn { public static final ImageIcon ICON = IconLoader.icon("arrow_edit_sql.png"); public static final String SQL_QUERY_KEY = "SQL Query"; public static final String CONNECTION_DESCRIPTOR_KEY = "Connection Descriptor"; protected final static int MAIN_COLUMN_WIDTH = 400; Map properties; public void initialize(PlugInContext context) throws Exception { WorkbenchContext workbenchContext = context.getWorkbenchContext(); EnableCheck enableCheck = createEnableCheck(workbenchContext); FeatureInstaller installer = new FeatureInstaller(workbenchContext); JPopupMenu popupMenu = workbenchContext.getWorkbench().getFrame().getLayerNamePopupMenu(); installer.addPopupMenuItem(popupMenu, this, new String[]{MenuNames.DATASTORE}, getName(), false, ICON, enableCheck); } public String getName() { return I18N.get("org.openjump.core.ui.plugin.datastore.EditDataStoreQueryPlugIn.Edit-datastore-query"); } public boolean execute(final PlugInContext context) throws Exception { Layer layer = context.getLayerNamePanel().getSelectedLayers()[0]; properties = layer.getDataSourceQuery().getDataSource().getProperties(); RunDatastoreQueryPanel panel = (RunDatastoreQueryPanel)panel(context); panel.populateConnectionComboBox(); panel.setQuery((String)properties.get(SQL_QUERY_KEY)); panel.setLayerName(context.getLayerManager().uniqueLayerName(layer.getName())); OKCancelDialog dlg = getDialog(context); dlg.setVisible(true); return dlg.wasOKPressed(); } protected ConnectionPanel createPanel(final PlugInContext context) { final ConnectionDescriptor connectionDescriptor = (ConnectionDescriptor)properties.get(CONNECTION_DESCRIPTOR_KEY); RunDatastoreQueryPanel panel = new RunDatastoreQueryPanel(context.getWorkbenchContext()) { public void populateConnectionComboBox() { Collection descriptors = connectionDescriptors(); if (!descriptors.contains(connectionDescriptor)) { descriptors.add(connectionDescriptor); } getConnectionComboBox().setModel(new DefaultComboBoxModel( sortByString(descriptors.toArray()))); getConnectionComboBox().setSelectedItem(connectionDescriptor); //setQuery((String)properties.get(SQL_QUERY_KEY)); //setLayerName(context.getLayerManager().uniqueLayerName( // context.getLayerNamePanel().getSelectedLayers()[0].getName())); } }; return panel; } /** * @param workbenchContext * @return an enable check */ public EnableCheck createEnableCheck(WorkbenchContext workbenchContext) { final WorkbenchContext wc = workbenchContext; EnableCheckFactory enableCheckFactory = new EnableCheckFactory(workbenchContext); MultiEnableCheck enableCheck = new MultiEnableCheck(); enableCheck.add(enableCheckFactory.createWindowWithLayerManagerMustBeActiveCheck()); enableCheck.add(enableCheckFactory.createExactlyNLayerablesMustBeSelectedCheck(1, Layerable.class)); enableCheck.add(new EnableCheck(){ public String check(javax.swing.JComponent component) { Layer[] selectedLayers = wc.getLayerNamePanel().getSelectedLayers(); for (Layer layer : selectedLayers) { if (layer.getDataSourceQuery() == null || !(layer.getDataSourceQuery().getDataSource() instanceof DataStoreQueryDataSource)) { return I18N.get("org.openjump.core.ui.plugin.datastore.EditDataStoreQueryPlugIn.Exactly-one-datastore-query-layer-must-be-selected"); } } return null; } }); return enableCheck; } }