# HG changeset patch # User Raimund Renkert # Date 1302773489 -7200 # Node ID 60ed2164035a6f965cc81696996dc010dddd7088 # Parent a1bc7220efe707ed92b47bbf61bdf1bad2a8d8a7 Introduced MapScript writer. diff -r a1bc7220efe7 -r 60ed2164035a ChangeLog --- a/ChangeLog Thu Apr 14 11:25:57 2011 +0200 +++ b/ChangeLog Thu Apr 14 11:31:29 2011 +0200 @@ -1,3 +1,13 @@ +2011-04-14 Raimund Renkert + + Introduced MapScript writer. + + * M src/java/de/intevation/mxd/Converter.java: Added mapscript writer. + + * src/java/de/intevation/mxd/writer/IWriter.java, + src/java/de/intevation/mxd/writer/MapScriptWriter.java: + New. The MapScript writer uses the Java MapScript API to create a mapfile. + 2011-04-14 Raimund Renkert * src/java/de/intevation/mxd/reader/FeatureLayerReader.java: diff -r a1bc7220efe7 -r 60ed2164035a src/java/de/intevation/mxd/Converter.java --- a/src/java/de/intevation/mxd/Converter.java Thu Apr 14 11:25:57 2011 +0200 +++ b/src/java/de/intevation/mxd/Converter.java Thu Apr 14 11:31:29 2011 +0200 @@ -10,7 +10,8 @@ import de.intevation.mxd.reader.IReader; import de.intevation.mxd.reader.MXDReader; - +import de.intevation.mxd.writer.IWriter; +import de.intevation.mxd.writer.MapScriptWriter; /** * The entry point of the MXD converter tool. * @@ -68,6 +69,7 @@ try{ IReader reader = new MXDReader(); + IWriter writer = new MapScriptWriter(); reader.init(); String path = System.getProperty("mxd.file"); @@ -79,6 +81,7 @@ reader.setFilename(path); reader.read(); + writer.write(reader.getMapDocument()); reader.shutdown(); } catch(IOException e){ diff -r a1bc7220efe7 -r 60ed2164035a src/java/de/intevation/mxd/writer/IWriter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/writer/IWriter.java Thu Apr 14 11:31:29 2011 +0200 @@ -0,0 +1,18 @@ +package de.intevation.mxd.writer; + +import java.io.IOException; + +import org.w3c.dom.Document; + +/** + * The interface to the MXD-Reader. + * + * @author Raimund Renkert + */ +public interface IWriter { + /** + * write the content. + */ + boolean write(Document doc) throws IOException; +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r a1bc7220efe7 -r 60ed2164035a src/java/de/intevation/mxd/writer/MapScriptWriter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/writer/MapScriptWriter.java Thu Apr 14 11:31:29 2011 +0200 @@ -0,0 +1,123 @@ +package de.intevation.mxd.writer; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import javax.xml.xpath.XPathConstants; + +import edu.umn.gis.mapscript.mapObj; +import edu.umn.gis.mapscript.layerObj; +import edu.umn.gis.mapscript.MS_UNITS; + +import de.intevation.mxd.utils.XMLUtils; + +/** + * The MXD file reader. + * + * @author Raimund Renkert + */ +public class MapScriptWriter +implements IWriter +{ + private Document root; + private mapObj map; + + private static final Logger logger = Logger.getLogger(MapScriptWriter.class); + + public MapScriptWriter() { + map = new mapObj(""); + } + + public MapScriptWriter(String path) { + map = new mapObj(path); + } + + public boolean write(Document doc) { + logger.debug("write()"); + this.root = doc; + + //Get the filename. + Element fileNode = (Element)XMLUtils.xpath( + root, + "/mxd/file", + XPathConstants.NODE); + String filename = fileNode.getAttribute("name"); + if(filename.endsWith(".mxd")) { + filename = filename.replace(".mxd", ".map"); + } + //Write the map attributes. + writeMap(); + + //Save the map. + map.save(filename); + return true; + } + + private void writeMap() { + logger.debug("writeMap()"); + //Get the map. + Element mapNode = (Element)XMLUtils.xpath( + root, + "/mxd/map", + XPathConstants.NODE); + + //Set the name. + map.setName(mapNode.getAttribute("name")); + + //Set the extent. + map.setExtent( + Double.parseDouble(mapNode.getAttribute("extent_min_x")), + Double.parseDouble(mapNode.getAttribute("extent_min_y")), + Double.parseDouble(mapNode.getAttribute("extent_max_x")), + Double.parseDouble(mapNode.getAttribute("extent_max_y"))); + + //Set the units. + String units = mapNode.getAttribute("units"); + MS_UNITS msu; + if(units.equals("feet")) { + msu = MS_UNITS.MS_FEET; + } + else if(units.equals("inches")) { + msu = MS_UNITS.MS_INCHES; + } + else if(units.equals("kilometers")) { + msu = MS_UNITS.MS_KILOMETERS; + } + else if(units.equals("meters")) { + msu = MS_UNITS.MS_METERS; + } + else if(units.equals("miles")) { + msu = MS_UNITS.MS_MILES; + } + else if(units.equals("nauticalmiles")) { + msu = MS_UNITS.MS_NAUTICALMILES; + } + else if(units.equals("points")) { + msu = MS_UNITS.MS_PIXELS; + } + else { + msu = MS_UNITS.MS_DD; + } + map.setUnits(msu); + + //TODO: Find out whats the correct scale value. + //map.setScaledenom(Double.parseDouble(mapNode.getAttribute("scale"))); + } + + private void writeLayer() { + + } + + private void writeClass() { + + } + + private void writeSymbol() { + + } + +} +