rrenkert@36: package de.intevation.mxd.reader; rrenkert@36: rrenkert@36: import java.io.IOException; rrenkert@68: import java.awt.Color; rrenkert@36: rrenkert@36: import org.apache.log4j.Logger; rrenkert@36: rrenkert@36: import com.esri.arcgis.display.ISymbol; rrenkert@68: import com.esri.arcgis.display.ILineSymbol; rrenkert@36: import com.esri.arcgis.display.SimpleFillSymbol; rrenkert@68: import com.esri.arcgis.display.MultiLayerLineSymbol; rrenkert@68: import com.esri.arcgis.display.SimpleLineSymbol; rrenkert@68: import com.esri.arcgis.display.MarkerLineSymbol; rrenkert@68: import com.esri.arcgis.display.PictureLineSymbol; rrenkert@68: import com.esri.arcgis.display.CartographicLineSymbol; rrenkert@68: import com.esri.arcgis.display.HashLineSymbol; rrenkert@68: import com.esri.arcgis.display.MultiLayerFillSymbol; rrenkert@68: import com.esri.arcgis.display.esriSimpleFillStyle; rrenkert@36: import com.esri.arcgis.display.IRgbColor; rrenkert@36: import com.esri.arcgis.display.RgbColor; rrenkert@36: rrenkert@36: import org.w3c.dom.Element; rrenkert@36: rrenkert@36: import de.intevation.mxd.utils.MapToXMLUtils; rrenkert@36: rrenkert@36: /** rrenkert@36: * Reads simple marker symbol information. rrenkert@36: * rrenkert@36: * @author Raimund Renkert rrenkert@36: */ rrenkert@43: public class SimpleFillSymbolReader rrenkert@43: implements ISymbolReader { rrenkert@36: rrenkert@36: /** rrenkert@36: * The logger. rrenkert@36: */ rrenkert@36: private static final Logger logger = rrenkert@36: Logger.getLogger(SimpleFillSymbolReader.class); rrenkert@36: rrenkert@36: /** rrenkert@36: * Private member. rrenkert@36: */ rrenkert@36: private Element renderer; rrenkert@36: private SimpleFillSymbol symbol; rrenkert@36: private MapToXMLUtils util; rrenkert@36: rrenkert@36: rrenkert@36: public SimpleFillSymbolReader(ISymbol symbol) throws Exception{ rrenkert@36: logger.debug("contructor()"); rrenkert@43: if(symbol instanceof SimpleFillSymbol) { rrenkert@36: this.symbol = (SimpleFillSymbol)symbol; rrenkert@43: } rrenkert@43: else { rrenkert@36: throw new Exception("Not a SimpleFillSymbol!"); rrenkert@43: } rrenkert@36: } rrenkert@36: rrenkert@36: /** rrenkert@36: * Setter for the parent XML element. rrenkert@36: * rrenkert@36: * @param parent The XML parent node. rrenkert@36: */ rrenkert@36: public void setParent(Element parent) { rrenkert@36: this.renderer = parent; rrenkert@36: } rrenkert@36: rrenkert@36: /** rrenkert@36: * Setter for XML document helper. rrenkert@36: * rrenkert@36: * @param util The helper class for storing map information. rrenkert@36: */ rrenkert@36: public void setUtil(MapToXMLUtils util) { rrenkert@36: this.util = util; rrenkert@36: } rrenkert@36: rrenkert@36: /** rrenkert@36: * Reads the symbol attributes. rrenkert@36: * rrenkert@36: * @return The XML node. rrenkert@36: */ rrenkert@36: public Element read() rrenkert@36: throws IOException { rrenkert@36: logger.debug("read()"); rrenkert@36: Element symbolElement; rrenkert@36: try { rrenkert@36: symbolElement = util.addSymbol(renderer); rrenkert@36: } rrenkert@36: catch(Exception e) { rrenkert@36: e.printStackTrace(); rrenkert@36: return null; rrenkert@36: } rrenkert@36: rrenkert@36: symbolElement.setAttribute("name", symbol.getNameString()); rrenkert@68: symbolElement.setAttribute("style", "fill"); rrenkert@68: int style = symbol.getStyle(); rrenkert@68: switch(style) { rrenkert@68: case esriSimpleFillStyle.esriSFSCross: rrenkert@68: symbolElement.setAttribute("fillstyle", "cross"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSSolid: rrenkert@68: symbolElement.setAttribute("fillstyle", "solid"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSVertical: rrenkert@68: symbolElement.setAttribute("fillstyle", "vertical"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSHorizontal: rrenkert@68: symbolElement.setAttribute("fillstyle", "horizontal"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSForwardDiagonal: rrenkert@68: symbolElement.setAttribute("fillstyle", "fwdiagonal"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSBackwardDiagonal: rrenkert@68: symbolElement.setAttribute("fillstyle", "bwdiagonal"); break; rrenkert@68: case esriSimpleFillStyle.esriSFSDiagonalCross: rrenkert@68: symbolElement.setAttribute("fillstyle", "diagonalcross"); rrenkert@68: break; rrenkert@68: default: symbolElement.setAttribute("fillstyle", "empty"); rrenkert@43: } rrenkert@36: rrenkert@36: if(symbol.getColor() instanceof IRgbColor) { rrenkert@36: IRgbColor color = (IRgbColor)symbol.getColor(); rrenkert@68: Color c = new Color ( rrenkert@68: color.getRed(), rrenkert@68: color.getGreen(), rrenkert@68: color.getBlue()); rrenkert@68: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@36: symbolElement.setAttribute("transparency", rrenkert@36: String.valueOf(color.getTransparency())); rrenkert@36: } rrenkert@36: else { rrenkert@36: RgbColor col = new RgbColor(); rrenkert@36: col.setRGB(symbol.getColor().getRGB()); rrenkert@68: Color c = new Color ( rrenkert@68: col.getRed(), rrenkert@68: col.getGreen(), rrenkert@68: col.getBlue()); rrenkert@68: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@36: symbolElement.setAttribute("transparency", rrenkert@36: String.valueOf(col.getTransparency())); rrenkert@36: } rrenkert@68: rrenkert@68: try { rrenkert@68: ILineSymbol ls = symbol.getOutline(); rrenkert@68: if(ls instanceof MultiLayerLineSymbol) { rrenkert@68: ISymbolReader sreader = new MultiLayerLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else if(ls instanceof SimpleLineSymbol) { rrenkert@68: ISymbolReader sreader = new SimpleLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else if(ls instanceof MarkerLineSymbol) { rrenkert@68: ISymbolReader sreader = new MarkerLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else if(ls instanceof PictureLineSymbol) { rrenkert@68: ISymbolReader sreader = new PictureLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else if(ls instanceof CartographicLineSymbol) { rrenkert@68: ISymbolReader sreader = new CartoLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else if(ls instanceof HashLineSymbol) { rrenkert@68: ISymbolReader sreader = new HashLineSymbolReader(ls); rrenkert@68: sreader.setParent(symbolElement); rrenkert@68: sreader.setUtil(util); rrenkert@68: sreader.read(); rrenkert@68: } rrenkert@68: else { rrenkert@68: logger.debug("The type of " + ls.getClass().toString() + rrenkert@68: " is not implemented!"); rrenkert@68: System.out.println( rrenkert@68: "No known instance: " + ls.getClass().toString()); rrenkert@68: } rrenkert@68: } rrenkert@68: catch(Exception e) { rrenkert@68: e.printStackTrace(); rrenkert@68: } rrenkert@68: rrenkert@36: return symbolElement; rrenkert@36: } rrenkert@36: } rrenkert@36: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :