# HG changeset patch # User Raimund Renkert # Date 1306405807 -7200 # Node ID 686a88eb531d23846d860ef277d9b6260fc791b8 # Parent 5ed9e720b6cd41233f49a4ea1be4b13e866c6829 Added multi layer fill symbol reader. diff -r 5ed9e720b6cd -r 686a88eb531d ChangeLog --- a/ChangeLog Wed May 25 15:48:55 2011 +0200 +++ b/ChangeLog Thu May 26 12:30:07 2011 +0200 @@ -1,3 +1,14 @@ +2011-05-25 Raimund Renkert + + * src/java/de/intevation/mxd/reader/SimpleRendererReader.java: + Read multi layer fill symbols. + + * src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java: + Read attributes and outline. + + * src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java: + New. Reads fill symbols. + 2011-05-25 Raimund Renkert * src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java, diff -r 5ed9e720b6cd -r 686a88eb531d src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java Thu May 26 12:30:07 2011 +0200 @@ -0,0 +1,117 @@ +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.IFillSymbol; +import com.esri.arcgis.display.MultiLayerFillSymbol; +import com.esri.arcgis.display.SimpleFillSymbol; +import com.esri.arcgis.display.MarkerFillSymbol; +import com.esri.arcgis.display.PictureFillSymbol; +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 MultiLayerFillSymbolReader implements ISymbolReader{ + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(MultiLayerFillSymbolReader.class); + + /** + * Private member. + */ + private Element renderer; + private MultiLayerFillSymbol symbol; + private MapToXMLUtils util; + + + public MultiLayerFillSymbolReader(ISymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof MultiLayerFillSymbol) { + this.symbol = (MultiLayerFillSymbol)symbol; + } + else { + throw new Exception("Not a MultiLayerFillSymbol!"); + } + } + + + public MultiLayerFillSymbolReader(IFillSymbol symbol) + throws Exception { + logger.debug("contructor()"); + if(symbol instanceof MultiLayerFillSymbol) { + this.symbol = (MultiLayerFillSymbol)symbol; + } + else { + throw new Exception("Not a MultiLayerFillSymbol!"); + } + } + + /** + * 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 SimpleFillSymbol) { + ISymbolReader sreader = new SimpleFillSymbolReader(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 5ed9e720b6cd -r 686a88eb531d src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java --- a/src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java Wed May 25 15:48:55 2011 +0200 +++ b/src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java Thu May 26 12:30:07 2011 +0200 @@ -1,12 +1,21 @@ 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.ILineSymbol; import com.esri.arcgis.display.SimpleFillSymbol; -import com.esri.arcgis.display.esriSimpleMarkerStyle; +import com.esri.arcgis.display.MultiLayerLineSymbol; +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.HashLineSymbol; +import com.esri.arcgis.display.MultiLayerFillSymbol; +import com.esri.arcgis.display.esriSimpleFillStyle; import com.esri.arcgis.display.IRgbColor; import com.esri.arcgis.display.RgbColor; @@ -82,28 +91,98 @@ } symbolElement.setAttribute("name", symbol.getNameString()); - if(symbol.getStyle() == esriSimpleMarkerStyle.esriSMSCircle) { - symbolElement.setAttribute("style", "point"); + symbolElement.setAttribute("style", "fill"); + int style = symbol.getStyle(); + switch(style) { + case esriSimpleFillStyle.esriSFSCross: + symbolElement.setAttribute("fillstyle", "cross"); break; + case esriSimpleFillStyle.esriSFSSolid: + symbolElement.setAttribute("fillstyle", "solid"); break; + case esriSimpleFillStyle.esriSFSVertical: + symbolElement.setAttribute("fillstyle", "vertical"); break; + case esriSimpleFillStyle.esriSFSHorizontal: + symbolElement.setAttribute("fillstyle", "horizontal"); break; + case esriSimpleFillStyle.esriSFSForwardDiagonal: + symbolElement.setAttribute("fillstyle", "fwdiagonal"); break; + case esriSimpleFillStyle.esriSFSBackwardDiagonal: + symbolElement.setAttribute("fillstyle", "bwdiagonal"); break; + case esriSimpleFillStyle.esriSFSDiagonalCross: + symbolElement.setAttribute("fillstyle", "diagonalcross"); + break; + default: symbolElement.setAttribute("fillstyle", "empty"); } if(symbol.getColor() instanceof IRgbColor) { IRgbColor color = (IRgbColor)symbol.getColor(); - symbolElement.setAttribute("color", "(" + color.getRed() + - "," + color.getGreen() + - "," + color.getBlue() + ")"); + Color c = new Color ( + color.getRed(), + color.getGreen(), + color.getBlue()); + symbolElement.setAttribute("color", String.valueOf(c.getRGB())); symbolElement.setAttribute("transparency", String.valueOf(color.getTransparency())); } else { RgbColor col = new RgbColor(); col.setRGB(symbol.getColor().getRGB()); - symbolElement.setAttribute("color", "(" + col.getRed() + - "," + col.getGreen() + - "," + col.getBlue() + ")"); + Color c = new Color ( + col.getRed(), + col.getGreen(), + col.getBlue()); + symbolElement.setAttribute("color", String.valueOf(c.getRGB())); symbolElement.setAttribute("transparency", String.valueOf(col.getTransparency())); } -//TODO read further attributes. + + try { + ILineSymbol ls = symbol.getOutline(); + if(ls instanceof MultiLayerLineSymbol) { + ISymbolReader sreader = new MultiLayerLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else if(ls instanceof SimpleLineSymbol) { + ISymbolReader sreader = new SimpleLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else if(ls instanceof MarkerLineSymbol) { + ISymbolReader sreader = new MarkerLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else if(ls instanceof PictureLineSymbol) { + ISymbolReader sreader = new PictureLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else if(ls instanceof CartographicLineSymbol) { + ISymbolReader sreader = new CartoLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else if(ls instanceof HashLineSymbol) { + ISymbolReader sreader = new HashLineSymbolReader(ls); + sreader.setParent(symbolElement); + sreader.setUtil(util); + sreader.read(); + } + else { + logger.debug("The type of " + ls.getClass().toString() + + " is not implemented!"); + System.out.println( + "No known instance: " + ls.getClass().toString()); + } + } + catch(Exception e) { + e.printStackTrace(); + } + return symbolElement; } } diff -r 5ed9e720b6cd -r 686a88eb531d src/java/de/intevation/mxd/reader/SimpleRendererReader.java --- a/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Wed May 25 15:48:55 2011 +0200 +++ b/src/java/de/intevation/mxd/reader/SimpleRendererReader.java Thu May 26 12:30:07 2011 +0200 @@ -10,6 +10,7 @@ import com.esri.arcgis.display.SimpleFillSymbol; import com.esri.arcgis.display.MultiLayerMarkerSymbol; import com.esri.arcgis.display.MultiLayerLineSymbol; +import com.esri.arcgis.display.MultiLayerFillSymbol; import com.esri.arcgis.carto.SimpleRenderer; import org.w3c.dom.Element; @@ -111,6 +112,12 @@ isr.setUtil(util); isr.read(); } + else if(symbol instanceof MultiLayerFillSymbol) { + ISymbolReader isr = new MultiLayerFillSymbolReader (symbol); + isr.setParent(rendererElement); + isr.setUtil(util); + isr.read(); + } else { System.out.println("No known Symbol type: " + symbol.getClass().toString()); }