rrenkert@65: package de.intevation.mxd.reader; rrenkert@65: rrenkert@65: import java.io.IOException; rrenkert@65: rrenkert@65: import java.awt.Color; rrenkert@65: rrenkert@65: import org.apache.log4j.Logger; rrenkert@65: rrenkert@65: import com.esri.arcgis.display.ISymbol; rrenkert@65: import com.esri.arcgis.display.CartographicLineSymbol; rrenkert@65: import com.esri.arcgis.display.esriSimpleLineStyle; rrenkert@65: import com.esri.arcgis.display.IRgbColor; rrenkert@65: import com.esri.arcgis.display.RgbColor; rrenkert@65: rrenkert@65: import com.esri.arcgis.display.esriLineCapStyle; rrenkert@65: import com.esri.arcgis.display.esriLineJoinStyle; rrenkert@65: rrenkert@65: import org.w3c.dom.Element; rrenkert@65: import de.intevation.mxd.utils.MapToXMLUtils; rrenkert@65: rrenkert@65: /** rrenkert@65: * Reads cartoline symbol information. rrenkert@65: * rrenkert@65: * @author Raimund Renkert rrenkert@65: */ rrenkert@65: public class CartoLineSymbolReader implements ISymbolReader{ rrenkert@65: rrenkert@65: /** rrenkert@65: * The logger. rrenkert@65: */ rrenkert@65: private static final Logger logger = rrenkert@65: Logger.getLogger(CartoLineSymbolReader.class); rrenkert@65: rrenkert@65: /** rrenkert@65: * Private member. rrenkert@65: */ rrenkert@65: private Element renderer; rrenkert@65: private CartographicLineSymbol symbol; rrenkert@65: private MapToXMLUtils util; rrenkert@65: rrenkert@65: rrenkert@65: public CartoLineSymbolReader(ISymbol symbol) rrenkert@65: throws Exception { rrenkert@65: logger.debug("contructor()"); rrenkert@65: if(symbol instanceof CartographicLineSymbol) { rrenkert@65: this.symbol = (CartographicLineSymbol)symbol; rrenkert@65: } rrenkert@65: else { rrenkert@65: throw new Exception("Not a CartographicLineSymbol!"); rrenkert@65: } rrenkert@65: } rrenkert@65: rrenkert@65: /** rrenkert@65: * Setter for the parent XML element. rrenkert@65: * rrenkert@65: * @param parent The XML parent node. rrenkert@65: */ rrenkert@65: public void setParent(Element parent) { rrenkert@65: this.renderer = parent; rrenkert@65: } rrenkert@65: rrenkert@65: /** rrenkert@65: * Setter for XML document helper. rrenkert@65: * rrenkert@65: * @param util The helper class for storing map information. rrenkert@65: */ rrenkert@65: public void setUtil(MapToXMLUtils util) { rrenkert@65: this.util = util; rrenkert@65: } rrenkert@65: rrenkert@65: /** rrenkert@65: * Reads the symbol attributes. rrenkert@65: * rrenkert@65: * @return The XML node. rrenkert@65: */ rrenkert@65: public Element read() rrenkert@65: throws IOException { rrenkert@65: logger.debug("read()"); rrenkert@65: Element symbolElement; rrenkert@65: try { rrenkert@65: symbolElement = util.addSymbol(renderer); rrenkert@65: } rrenkert@65: catch(Exception e) { rrenkert@65: e.printStackTrace(); rrenkert@65: return null; rrenkert@65: } rrenkert@65: rrenkert@65: symbolElement.setAttribute("name", symbol.getNameString()); rrenkert@65: symbolElement.setAttribute("style", "line"); rrenkert@65: if(symbol.getColor() instanceof IRgbColor) { rrenkert@65: IRgbColor color = (IRgbColor)symbol.getColor(); rrenkert@65: Color c = new Color ( rrenkert@65: color.getRed(), rrenkert@65: color.getGreen(), rrenkert@65: color.getBlue()); rrenkert@65: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@65: } rrenkert@65: else { rrenkert@65: RgbColor col = new RgbColor(); rrenkert@65: col.setRGB(symbol.getColor().getRGB()); rrenkert@65: Color c = new Color ( rrenkert@65: col.getRed(), rrenkert@65: col.getGreen(), rrenkert@65: col.getBlue()); rrenkert@65: symbolElement.setAttribute("color", String.valueOf(c.getRGB())); rrenkert@65: } rrenkert@65: int cap = symbol.getCap(); rrenkert@65: String capStyle = "butt"; rrenkert@65: switch(cap) { rrenkert@65: case esriLineCapStyle.esriLCSRound: capStyle = "round"; break; rrenkert@65: case esriLineCapStyle.esriLCSSquare: capStyle = "square"; break; rrenkert@65: default: break; rrenkert@65: } rrenkert@65: int join = symbol.getJoin(); rrenkert@65: String joinStyle = "bevel"; rrenkert@65: switch(join) { rrenkert@65: case esriLineJoinStyle.esriLJSRound: joinStyle = "round"; break; rrenkert@65: case esriLineJoinStyle.esriLJSMitre: joinStyle = "miter"; break; rrenkert@65: default: break; rrenkert@65: } rrenkert@65: symbolElement.setAttribute("cap", capStyle); rrenkert@65: symbolElement.setAttribute("join", joinStyle); rrenkert@65: symbolElement.setAttribute( rrenkert@65: "linestart", rrenkert@65: String.valueOf(symbol.getLineStartOffset())); rrenkert@65: symbolElement.setAttribute( rrenkert@65: "miterlimit", rrenkert@65: String.valueOf(symbol.getMiterLimit())); rrenkert@65: symbolElement.setAttribute( rrenkert@65: "offset", rrenkert@65: String.valueOf(symbol.getOffset())); rrenkert@65: symbolElement.setAttribute("width", String.valueOf(symbol.getWidth())); rrenkert@65: rrenkert@65: //TODO Read further attributes depending on the Mapscript functionality: rrenkert@65: // Template, MarkerSymbol, LineDecorations rrenkert@65: rrenkert@65: return symbolElement; rrenkert@65: } rrenkert@65: } rrenkert@65: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :