rrenkert@75: package de.intevation.mxd.reader; rrenkert@75: rrenkert@75: import java.io.IOException; rrenkert@75: rrenkert@75: import java.awt.Color; rrenkert@75: rrenkert@75: import org.apache.log4j.Logger; rrenkert@75: rrenkert@75: import com.esri.arcgis.display.ISymbol; rrenkert@75: import com.esri.arcgis.display.IFillSymbol; rrenkert@75: import com.esri.arcgis.display.ILineSymbol; rrenkert@75: import com.esri.arcgis.display.IMarkerSymbol; rrenkert@75: import com.esri.arcgis.display.MarkerFillSymbol; rrenkert@75: import com.esri.arcgis.display.esriSimpleFillStyle; rrenkert@75: import com.esri.arcgis.display.MultiLayerMarkerSymbol; rrenkert@75: import com.esri.arcgis.display.IRgbColor; rrenkert@75: import com.esri.arcgis.display.RgbColor; rrenkert@75: rrenkert@75: import org.w3c.dom.Element; rrenkert@75: import de.intevation.mxd.utils.MapToXMLUtils; rrenkert@75: rrenkert@75: /** rrenkert@75: * Reads marker line symbol information. rrenkert@75: * rrenkert@75: * @author Raimund Renkert rrenkert@75: */ rrenkert@80: public class MarkerFillSymbolReader rrenkert@80: extends AbstractSymbolReader{ rrenkert@75: rrenkert@75: /** rrenkert@75: * The logger. rrenkert@75: */ rrenkert@75: private static final Logger logger = rrenkert@75: Logger.getLogger(MarkerFillSymbolReader.class); rrenkert@75: rrenkert@75: /** rrenkert@75: * Private member. rrenkert@75: */ rrenkert@75: private MarkerFillSymbol symbol; rrenkert@75: rrenkert@75: public MarkerFillSymbolReader(ISymbol symbol) rrenkert@75: throws Exception { rrenkert@75: logger.debug("contructor()"); rrenkert@75: if(symbol instanceof MarkerFillSymbol) { rrenkert@75: this.symbol = (MarkerFillSymbol)symbol; rrenkert@75: } rrenkert@75: else { rrenkert@75: throw new Exception("Not a MarkerFillSymbol!"); rrenkert@75: } rrenkert@75: } rrenkert@75: rrenkert@75: rrenkert@75: public MarkerFillSymbolReader(IFillSymbol symbol) rrenkert@75: throws Exception { rrenkert@75: logger.debug("contructor()"); rrenkert@75: if(symbol instanceof MarkerFillSymbol) { rrenkert@75: this.symbol = (MarkerFillSymbol)symbol; rrenkert@75: } rrenkert@75: else { rrenkert@75: throw new Exception("Not a MarkerFillSymbol!"); rrenkert@75: } rrenkert@75: } rrenkert@75: rrenkert@75: /** rrenkert@75: * Reads the symbol attributes. rrenkert@75: * rrenkert@75: * @return The XML node. rrenkert@75: */ rrenkert@75: public Element read() rrenkert@75: throws Exception { rrenkert@75: logger.debug("read()"); rrenkert@75: rrenkert@80: Element symbolElement = util.addSymbol(parent); rrenkert@75: rrenkert@75: symbolElement.setAttribute("name", symbol.getNameString()); rrenkert@75: symbolElement.setAttribute("style", "fill"); rrenkert@75: symbolElement.setAttribute( rrenkert@75: "xoffset", rrenkert@75: String.valueOf(symbol.getXOffset())); rrenkert@75: symbolElement.setAttribute( rrenkert@75: "yoffset", rrenkert@75: String.valueOf(symbol.getYOffset())); rrenkert@75: symbolElement.setAttribute( rrenkert@75: "xseparation", rrenkert@75: String.valueOf(symbol.getXSeparation())); rrenkert@75: symbolElement.setAttribute( rrenkert@75: "yseparation", rrenkert@75: String.valueOf(symbol.getYSeparation())); rrenkert@75: rrenkert@75: int style = symbol.getStyle(); rrenkert@75: switch(style) { rrenkert@75: case esriSimpleFillStyle.esriSFSCross: rrenkert@75: symbolElement.setAttribute("fillstyle", "cross"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSSolid: rrenkert@75: symbolElement.setAttribute("fillstyle", "solid"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSVertical: rrenkert@75: symbolElement.setAttribute("fillstyle", "vertical"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSHorizontal: rrenkert@75: symbolElement.setAttribute("fillstyle", "horizontal"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSForwardDiagonal: rrenkert@75: symbolElement.setAttribute("fillstyle", "fwdiagonal"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSBackwardDiagonal: rrenkert@75: symbolElement.setAttribute("fillstyle", "bwdiagonal"); break; rrenkert@75: case esriSimpleFillStyle.esriSFSDiagonalCross: rrenkert@75: symbolElement.setAttribute("fillstyle", "diagonalcross"); rrenkert@75: break; rrenkert@75: default: symbolElement.setAttribute("fillstyle", "empty"); rrenkert@75: } rrenkert@75: rrenkert@75: if(symbol.getColor() instanceof IRgbColor) { rrenkert@75: IRgbColor color = (IRgbColor)symbol.getColor(); rrenkert@75: Color c = new Color ( rrenkert@75: color.getRed(), rrenkert@75: color.getGreen(), rrenkert@75: color.getBlue()); rrenkert@75: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@75: symbolElement.setAttribute("transparency", rrenkert@75: String.valueOf(color.getTransparency())); rrenkert@75: } rrenkert@75: else { rrenkert@75: RgbColor col = new RgbColor(); rrenkert@75: col.setRGB(symbol.getColor().getRGB()); rrenkert@75: Color c = new Color ( rrenkert@75: col.getRed(), rrenkert@75: col.getGreen(), rrenkert@75: col.getBlue()); rrenkert@75: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@75: symbolElement.setAttribute("transparency", rrenkert@75: String.valueOf(col.getTransparency())); rrenkert@75: } rrenkert@75: rrenkert@75: ILineSymbol ls = symbol.getOutline(); rrenkert@75: LineSymbolReader lsr = new LineSymbolReader(); rrenkert@75: if(lsr.canRead(ls)) { rrenkert@75: lsr.setSymbol(ls); rrenkert@75: lsr.setUtil(util); rrenkert@75: lsr.setParent(symbolElement); rrenkert@75: lsr.read(); rrenkert@75: } rrenkert@75: else { rrenkert@75: logger.debug("The type of " + ls.getClass().toString() + rrenkert@75: " is not implemented!"); rrenkert@75: } rrenkert@75: rrenkert@75: IMarkerSymbol sym = symbol.getMarkerSymbol(); rrenkert@75: MarkerSymbolReader msr = new MarkerSymbolReader(); rrenkert@75: if(msr.canRead(sym)) { rrenkert@75: msr.setSymbol(sym); rrenkert@75: msr.setParent(symbolElement); rrenkert@75: msr.setUtil(util); rrenkert@75: msr.read(); rrenkert@75: } rrenkert@75: else { rrenkert@75: logger.debug("The type of " + sym.getClass().toString() + rrenkert@75: " is not implemented!"); rrenkert@75: } rrenkert@80: return parent; rrenkert@75: } rrenkert@75: } rrenkert@75: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :