package com.vividsolutions.jump.workbench.ui.toolbox; import com.vividsolutions.jump.feature.FeatureCollection; import com.vividsolutions.jump.workbench.model.Layer; import com.vividsolutions.jump.workbench.model.LayerManagerProxy; import com.vividsolutions.jump.workbench.model.LayerStyleUtil; import com.vividsolutions.jump.workbench.plugin.PlugInContext; import com.vividsolutions.jump.workbench.plugin.ThreadedBasePlugIn; import com.vividsolutions.jump.workbench.ui.plugin.AddNewLayerPlugIn; import java.awt.Color; import java.awt.Component; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; /** * Convenience superclass used in toolboxes that have one primary button. */ public abstract class MainButtonPlugIn extends ThreadedBasePlugIn { public static final String GENERATED_KEY = MainButtonPlugIn.class.getName() + " - GENERATED"; private String taskMonitorTitle; private Component toolboxPanel; public MainButtonPlugIn(String taskMonitorTitle, Component toolboxPanel) { this.taskMonitorTitle = taskMonitorTitle; this.toolboxPanel = toolboxPanel; } public String getName() { return taskMonitorTitle; } protected Layer generateLayer(String name, String category, Color color, LayerManagerProxy proxy, FeatureCollection featureCollection, String description) { return generateLayer(false, name, category, color, proxy, featureCollection, description); } protected Layer generateLineLayer(String name, String category, Color color, LayerManagerProxy proxy, FeatureCollection featureCollection, String description) { return generateLayer(true, name, category, color, proxy, featureCollection, description); } private Layer generateLayer(boolean line, String name, String category, Color color, LayerManagerProxy proxy, FeatureCollection featureCollection, String description) { Layer layer = proxy.getLayerManager().getLayer(name); if (layer == null) { layer = new Layer(name, color, featureCollection, proxy.getLayerManager()); proxy.getLayerManager().addLayer(category, layer); layer.setVisible(false); if (line) { LayerStyleUtil.setLinearStyle(layer, color, 2, 4); } } else { layer.setFeatureCollection(featureCollection); } layer.setDescription(description); //May have been loaded from a file [Jon Aquino] layer.getBlackboard().put(GENERATED_KEY, new Object()); return layer; } public boolean execute(PlugInContext context) throws Exception { if (validateInput() != null) { reportValidationError(validateInput()); } return validateInput() == null; } private void reportValidationError(String errorMessage) { JOptionPane.showMessageDialog(SwingUtilities.windowForComponent( toolboxPanel), errorMessage, "JUMP", JOptionPane.ERROR_MESSAGE); } protected void removeAndDisposeLayer(String name, PlugInContext context) { Layer layer = context.getLayerManager().getLayer(name); if (layer == null) { return; } context.getLayerManager().remove(layer); layer.dispose(); } public abstract String validateInput(); }