rrenkert@31: /* rrenkert@243: * Copyright (c) 2011 by Intevation GmbH, Germany rrenkert@243: * rrenkert@243: * This file is part of MXD2map. rrenkert@31: * rrenkert@31: * This program is free software under the LGPL (>=v2.1) rrenkert@243: * Read the file LICENCE.txt coming with the software for details rrenkert@31: * or visit http://www.gnu.org/licenses/ if it does not exist. rrenkert@243: * rrenkert@243: * MXD2map has been developed on behalf of the rrenkert@243: * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg rrenkert@243: * by Intevation GmbH. rrenkert@243: * rrenkert@243: * Authors: rrenkert@243: * Raimund Renkert rrenkert@243: * Bjoern Schilberg rrenkert@243: * Stephan Holl rrenkert@31: */ rrenkert@243: rrenkert@31: package de.intevation.mxd.utils; rrenkert@31: rrenkert@31: import org.apache.log4j.Logger; rrenkert@31: rrenkert@31: import org.w3c.dom.Document; rrenkert@31: import org.w3c.dom.Element; rrenkert@31: import org.w3c.dom.NodeList; vc11884admin@133: import org.w3c.dom.DOMException; rrenkert@31: rrenkert@31: /** rrenkert@31: * Utility class to store map information in a XML structure. rrenkert@31: * rrenkert@31: * @author Raimund Renkert rrenkert@31: */ rrenkert@31: public class MapToXMLUtils rrenkert@31: { rrenkert@43: /** rrenkert@43: * The logger. rrenkert@43: */ rrenkert@43: private static final Logger logger = Logger.getLogger(MapToXMLUtils.class); rrenkert@43: rrenkert@43: /** rrenkert@43: * Private member. rrenkert@43: */ rrenkert@31: private Document root; rrenkert@38: private Element rootElement; rrenkert@31: private XMLUtils.ElementCreator creator; rrenkert@31: rrenkert@43: rrenkert@31: public MapToXMLUtils() { rrenkert@31: this.root = XMLUtils.newDocument(); rrenkert@31: creator = new XMLUtils.ElementCreator(root, "", ""); rrenkert@38: rootElement = creator.create("mxd"); rrenkert@38: root.appendChild(rootElement); rrenkert@38: } rrenkert@38: rrenkert@43: /** rrenkert@43: * Add the mxd filename to the dom. rrenkert@43: * @param path Path to the mxdfile. rrenkert@43: * @return Currently always true. rrenkert@43: */ rrenkert@38: public boolean addFilename(String path) { rrenkert@38: Element file = creator.create("file"); rrenkert@38: file.setAttribute("name", path); rrenkert@38: rootElement.appendChild(file); rrenkert@38: return true; rrenkert@31: } rrenkert@31: rrenkert@31: /** rrenkert@31: * Create the top level map element. rrenkert@31: * @return The new map element. rrenkert@31: */ rrenkert@31: public Element createMap() rrenkert@31: throws Exception { rrenkert@31: Element map; rrenkert@31: NodeList list = root.getElementsByTagName("map"); rrenkert@31: if(list == null || list.getLength() == 0){ rrenkert@31: map = creator.create("map"); rrenkert@38: rootElement.appendChild(map); rrenkert@31: } rrenkert@31: else if(list.getLength() == 1){ rrenkert@31: map = (Element)list.item(0); rrenkert@31: } rrenkert@31: else{ rrenkert@31: throw new Exception("Error while creating map node."); rrenkert@31: } rrenkert@31: return map; rrenkert@31: } rrenkert@31: rrenkert@31: /** rrenkert@31: * Add a layer element to the map. raimund@260: * rrenkert@31: * @return The layer element. rrenkert@31: */ rrenkert@31: public Element addLayer() rrenkert@31: throws Exception { rrenkert@31: Element node = creator.create("layer"); rrenkert@31: NodeList list = root.getElementsByTagName("map"); rrenkert@31: if(list == null || list.getLength() == 0){ rrenkert@31: throw new Exception("No map node found!"); rrenkert@31: } rrenkert@31: else if(list.getLength() > 1) { rrenkert@31: throw new Exception("Found more than one map node." + rrenkert@31: " This should never happen!"); rrenkert@31: } rrenkert@31: else { rrenkert@31: list.item(0).appendChild(node); rrenkert@31: return node; rrenkert@31: } rrenkert@31: } rrenkert@31: rrenkert@31: /** vc11884admin@133: * Remove a layer element from map. raimund@260: * @param layerElement The layer element. vc11884admin@133: */ vc11884admin@133: public void removeLayer(Element layerElement) { vc11884admin@133: NodeList list = root.getElementsByTagName("map"); vc11884admin@133: if(list == null || list.getLength() == 0){ vc11884admin@133: return; vc11884admin@133: } vc11884admin@133: else if(list.getLength() > 1) { rrenkert@137: return; vc11884admin@133: } vc11884admin@133: else { rrenkert@137: try { vc11884admin@133: list.item(0).removeChild(layerElement); rrenkert@137: } rrenkert@137: catch(DOMException de) { rrenkert@137: return; rrenkert@137: } vc11884admin@133: } vc11884admin@133: } vc11884admin@133: vc11884admin@133: /** rrenkert@31: * Add a renderer element to the map. rrenkert@31: * @param layer The parent layer element. rrenkert@31: * @return The renderer element. rrenkert@31: */ rrenkert@31: public Element addRenderer(Element layer) { rrenkert@31: Element node = creator.create("renderer"); rrenkert@31: layer.appendChild(node); rrenkert@31: return node; rrenkert@31: } rrenkert@31: rrenkert@31: /** rrenkert@31: * Add a symbol element to the map. rrenkert@31: * @param renderer The parent renderer element. rrenkert@31: * @return The symbol element. rrenkert@31: */ rrenkert@31: public Element addSymbol(Element renderer) { rrenkert@31: Element node = creator.create("symbol"); rrenkert@31: renderer.appendChild(node); rrenkert@31: return node; rrenkert@31: } rrenkert@180: raimund@179: /** raimund@179: * Add a label element to the map. raimund@179: * @param layer The parent layer element. raimund@179: * @return The label element. raimund@179: */ raimund@179: public Element addLabel(Element layer) { raimund@179: Element node = creator.create("label"); raimund@179: layer.appendChild(node); raimund@179: return node; raimund@179: } rrenkert@31: rrenkert@31: /** aheinecke@315: * Add a arbitray inline feature to the map. aheinecke@315: * @param layer The parent layer element. aheinecke@315: * @return The feature element. aheinecke@315: */ aheinecke@315: public Element addFeature(Element layer) { aheinecke@315: Element node = creator.create("feature"); aheinecke@315: layer.appendChild(node); aheinecke@315: return node; aheinecke@315: } aheinecke@315: aheinecke@315: /** rrenkert@31: * Print out the XML document. rrenkert@31: */ rrenkert@31: public void print() { rrenkert@31: XMLUtils.toStream(root, System.out); rrenkert@31: } rrenkert@38: rrenkert@43: /** rrenkert@43: * Get the DOM document. rrenkert@43: * @return The root document. rrenkert@43: */ rrenkert@38: public Document getDocument() { rrenkert@38: return root; rrenkert@38: } rrenkert@31: }