Mercurial > mxd2map
changeset 65:9fca9e09b966
Added cartographic line symbol reader.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 25 May 2011 14:11:48 +0200 |
parents | c73647bd71c0 |
children | 6bfebb7eb1df |
files | ChangeLog src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java |
diffstat | 3 files changed, 155 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue May 24 17:32:43 2011 +0200 +++ b/ChangeLog Wed May 25 14:11:48 2011 +0200 @@ -1,3 +1,11 @@ +2011-05-25 Raimund Renkert <raimund.renkert@intevation.de> + + * src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java: + Read cartographic line symbols using the new CartoLineSymbolReader. + + * src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java: + New. Reads cartographic line symbols. + 2011-05-24 Raimund Renkert <raimund.renkert@intevation.de> * 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/CartoLineSymbolReader.java Wed May 25 14:11:48 2011 +0200 @@ -0,0 +1,140 @@ +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.CartographicLineSymbol; +import com.esri.arcgis.display.esriSimpleLineStyle; +import com.esri.arcgis.display.IRgbColor; +import com.esri.arcgis.display.RgbColor; + +import com.esri.arcgis.display.esriLineCapStyle; +import com.esri.arcgis.display.esriLineJoinStyle; + +import org.w3c.dom.Element; +import de.intevation.mxd.utils.MapToXMLUtils; + +/** + * Reads cartoline symbol information. + * + * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> + */ +public class CartoLineSymbolReader implements ISymbolReader{ + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(CartoLineSymbolReader.class); + + /** + * Private member. + */ + private Element renderer; + private CartographicLineSymbol symbol; + private MapToXMLUtils util; + + + public CartoLineSymbolReader(ISymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof CartographicLineSymbol) { + this.symbol = (CartographicLineSymbol)symbol; + } + else { + throw new Exception("Not a CartographicLineSymbol!"); + } + } + + /** + * 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("style", "line"); + 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())); + } + int cap = symbol.getCap(); + String capStyle = "butt"; + switch(cap) { + case esriLineCapStyle.esriLCSRound: capStyle = "round"; break; + case esriLineCapStyle.esriLCSSquare: capStyle = "square"; break; + default: break; + } + int join = symbol.getJoin(); + String joinStyle = "bevel"; + switch(join) { + case esriLineJoinStyle.esriLJSRound: joinStyle = "round"; break; + case esriLineJoinStyle.esriLJSMitre: joinStyle = "miter"; break; + default: break; + } + symbolElement.setAttribute("cap", capStyle); + symbolElement.setAttribute("join", joinStyle); + symbolElement.setAttribute( + "linestart", + String.valueOf(symbol.getLineStartOffset())); + symbolElement.setAttribute( + "miterlimit", + String.valueOf(symbol.getMiterLimit())); + symbolElement.setAttribute( + "offset", + String.valueOf(symbol.getOffset())); + symbolElement.setAttribute("width", String.valueOf(symbol.getWidth())); + + //TODO Read further attributes depending on the Mapscript functionality: + // Template, MarkerSymbol, LineDecorations + + return symbolElement; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java Tue May 24 17:32:43 2011 +0200 +++ b/src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java Wed May 25 14:11:48 2011 +0200 @@ -11,6 +11,7 @@ import com.esri.arcgis.display.SimpleLineSymbol; import com.esri.arcgis.display.MarkerLineSymbol; import com.esri.arcgis.display.PictureLineSymbol; +import com.esri.arcgis.display.CartographicLineSymbol; import com.esri.arcgis.display.esriSimpleMarkerStyle; import com.esri.arcgis.display.IRgbColor; import com.esri.arcgis.display.RgbColor; @@ -98,6 +99,12 @@ sreader.setUtil(util); sreader.read(); } + else if(sym instanceof CartographicLineSymbol) { + ISymbolReader sreader = new CartoLineSymbolReader(sym); + sreader.setParent(renderer); + sreader.setUtil(util); + sreader.read(); + } else { logger.debug("The type of " + sym.getClass().toString() + " is not implemented!");