# HG changeset patch # User Raimund Renkert # Date 1306149402 -7200 # Node ID e00deee347a5176ed1701eaa220a9591b1ccc057 # Parent 37ff67a4991d008b49e6c3ee139fe1ca12b7bef4 Added first line symbol reader. diff -r 37ff67a4991d -r e00deee347a5 ChangeLog --- a/ChangeLog Fri May 20 16:27:25 2011 +0200 +++ b/ChangeLog Mon May 23 13:16:42 2011 +0200 @@ -1,3 +1,15 @@ +2011-05-23 Raimund Renkert + + Added first line symbol reader. + + * src/java/de/intevation/mxd/reader/SimpleRendererReader.java: + Read line symbols with the new MultiLayLineSymbolReader. + + * src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java, + src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java: + New. The MultiLayerLineSymbolReader reads lines from different layers + using the LineSymbolReader. + 2011-05-20 Raimund Renkert * src/java/de/intevation/mxd/reader/SimpleRendererReader.java: diff -r 37ff67a4991d -r e00deee347a5 src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java Mon May 23 13:16:42 2011 +0200 @@ -0,0 +1,102 @@ +package de.intevation.mxd.reader; + +import java.io.IOException; + +import java.awt.Color; + +import org.apache.log4j.Logger; + +import com.esri.arcgis.display.ISymbol; +import com.esri.arcgis.display.MultiLayerLineSymbol; +import com.esri.arcgis.display.SimpleLineSymbol; +import com.esri.arcgis.display.esriSimpleMarkerStyle; +import com.esri.arcgis.display.IRgbColor; +import com.esri.arcgis.display.RgbColor; + +import org.w3c.dom.Element; +import de.intevation.mxd.utils.MapToXMLUtils; + +/** + * Reads multi layer line symbol information. + * + * @author Raimund Renkert + */ +public class MultiLayerLineSymbolReader implements ISymbolReader{ + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(MultiLayerLineSymbolReader.class); + + /** + * Private member. + */ + private Element renderer; + private MultiLayerLineSymbol symbol; + private MapToXMLUtils util; + + + public MultiLayerLineSymbolReader(ISymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof MultiLayerLineSymbol) { + this.symbol = (MultiLayerLineSymbol)symbol; + } + else { + throw new Exception("Not a MultiLayerLineSymbol!"); + } + } + + /** + * Setter for the parent XML element. + * + * @param parent The XML parent node. + */ + public void setParent(Element parent) { + this.renderer = parent; + } + + /** + * Setter for XML document helper. + * + * @param util The helper class for storing map information. + */ + public void setUtil(MapToXMLUtils util) { + this.util = util; + } + + /** + * Reads the symbol attributes. + * + * @return The XML node. + */ + public Element read() + throws IOException { + logger.debug("read()"); + for(int i = 0; i < symbol.getLayerCount(); i++) { + try { + ISymbol sym = (ISymbol)symbol.getLayer(i); + + if(sym instanceof SimpleLineSymbol) { + ISymbolReader sreader = new SimpleLineSymbolReader(sym); + sreader.setParent(renderer); + sreader.setUtil(util); + sreader.read(); + } + else { + logger.debug("The type of " + sym.getClass().toString() + + " is not implemented!"); + System.out.println( + "No known instance: " + sym.getClass().toString()); + } + } + catch(Exception e) { + e.printStackTrace(); + return null; + } + } + return renderer; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 37ff67a4991d -r e00deee347a5 src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java Mon May 23 13:16:42 2011 +0200 @@ -0,0 +1,124 @@ +package de.intevation.mxd.reader; + +import java.io.IOException; + +import java.awt.Color; + +import org.apache.log4j.Logger; + +import com.esri.arcgis.display.ISymbol; +import com.esri.arcgis.display.SimpleLineSymbol; +import com.esri.arcgis.display.esriSimpleLineStyle; +import com.esri.arcgis.display.IRgbColor; +import com.esri.arcgis.display.RgbColor; + +import org.w3c.dom.Element; +import de.intevation.mxd.utils.MapToXMLUtils; + +/** + * Reads simple line symbol information. + * + * @author Raimund Renkert + */ +public class SimpleLineSymbolReader implements ISymbolReader{ + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(SimpleLineSymbolReader.class); + + /** + * Private member. + */ + private Element renderer; + private SimpleLineSymbol symbol; + private MapToXMLUtils util; + + + public SimpleLineSymbolReader(ISymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof SimpleLineSymbol) { + this.symbol = (SimpleLineSymbol)symbol; + } + else { + throw new Exception("Not a SimpleLineSymbol!"); + } + } + + /** + * Setter for the parent XML element. + * + * @param parent The XML parent node. + */ + public void setParent(Element parent) { + this.renderer = parent; + } + + /** + * Setter for XML document helper. + * + * @param util The helper class for storing map information. + */ + public void setUtil(MapToXMLUtils util) { + this.util = util; + } + + /** + * Reads the symbol attributes. + * + * @return The XML node. + */ + public Element read() + throws IOException { + logger.debug("read()"); + Element symbolElement; + try { + symbolElement = util.addSymbol(renderer); + } + catch(Exception e) { + e.printStackTrace(); + return null; + } + + symbolElement.setAttribute("name", symbol.getNameString()); + symbolElement.setAttribute("type", "simple"); + if(symbol.getColor() instanceof IRgbColor) { + IRgbColor color = (IRgbColor)symbol.getColor(); + Color c = new Color ( + color.getRed(), + color.getGreen(), + color.getBlue()); + symbolElement.setAttribute("color", String.valueOf(c.getRGB())); + } + else { + RgbColor col = new RgbColor(); + col.setRGB(symbol.getColor().getRGB()); + Color c = new Color ( + col.getRed(), + col.getGreen(), + col.getBlue()); + symbolElement.setAttribute("color", String.valueOf(c.getRGB())); + } + + symbolElement.setAttribute("width", String.valueOf(symbol.getWidth())); + + int style = symbol.getStyle(); + switch(style) { + case esriSimpleLineStyle.esriSLSSolid: + symbolElement.setAttribute("style", "solid"); break; + case esriSimpleLineStyle.esriSLSDash: + symbolElement.setAttribute("style", "dash"); break; + case esriSimpleLineStyle.esriSLSDot: + symbolElement.setAttribute("style", "dot"); break; + case esriSimpleLineStyle.esriSLSDashDot: + symbolElement.setAttribute("style", "dashdot"); break; + case esriSimpleLineStyle.esriSLSDashDotDot: + symbolElement.setAttribute("style", "dashdotdot"); break; + default: symbolElement.setAttribute ("style", "none"); + } + return symbolElement; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 37ff67a4991d -r e00deee347a5 src/java/de/intevation/mxd/reader/SimpleRendererReader.java --- a/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Fri May 20 16:27:25 2011 +0200 +++ b/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Mon May 23 13:16:42 2011 +0200 @@ -9,6 +9,7 @@ import com.esri.arcgis.display.SimpleMarkerSymbol; import com.esri.arcgis.display.SimpleFillSymbol; import com.esri.arcgis.display.MultiLayerMarkerSymbol; +import com.esri.arcgis.display.MultiLayerLineSymbol; import com.esri.arcgis.carto.SimpleRenderer; import org.w3c.dom.Element; @@ -104,6 +105,12 @@ isr.setUtil(util); isr.read(); } + else if(symbol instanceof MultiLayerLineSymbol) { + ISymbolReader isr = new MultiLayerLineSymbolReader(symbol); + isr.setParent(rendererElement); + isr.setUtil(util); + isr.read(); + } else { System.out.println("No known Symbol type: " + symbol.getClass().toString()); }