rrenkert@243: /* rrenkert@243: * Copyright (c) 2011 by Intevation GmbH, Germany rrenkert@243: * rrenkert@243: * This file is part of MXD2map. rrenkert@243: * rrenkert@243: * This program is free software under the LGPL (>=v2.1) rrenkert@243: * Read the file LICENCE.txt coming with the software for details rrenkert@243: * or visit http://www.gnu.org/licenses/ if it does not exist. rrenkert@243: * rrenkert@243: * MXD2map has been developed on behalf of the rrenkert@243: * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg rrenkert@243: * by Intevation GmbH. rrenkert@243: * rrenkert@243: * Authors: rrenkert@243: * Raimund Renkert rrenkert@243: * Bjoern Schilberg rrenkert@243: * Stephan Holl rrenkert@243: */ rrenkert@243: rrenkert@33: package de.intevation.mxd.reader; rrenkert@25: rrenkert@42: import java.awt.Color; rrenkert@42: rrenkert@25: import org.apache.log4j.Logger; rrenkert@25: rrenkert@25: import com.esri.arcgis.display.ISymbol; rrenkert@75: import com.esri.arcgis.display.IMarkerSymbol; rrenkert@25: import com.esri.arcgis.display.SimpleMarkerSymbol; rrenkert@25: import com.esri.arcgis.display.esriSimpleMarkerStyle; rrenkert@25: import com.esri.arcgis.display.IRgbColor; rrenkert@25: import com.esri.arcgis.display.RgbColor; rrenkert@25: rrenkert@31: import org.w3c.dom.Element; rrenkert@115: import java.io.IOException; rrenkert@33: rrenkert@25: /** rrenkert@25: * Reads simple marker symbol information. rrenkert@25: * rrenkert@25: * @author Raimund Renkert rrenkert@25: */ rrenkert@70: public class SimpleMarkerSymbolReader rrenkert@85: extends AbstractSymbolReader { rrenkert@25: rrenkert@31: /** rrenkert@31: * The logger. rrenkert@31: */ rrenkert@31: private static final Logger logger = rrenkert@31: Logger.getLogger(SimpleMarkerSymbolReader.class); rrenkert@25: rrenkert@31: /** rrenkert@31: * Private member. rrenkert@31: */ rrenkert@25: private SimpleMarkerSymbol symbol; rrenkert@25: rrenkert@181: /** rrenkert@181: * Constructor with symbol. rrenkert@181: * rrenkert@181: * @param symbol The symbol used to display points. rrenkert@181: */ rrenkert@75: public SimpleMarkerSymbolReader(ISymbol symbol) rrenkert@75: throws Exception { aheinecke@336: logger.debug("constructor()"); rrenkert@75: if(symbol instanceof SimpleMarkerSymbol) { rrenkert@75: this.symbol = (SimpleMarkerSymbol)symbol; rrenkert@75: } rrenkert@75: else { rrenkert@75: throw new Exception("Not a SimpleMarkerSymbol!"); rrenkert@75: } rrenkert@75: } rrenkert@31: rrenkert@181: /** rrenkert@181: * Constructor with symbol. rrenkert@181: * rrenkert@181: * @param symbol The marker symbol used to display points. rrenkert@181: */ rrenkert@75: public SimpleMarkerSymbolReader(IMarkerSymbol symbol) rrenkert@43: throws Exception { aheinecke@336: logger.debug("constructor()"); rrenkert@43: if(symbol instanceof SimpleMarkerSymbol) { rrenkert@25: this.symbol = (SimpleMarkerSymbol)symbol; rrenkert@43: } rrenkert@43: else { rrenkert@25: throw new Exception("Not a SimpleMarkerSymbol!"); rrenkert@43: } rrenkert@25: } rrenkert@25: rrenkert@31: /** rrenkert@31: * Reads the symbol attributes. rrenkert@31: * rrenkert@31: * @return The XML node. rrenkert@31: */ rrenkert@115: public Element read() { rrenkert@25: logger.debug("read()"); rrenkert@74: Element symbolElement = util.addSymbol(parent); rrenkert@25: rrenkert@115: try { rrenkert@115: symbolElement.setAttribute("name", symbol.getNameString()); rrenkert@25: } rrenkert@115: catch(IOException ioe) { rrenkert@115: logger.warn("Could not read name. Setting name to \"default\"."); rrenkert@115: symbolElement.setAttribute("name", "default"); rrenkert@31: } rrenkert@31: rrenkert@115: try { rrenkert@115: if(symbol.getStyle() == esriSimpleMarkerStyle.esriSMSCircle) rrenkert@115: symbolElement.setAttribute("style", "point"); rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read marker style."); rrenkert@115: } rrenkert@115: rrenkert@115: try { rrenkert@115: if(symbol.getColor() instanceof IRgbColor) { rrenkert@115: IRgbColor color = (IRgbColor)symbol.getColor(); rrenkert@115: Color c = new Color ( rrenkert@115: color.getRed(), rrenkert@115: color.getGreen(), rrenkert@115: color.getBlue()); rrenkert@115: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@115: symbolElement.setAttribute("transparency", rrenkert@115: String.valueOf(color.getTransparency())); rrenkert@115: } rrenkert@115: else { rrenkert@115: RgbColor col = new RgbColor(); rrenkert@115: col.setRGB(symbol.getColor().getRGB()); rrenkert@115: Color c = new Color ( rrenkert@115: col.getRed(), rrenkert@115: col.getGreen(), rrenkert@115: col.getBlue()); rrenkert@115: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@115: symbolElement.setAttribute("transparency", rrenkert@115: String.valueOf(col.getTransparency())); rrenkert@115: } rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read color."); rrenkert@115: } rrenkert@115: rrenkert@115: try { rrenkert@42: symbolElement.setAttribute( rrenkert@115: "size", rrenkert@115: String.valueOf(symbol.getSize())); rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@115: logger.warn("Could not read size. Setting size to 1."); rrenkert@115: symbolElement.setAttribute("size", "1"); rrenkert@115: } rrenkert@115: rrenkert@115: try { rrenkert@115: symbolElement.setAttribute( rrenkert@115: "outline_size", rrenkert@115: String.valueOf(symbol.getOutlineSize())); rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@115: logger.warn( rrenkert@135: "Could not read outline size."); rrenkert@115: } rrenkert@115: rrenkert@115: try { rrenkert@115: if(symbol.getOutlineColor() instanceof IRgbColor) { rrenkert@115: IRgbColor color = (IRgbColor)symbol.getOutlineColor(); rrenkert@115: Color c = new Color ( rrenkert@115: color.getRed(), rrenkert@115: color.getGreen(), rrenkert@115: color.getBlue()); rrenkert@115: symbolElement.setAttribute( rrenkert@115: "outline_color", rrenkert@115: String.valueOf(c.getRGB())); rrenkert@115: symbolElement.setAttribute("outline_transparency", rrenkert@115: String.valueOf(color.getTransparency())); rrenkert@115: } rrenkert@115: else { rrenkert@115: RgbColor col = new RgbColor(); rrenkert@115: col.setRGB(symbol.getOutlineColor().getRGB()); rrenkert@115: Color c = new Color ( rrenkert@115: col.getRed(), rrenkert@115: col.getGreen(), rrenkert@115: col.getBlue()); rrenkert@115: symbolElement.setAttribute( rrenkert@42: "outline_color", rrenkert@42: String.valueOf(c.getRGB())); rrenkert@115: symbolElement.setAttribute("outline_transparency", rrenkert@115: String.valueOf(col.getTransparency())); rrenkert@115: } rrenkert@31: } rrenkert@115: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read outline color."); rrenkert@25: } rrenkert@25: rrenkert@115: try { rrenkert@115: symbolElement.setAttribute( rrenkert@115: "angle", rrenkert@115: String.valueOf(symbol.getAngle())); rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read angle."); rrenkert@115: } rrenkert@115: rrenkert@115: try { rrenkert@115: symbolElement.setAttribute( rrenkert@115: "offset", rrenkert@115: symbol.getXOffset() + "," + symbol.getYOffset()); rrenkert@115: } rrenkert@115: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read offset."); rrenkert@115: } rrenkert@115: rrenkert@89: symbolElement.setAttribute("type", "marker"); rrenkert@31: return symbolElement; rrenkert@25: } rrenkert@25: } rrenkert@25: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :