package com.vividsolutions.jump.workbench.ui.style; import com.vividsolutions.jump.I18N; import com.vividsolutions.jump.feature.FeatureSchema; import com.vividsolutions.jump.workbench.WorkbenchContext; import com.vividsolutions.jump.workbench.model.Layer; import com.vividsolutions.jump.workbench.plugin.AbstractPlugIn; 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.images.IconLoader; import com.vividsolutions.jump.workbench.ui.renderer.style.ColorThemingStyle; import com.vividsolutions.jump.workbench.ui.renderer.style.LabelStyle; import com.vividsolutions.jump.workbench.ui.renderer.style.Style; import java.util.ArrayList; import java.util.Iterator; import javax.swing.ImageIcon; /** * Pastes the styles from the internal style paste buffer to a layer * @author Martin Davis * @version 1.0 */ public class PasteStylesPlugIn extends AbstractPlugIn { public static MultiEnableCheck createEnableCheck( final WorkbenchContext workbenchContext) { EnableCheckFactory checkFactory = new EnableCheckFactory(workbenchContext); return new MultiEnableCheck().add(checkFactory.createWindowWithLayerNamePanelMustBeActiveCheck()) .add(checkFactory.createAtLeastNLayersMustBeSelectedCheck(1)); } public PasteStylesPlugIn() { } public String getName() { return I18N.get("ui.style.PasteStylesPlugIn.paste-styles"); } public ImageIcon getIcon() { return IconLoader.icon("Palette_out.gif"); } public boolean execute(PlugInContext context) throws Exception { if (CopyStylesPlugIn.stylesBuffer == null) return false; Layer[] selectedLayers = context.getSelectedLayers(); for (int i = 0; i < selectedLayers.length; i++) { validateStyleForLayer(selectedLayers[i]); //throws exception if bad pasteStyles(selectedLayers[i]); } return true; } private void pasteStyles(Layer layer) { layer.setStyles(CopyStylesPlugIn.stylesBuffer); } private void validateStyleForLayer(Layer layer) { String attribName = ""; try { FeatureSchema featureSchema = layer.getFeatureCollectionWrapper().getFeatureSchema(); ArrayList<String> attribList = new ArrayList<String>(); for (Iterator i = CopyStylesPlugIn.stylesBuffer.iterator(); i.hasNext();) { Style style = (Style) i.next(); if (style instanceof LabelStyle) { LabelStyle labelStyle = (LabelStyle) style; if (labelStyle.isEnabled()) { attribName =labelStyle.getAttribute(); if (attribName != "") attribList.add(attribName); attribName =labelStyle.getAngleAttribute(); if (attribName != "") attribList.add(attribName); attribName =labelStyle.getHeightAttribute(); if (attribName != "") attribList.add(attribName); } } else if (style instanceof ColorThemingStyle) { ColorThemingStyle ctStyle = (ColorThemingStyle) style; if (ctStyle.isEnabled()) { attribName =ctStyle.getAttributeName(); if (attribName != "") attribList.add(attribName); } } } for (Iterator i = attribList.iterator(); i.hasNext();) { attribName = (String) i.next(); //check for attribute in Layer's FeatureSchema and throw exception now if not found. featureSchema.getAttributeIndex(attribName); } } catch (IllegalArgumentException ex){ throw new IllegalArgumentException("Attribute "+ attribName+ " not found on Layer: "+ layer.getName()); } } }