changeset 161:3ac0968e26f3

merged with Karls repo from website
author Stephan Holl <stephan.holl@intevation.de>
date Thu, 30 Jun 2011 12:40:27 +0200
parents f4ad6a74e4ef (diff) 1618d68cb723 (current diff)
children dd4bb5869f86
files
diffstat 353 files changed, 10434 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,4 @@
+syntax: regexp
+^mapserver/logs/
+^tmp/
+^doku/build/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ChangeLog	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1185 @@
+2011-06-29  Stephan Holl  <stephan.holl@intevation.de>
+
+	* ttf-fonts/DejaVuSans.ttf: New.
+	* ttf-fonts/fonts.txt: Added FreeSans-Font as fallback for
+	  displaying Labels
+
+2011-06-29  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mxd/Styles/label/*: Added two examples to show basic labeling
+	within an MXD. More will not be supported though.
+
+2011-06-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/FillStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/LineStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java,
+	  src/java/de/intevation/mxd/writer/MarkerStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/SymbolWriter.java:
+	  Exception handling for number conversions in writer modules.
+
+2011-06-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/CartoLineSymbolReader.java:
+	  Fixed exception handling for this reader.
+
+2011-06-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write symbol styles in reverse order to the mapfile.
+
+	* src/java/de/intevation/mxd/writer/LineStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/MarkerStyleWriter.java:
+	  Create the symbol first, then set symbolname for style.
+
+	* src/java/de/intevation/mxd/writer/SymbolWriter.java:
+	  Test if symbol exists. If not exists, write new symbol with new
+	  name.
+
+2011-06-24  Stephan Holl  <stephan.holl@intevation.de>
+
+	* INSTALL.txt: added a hint how to install the converter and its
+	requirements.
+	* doku/source/conf.py, doku/source/INSTALL.txt,
+	doku/source/index.txt,doku/source/restrictions.txt,
+	doku/source/index.rst,doku/source/restrictions.rst: renamed .rst to
+	.txt, linked INSTALL.txt from root into the docs.
+
+2011-06-24  Stephan Holl  <stephan.holl@intevation.de>
+
+
+	* doku/Makefile, doku/source/conf.py, doku/source/index.rst,
+	doku/source/restrictions.rst: New. added stub for creating a
+	documentation.
+
+2011-06-24  Stephan Holl  <stephan.holl@intevation.de>
+
+	* moved README.txt to mxd/README_testbed.txt
+
+2011-06-23  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/utils/MapToXMLUtils.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Done some minor reformatings.
+
+2011-06-22  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java:
+	  Read mark and gap values from cartographic line template.
+
+	* src/java/de/intevation/mxd/writer/LineStyleWriter.java:
+	  Create and write pattern from mark and gap values.
+
+2011-06-22  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/LineFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Updated the default values and reader error handling.
+
+2011-06-22  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Split comma separated value list into single values.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Handle join tables and create class expressions correctly for
+	  multiple values and string values.
+
+2011-06-21  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Abort layer reading and remove layer element on error.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java:
+	  Handle empty layer.
+
+	* src/java/de/intevation/mxd/utils/MapToXMLUtils.java:
+	  Added removeLayer method to remove a broken layer from DOM.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapscriptWriter.java:
+	  Remove all whitespaces in layer name.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/FillStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/LineStyleWriter.java:
+	  Do not write lines or outlines if their width is smaller than 1.0.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Read additional information for sde data connections.
+
+	* src/java/de/intevation/mxd/writer/MapscriptWriter.java:
+	  Write sde data connection information to mapfile.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Insert TEMPLATE entry for GFI request.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Insert metadata for layer title for getCapabilities request.
+
+2011-06-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write expressions for string values to the mapfile.
+
+2011-06-17  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Write the correct expression for double values.
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java:
+	  Read the lower bound of the breaks.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write expressions for double values as range to the mapfile.
+
+2011-06-17  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mxd/projections/DHDN-projection-dataframe.mxd: Added testcase
+	with DHDN-3 within a dataframe
+
+2011-06-17  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java:
+	  Read label for classes.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write the label as class name.
+
+2011-06-17  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/FillStyleWriter.java:
+	  Write PATTERN for polygon outlines and hatch symbols.
+
+2011-06-17  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/LineStyleWriter.java:
+	  Write PATTERN to style block.
+	  The pattern array must be exactly 10 in length (filled up with 0)
+	  and patternlength must be set to the count of pattern elements.
+
+2011-06-16  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/IReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java:
+	  Exceptionhandling, default values and logging for map reader.
+
+2011-06-16  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* conf/log4j.properties: Set console log level to INFO.
+
+	* src/java/de/intevation/mxd/writer/FillStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/IWriter.java,
+	  src/java/de/intevation/mxd/writer/LineStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java,
+	  src/java/de/intevation/mxd/writer/MarkerStyleWriter.java,
+	  src/java/de/intevation/mxd/writer/SymbolWriter.java:
+	  Changed the exception handling.
+
+
+2011-06-16  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* conf/log4j.properties: Added console appender to log4j config.
+
+2011-06-16  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Improved top level exception handling and logging.
+
+	* src/java/de/intevation/mxd/Converter.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java:
+	  The converter stops if an error occured while reading the mxd file.
+	  Replaced console output with a logger that writes to stdout.
+
+2011-06-16  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Improved exception handling for layer reader.
+
+2011-06-15  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/IRendererReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Improved exception handling.
+
+2011-06-15  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Improved exception handling.
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/FillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/LineFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/LineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  If an exception is thrown while getting symbol attributes, a default
+	  value is set to the attribute and a warning is written to the log
+	  file.
+
+2011-06-15  Stephan Holl  <stephan.holl@intevation.de>
+
+	* contrib/python/FixWorkspacePaths.py, contrib/python/foobar.py:
+	Added some sample-scripts for working with MXD-files
+
+2011-06-14  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/FeatureLayerReader.java:
+	  Read SDE connection settings.
+
+2011-06-14  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/ArcGISInitializer.java:
+	  Load the arcobjects.jar from ArcGIS install folder.
+
+2011-06-14  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mapserver/mapfile/mxd.map: Added ows_enable_request-directive to
+	allow OGC-services.
+
+2011-06-14  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mxd/connections/SDE/sde_areas.txt: New. Added hints for
+	cconnecting to ArcSDE.
+
+2011-06-10  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/ArcGISInitializer.java:
+	  Check for ArcGISDesktop environment and added logging.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java:
+	  Check the initializer return value.
+
+2011-06-10  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Set TILEITEM to an empty string.
+
+2011-06-08  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/FillStyleWriter.java:
+	  Write PATTERN to the style if a hatch symbol is used to fill a
+	  polygon.
+
+2011-06-08  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Read the connection settings for file geodatabase.
+
+2011-06-07  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Set the class name to the layer name if it is empty.
+
+2011-06-01  Stephan Holl  <stephan.holl@intevation.de>
+	*  mapserver/symbols/symbols.sym: added a default hatch-symbol
+
+2011-06-01  Stephan Holl  <stephan.holl@intevation.de>
+
+	* M ttf-fonts/fonts.txt: Added a more verbose comment for removing
+	tspaces in font-aliases.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Do not use LineStyleWriter cause it is not usable yet.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Removed obsolete code.
+
+	* src/java/de/intevation/mxd/writer/SymbolWriter.java:
+	  Added method to save the symbolset.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  Added "type" as XML attribute to symbols.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Removed obsolete code.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/IWriter.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Use the new classes to write the mapfile. Changed exception
+	  handling(TODO: catch all exceptions in the writer).
+
+	* src/java/de/intevation/mxd/writer/MarkerStyleWriter.java:
+	  New. Write the styles for marker symbols.
+
+	* src/java/de/intevation/mxd/writer/SymbolWriter.java:
+	  New. Write symbols to the mapfile.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/Converter.java:
+	  Instantiate the mapscript writer before loading the MXD file.
+	  This is necessary because the ArcGIS-API changes the working directory
+	  while loading the MXD file.
+
+2011-05-31  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/AbstractSymbolReader.java:
+	  Get the correct logger.
+
+	* src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  Fixed the extent for this class.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java:
+	  Added TODOs for picture symbols.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/AbstractSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/LineFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Removed needless imports.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/HashLineSymbolReader.java:
+	  Use the Wrapper for line symbols to read the line.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/LineFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  All symbol reader now extend the abstract symbol reader.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added line fill symbol reader.
+
+	* src/java/de/intevation/mxd/reader/FillSymbolReader.java:
+	  Use the new reader to get line fill symbol attributes.
+
+	* src/java/de/intevation/mxd/reader/LineFillSymbolReader.java:
+	  New.
+
+2011-05-27  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added marker fill symbol reader.
+
+	* src/java/de/intevation/mxd/reader/FillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  Use the new reader to get marker fill symbol attributes.
+
+	* src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java:
+	  New.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/IRendererReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Catch all exceptions in the MXDReader.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Use the wrapper to read symbols.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added wrapper for fill symbol reader.
+
+	* src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Use the wrapper to read the fill symbols.
+
+	* src/java/de/intevation/mxd/reader/FillSymbolReader.java:
+	  New.
+
+	* src/java/de/intevation/mxd/reader/LineSymbolReader.java:
+	  Added methods for the ILineSymbol interface.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added wrapper for line symbol reader.
+
+	* src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Use the new wrapper to read line symbols.
+
+	* src/java/de/intevation/mxd/reader/LineSymbolReader.java:
+	  New.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added wrapper for marker symbol reader and extracted methods from symbol
+	readers.
+
+	* src/java/de/intevation/mxd/reader/AbstractSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerSymbolReader.java:
+	  New.
+
+	* src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Removed obsolete code fragments.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/HashLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java:
+	  Removed console outputs.
+
+2011-05-26  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* 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  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java:
+	  Added constructor for ILineSymbols.
+
+	* src/java/de/intevation/mxd/reader/HashLineSymbolReader.java:
+	  Read the hash symbol.
+
+2011-05-25  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java:
+	  Read hash line symbols using the new HashLineSymbolReader.
+
+	* src/java/de/intevation/mxd/reader/HashLineSymbolReader.java:
+	  New. Reads hash line symbols.
+
+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:
+	  Read picture line symbols using the new PictureSymbolReader.
+
+	* src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java:
+	  New. Reads picture line symbols.
+
+2011-05-24  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java:
+	  Read the marker line symbols using the new MarkerLineSymbolReader.
+
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java:
+	  Added constructor with IMarkerSymbol parameter.
+
+	* src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.javai:
+	  New. Reads marker line symbols.
+
+2011-05-24  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Set the layer type to line when reading a line layer.
+
+	* src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java:
+	  Added style option and renamed xml node "style" to "linestyle".
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Prepared the mapfile writer to write line symbols.
+
+2011-05-23  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	Added first line symbol reader.
+
+	* src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Read line symbols with the new MultiLayLineSymbolReader.
+
+	* src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java:
+	  New. The MultiLayerLineSymbolReader reads lines from different layers
+	  using the LineSymbolReader.
+
+2011-05-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Added TODO for line symbol reader.
+
+2011-05-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write the symbols-file to the mapfile path.
+
+2011-05-20  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Read the workspace path.
+
+	* src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java:
+	  Added reader for picture marker symbols.
+
+	* src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java:
+	  New. Read picture symbols from mxd-file.
+
+2011-05-17  Raimund Renkert  <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Set the projection "EPSG:31467" and units "METERS" as default if the
+	  MXD values are unknown.
+
+2011-05-16  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* build.xml: Set the classpath for the executabel jar file. The path to
+	  the external libraries (lib/) is relative to the executable.
+
+	* src/java/de/intevation/mxd/Converter.java:
+	  Use commandline arguments to set the filenames for the MXD-, MAP- and
+	  the template file. If no arguments are used, read the filenames from
+	  the converter.properties file.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Use the template file for mapfile creation.
+
+	* converter.properties.sample: New. Example for the properties file.
+
+2011-05-16  Stephan Holl  <stephan.holl@intevation.de>
+
+	* doku/funktionsweise/Makefile,
+	  doku/funktionsweise/funktionsweise-MXD-konverter.svg: New. Added
+	  a schema how the converter works
+
+2011-05-11  Stephan Holl  <stephan.holl@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java: Added
+	  the (currently) hard-coded template-path to the
+	  mapObj-constructor; removed some TODO-settings.
+
+2011-05-11  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mapserver/rundir/Readme.txt: New. This is a folder containing the
+	  MXD-files for conversion. The resulting MAP-file can be run from
+	  here; all Paths are relative from here so request will find its
+	  symbols, fonts, logfiles etc.
+
+	* mapserver/mapfile/mapfile_header.include: Added SHAPEPATH for
+	the Visualization of the frida-shapefiles.
+
+2011-05-10  Stephan Holl  <stephan.holl@intevation.de>
+
+	* mapserver/mapfile/mapfile_header.include, mapserver/mapfile/mxd.map,
+	  mapserver/symbols/symbols.sym: Optimized the mapfile to use as a
+	  template when instantiating the new mapObj.
+
+2011-05-10  Stephan Holl  <stephan.holl@intevation.de>
+
+	* properties.xml: Adopt build-path to Windows-TMP-folder
+
+2011-04-20  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Created one method for each symbol type.
+	  Write the character symbol attributes to the map.
+
+2011-04-20  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java:
+	  Read all the font attributes.
+
+2011-04-19  Raimund Renkert <raimund.renkert@intevation.de>
+
+	Added CharacterMarkerSymbol reader and extracted the ArrowMarkerSymbol
+	reader.
+
+	* src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java:
+	  Extracted the ArrowMarkerSymbol.
+	* src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java:
+	  New.
+
+2011-04-18  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Added MultiLayerMarkerSymbol support.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Write ArrowMarker to the map.
+
+	* src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java:
+	  New. Reads multi layer marker symbols.
+
+2011-04-18  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java:
+	  Added support for SimpleMarkerSymbol and SimpleFillSymbol.
+
+2011-04-18  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Create one renderer element in the dom for each mapserver class with its
+	  attributes and expression.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java: Write the
+	  expression for the mapserver class.
+
+2011-04-15  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/ArcGISInitializer.java,
+	  src/java/de/intevation/mxd/Converter.java,
+	  src/java/de/intevation/mxd/reader/FeatureClassReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java
+	  src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/utils/MapToXMLUtils.java,
+	  src/java/de/intevation/mxd/writer/IWriter.java,
+	  src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  Added comments, done some code styling and removed typos.
+
+2011-04-15  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Read the data source name for layer objects.
+
+	* src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java:
+	  Changed color processing.
+
+	* src/java/de/intevation/mxd/writer/MapScriptWriter.java:
+	  First implementation that generates valid mapfiles for simple point
+	  mxdfiles.
+
+2011-04-14  Raimund Renkert <raimund.renkert@intevation.de>
+
+	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 <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Read the layer type.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java: Updated the reader to
+	  use the XML utilities here.
+
+2011-04-14  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/MapReader.java:
+	  Read further map attributes.
+
+2011-04-14  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/utils/MapToXMLUtils.java:
+	  Added root element to document and save the filename in the XML tree.
+
+2011-04-13  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A contrib/sh/test_mxd.cgi
+	  Added a new mapserver wrapper cgi script for testing of generated map
+	  from bsh-mxd-converter.
+
+2011-04-12  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java:
+	  New.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java:
+	  Use new layer reader to get layer attributes.
+
+	* src/java/de/intevation/mxd/reader/SimpleRendererReader.java:
+	  Read symbol attributes using the new symbol reader.
+
+2011-04-12  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* build.xml: Changed classname for converter entry point.
+
+2011-04-12  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/Converter.java,
+	  src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureClassReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/utils/MapToXMLUtils.java:
+	  Removed needless imports.
+
+2011-04-12  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/ArcGISInitializer.java,
+	  src/java/de/intevation/mxd/Converter.java,
+	  src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureClassReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/IClassReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/IReader.java,
+	  src/java/de/intevation/mxd/reader/IRendererReader.java,
+	  src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java,
+	  src/java/de/intevation/mxd/utils/XMLUtils.java:
+	  Separated converter components into packages.
+
+2011-04-11  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java: Convert
+	  symbol color to RgbColor and write values to XML document.
+
+2011-04-11  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureClassReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Store all attributes in an XML document using the new utility class.
+
+	* src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/IRendererReader.java,
+	  src/java/de/intevation/mxd/reader/ISymbolReader.java: Updated interfaces.
+
+	* src/java/de/intevation/mxd/utils/MapToXMLUtils.java: New. Utility class to
+	  store map information in a XML structure.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java: Added class reader.
+
+	* src/java/de/intevation/mxd/reader/FeatureClassReader.java,
+	  src/java/de/intevation/mxd/reader/IClassReader.java: New.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/FeatureLayerReader.java:
+	  Write Attributes to the XML document.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java: Set XML document to
+	  layer reader and print the document.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* build.xml: Added parameter for MXD filename.
+
+	* src/java/de/intevation/mxd/Converter.java: Read MXD filename from
+	  properties.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/reader/IReader.java: Added XML document to
+	  store map information.
+
+	* src/java/de/intevation/mxd/reader/MXDReader.java: Write the information to
+	  the XML document.
+
+	* src/java/de/intevation/mxd/reader/MapReader.java: Write map information to
+	  the XML document.
+
+	* src/java/de/intevation/mxd/utils/XMLUtils.java: New. Helper class to
+	  create and manipulate XML documents.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	Moved reader components to reader folder.
+
+	* src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java,
+	  src/java/de/intevation/mxd/reader/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/reader/ILayerReader.java,
+	  src/java/de/intevation/mxd/reader/IReader.java,
+	  src/java/de/intevation/mxd/reader/IRendererReader.java,
+	  src/java/de/intevation/mxd/reader/ISymbolReader.java,
+	  src/java/de/intevation/mxd/reader/MXDReader.java,
+	  src/java/de/intevation/mxd/reader/MapReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/reader/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java:
+	  Moved.
+
+2011-04-08  Raimund Renkert <raimund.renkert@intevation.de>
+
+	* src/java/de/intevation/mxd/Converter.java: Initial implementation for the
+	  MXD-Converter.
+
+	* src/java/de/intevation/mxd/ArcGISInitializer.java,
+	  src/java/de/intevation/mxd/IReader.java,
+	  src/java/de/intevation/mxd/MXDReader.java,
+	  src/java/de/intevation/mxd/MapReader.java,
+	  src/java/de/intevation/mxd/ILayerReader.java,
+	  src/java/de/intevation/mxd/IRendererReader.java,
+	  src/java/de/intevation/mxd/ISymbolReader.java,
+	  src/java/de/intevation/mxd/FeatureLayerReader.java,
+	  src/java/de/intevation/mxd/SimpleMarkerSymbolReader.java,
+	  src/java/de/intevation/mxd/SimpleRendererReader.java,
+	  src/java/de/intevation/mxd/UniqueValueRendererReader.java,
+	  src/java/de/intevation/mxd/ClassBreakRendererReader.java:
+	  New. Initial implementation for the MXD converter.
+
+	* conf/log4j.properties: New. Contains the log4j configuration.
+
+2011-04-04  Ingo Weinzierl <ingo@intevation.de>
+
+	* src/java/de/intevation/mxd/Converter.java:
+	  New. This class represents the entry point of the mxd converter tool.
+
+2011-03-07  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mapserver/mapfile/mapfile_header.include:
+	  Pointed to right epsg file.
+	* A mapserver/epsg/epsg,
+	  R mapserver/epsg/epsg.txt:
+	  Renamed epsg file.
+
+2011-03-07  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/point/SimpleMarkerSymbol/TODO.txt:
+	  Addes hints for ColorRamps in mapserver.
+
+2011-03-07  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mapserver/mapfile/mxd.map,
+	  M mapserver/symbols/symbols.sym,
+	  A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.map,
+	  A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.sym,
+	  R mxd/Styles/line/CartographicLineSymbol/TODO.txt:
+	  Added missing map and symbology file for testcase multilayer CartographicLineSymbol.
+
+2011-03-07  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.lyr,
+	  A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.mxd,
+	  A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.png,
+	  A mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.txt,
+	  R mxd/Styles/line/CartographicLineSymbol/l_cartoline_0,4pt_c255-255-255_butt-round_template_multilayer.lyr,
+	  R mxd/Styles/line/CartographicLineSymbol/l_cartoline_0,4pt_c255-255-255_butt-round_template_multilayer.mxd,
+	  R mxd/Styles/line/CartographicLineSymbol/l_cartoline_0,4pt_c255-255-255_butt-round_template_multilayer.png,
+	  R mxd/Styles/line/CartographicLineSymbol/l_cartoline_0,4pt_c255-255-255_butt-round_template_multilayer.txt:
+	  Renamed.
+
+2011-03-07  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.sym,
+	  M mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.sym:
+	  Making CharacterMarkerSymbol work. Fixed CHARACTER notation. 
+	* M ttf-fonts/fonts.txt:
+	  Swapped columns to the right order (alias fontfile).
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A .hgignore:
+	  Added initial .hgignore.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.map,
+	  M mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.sym:
+
+	  Modified polygon style LineFillSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.map,
+	  M mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.sym,
+	  M mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.map,
+	  M mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.sym:
+
+	  Modified polygon style SimpleFillSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A images/grass.png,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.lyr,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.map,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.mxd,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.png,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.sym,
+	  A mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.txt,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.lyr,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.map,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.mxd,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.png,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.sym,
+	  R mxd/Styles/polygon/PictureFillSymbol/pol_single_0,4pt_109-187-67_0-1-1_Grassland.txt:
+
+	  Modified polygon style PictureFillSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.lyr,
+	  A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.map,
+	  A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.mxd,
+	  A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.png,
+	  A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.sym,
+	  A mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.txt,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.lyr,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.map,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.mxd,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.png,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.sym,
+	  R mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1,0.txt:
+
+	  Modified polygon style MarkerFillSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.map,
+	  A mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.sym:
+
+	 Modified line style MarkerLineSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.map,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.sym,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.map,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.sym,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.map,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.sym,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.map,
+	  M mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.sym,
+	  M mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.map,
+	  M mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.sym,
+	  M mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.map:
+
+	  Modified line style SimpleLineSymbol mapfile testcases.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.sym,
+	  A images/brick1.png,
+	  A mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.map:
+
+	  Modified line style PictureLineSymbol mapfile testcases.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.map,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.sym,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.map,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.sym,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.map,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.sym,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.map,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.sym,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.map,
+	  M mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.sym:
+
+	  Modified line style CartographicLineSymbol mapfile testcases.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.map,
+	  M mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.sym:
+
+	 Modified point style SimpleMarkerSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.map,
+	  M mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.sym,
+	  A images/warning.png:
+
+	  Modified point style PictureMarkerSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.lyr,
+	  A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.map,
+	  A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.mxd,
+	  A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.png,
+	  A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.sym,
+	  A mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.txt,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.lyr,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.map,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.mxd,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.png,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.sym,
+	  R mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12,0-0,0.txt:
+
+	  Modified point style ArrowMarkerSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.map,
+	  M mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.sym,
+	  M mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.map,
+	  M mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.sym:
+
+	  Modifed point style CharacterMarkerSymbol mapfile testcase.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M mapserver/mapfile/mapfile_header.include:
+	  Adjusted CONFIG "MS_ERRORFILE". and 
+	  Commented out CONFIG "PROJ_LIB", because it doesn' work.
+
+	* M mapserver/mapfile/mxd.map:
+	  Added mxd testcase map files.
+
+	* M mapserver/symbols/symbols.sym:
+	  Added mxd testcase sym files.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* R mapserver/logs/ms_error.log:
+	  Removed.
+
+2011-03-04  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M contrib/apache/mxd-testbed.conf:
+	  Adjustment for the mxd-testbed.
+	* M contrib/sh/wms_mxd.cgi:
+	  chmod 755
+
+2011-03-03  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* M README.txt:
+	  Concretions
+
+2011-03-03  Bjoern Schilberg  <bjoern.schilberg@intevation.de>
+
+	* A README.txt:
+	  Added initial README for setting up apache.
+	* A contrib/apache/mxd-testbed.conf:
+	  Added initial vhost configuration for mxd-testbed.
+	* A contrib/sh/wms_mxd.cgi:
+	  Added initial mapserver wrapper script.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/INSTALL.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,74 @@
+------------
+Requirements
+------------
+
+The current version of the converter only runs on Windows. This is because
+the ArcObjects JDK API is not running properly on Linux though.
+
+To run the converter you need at least the following componentes:
+
+ * Sun Java6 SDK to build, JRE to run
+ * ArcGIS Desktop10.x or ArcEngine10.x with a valid licence enabled
+ * UMN MapServer with Java MapScript-bindings (recent development-version)
+ * Apache Webserver for displaying the resulting Mapfiles
+ * Optional: MapServer compiled with ArcSDE-plugin
+ * Optional: GDAL/OGR compiled with ArcSDE-support
+ * Optional: GDAL/OGR compiled with FileGeodatabase-support 
+
+
+
+------------
+Installation
+------------
+
+Compile the converter-sources
+-----------------------------
+
+To compile the sources you need to have a properly configured
+ant-environmet available. ArcGIS SDK provides an ant-installation which
+suffices::
+
+ ant jar
+
+Install Apache Webserver
+------------------------
+
+Install Apache webserver by exedcuting the .msi-file and follow the
+install-dialogs::
+
+ httpd-2.2.19-win32-x86-openssl-0.9.8r.msi
+
+Make sure that you install apache as a service so it will be available
+directly after system bootup.
+
+
+Install UMN MapServer
+---------------------
+
+The current documentation uses the Windows binary-builds from http://www.gisinternals.com/sdk/
+
+1. Unzip the ZIP-file at c:/ms_6.1-dev
+
+#. Configure Apache Webserver to find the cgi-bin-folder::
+
+    ScriptAlias /cgi-bin/ "C:/ms_6.1-dev/bin/"
+
+    <Location "/cgi-bin">
+        Options None
+        Order allow,deny
+        Allow from all
+    </Location>
+
+#. Copy mapserv.exe from c:/ms_6.1-dev/bin/apps/ms to c:/ms_6.1-dev/bin/
+
+Create run-environment
+----------------------
+
+writeme
+
+
+-----
+Usage
+-----
+
+writeme
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build.xml	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<!DOCTYPE project[
+  <!ENTITY properties SYSTEM "properties.xml">
+]>
+<!-- :mode=ant -->
+
+<project name="MXD-Konverter" default="all" basedir=".">
+  <!-- import external XML fragments -->
+  &properties;
+  <!-- import sample properties -->
+  <!-- TODO: edit sample.properties file before importing -->
+  <property file="sample.properties"/>
+  <path id="compile.classpath">
+    <pathelement location="${arcobjects.jar}"/>
+    <fileset dir="${libs.dir}">
+      <include name="**/*.jar"/>
+    </fileset>
+  </path>
+  <path id="run.classpath">
+    <path refid="compile.classpath"/>
+    <pathelement location="${class.dir}"/>
+    <pathelement location="${src.dir}"/>
+  </path>
+
+  <!-- ========================================= -->
+  <!-- private targets -->
+  <!-- ========================================= -->
+  <target name="init">
+    <!-- create the time stamp -->
+    <tstamp/>
+    <!-- create the build directory structure used by compile -->
+    <mkdir dir="${build.dir}"/>
+    <mkdir dir="${class.dir}"/>
+  </target>
+
+  <target name="validate-runtime" depends="init">
+    <condition property="runtimeAvailable">
+      <isset property="runtime.home"/>
+    </condition>
+    <fail message="No runtime installed. You need to install ArcGIS Engine, Desktop or Server to run this sample." unless="runtimeAvailable"/>
+  </target>
+
+  <target name="compile" depends="validate-runtime">
+  <!-- javac resolver needed to run inside of Websphere Studio -->
+    <available classname="org.eclipse.core.launcher.Main" property="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" classpath="${java.class.path}" />
+    <!-- compile the java code from ${src.dir} into ${class.dir} -->
+    <javac srcdir="${src.dir}" destdir="${class.dir}" debug="on">
+      <classpath refid="compile.classpath"/>
+    </javac>
+    <copy todir="${class.dir}">
+      <fileset dir="${src.dir}" includes="**/icons/*" />
+    </copy>
+  </target>
+
+  <target name="jar" depends="compile">
+    <mkdir dir="${dist.dir}" />
+    <jar jarfile="${dist.dir}/${sample.dir}.jar" compress="true" basedir="${class.dir}">
+      <manifest>
+        <attribute name="Main-Class" value="de.intevation.mxd.Converter"/>
+        <attribute name="Class-Path" value="lib/log4j-1.2.16.jar lib/mapscript.jar lib/arcobjects.jar"/>
+      </manifest>
+    </jar>
+  </target>
+
+  <target name="usage">
+    <echo message="Execute 'ant -projecthelp' for the build file help"/>
+    <echo message="Execute 'ant -help' for Ant help"/>
+  </target>
+
+  <target name="execute" depends="compile">
+    <java classname="de.intevation.mxd.Converter" failonerror="true" fork="true">
+      <jvmarg value="-Xss2m"/>
+      <classpath refid="run.classpath"/>
+      <sysproperty key="mxd.file" value="${MXDFILE}"/>
+    </java>
+  </target>
+
+  <!-- ========================================= -->
+  <!-- public targets -->
+  <!-- ========================================= -->
+
+  <target name="all" depends="compile" description="build everything">
+    <echo message="application built"/>
+  </target>
+
+  <target name="clean" description="clean all build products">
+    <!-- delete the ${build} directory trees -->
+    <delete dir="${build.dir}"/>
+    <echo message="build directory gone!"/>
+  </target>
+
+  <target name="help" depends="usage" description="usage" />
+  <target name="dist" depends="jar" description="create distributable products" />
+  <target name="run-sample" depends="execute" description="execute the sample with args set in sample.properties"/>
+</project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conf/log4j.properties	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,16 @@
+#### Log just errors and warnings to a file.
+log4j.rootLogger=DEBUG, MXD, Console
+
+log4j.appender.MXD=org.apache.log4j.RollingFileAppender
+log4j.appender.MXD.File=./logs/console-client.log
+log4j.appender.MXD.MaxFileSize=5000KB
+log4j.appender.MXD.MaxBackupIndex=1
+log4j.appender.MXD.layout=org.apache.log4j.PatternLayout
+log4j.appender.MXD.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
+
+#log4j.rootLogger=WARN, Console
+log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.Threshold=INFO
+log4j.appender.Console.layout=org.apache.log4j.PatternLayout
+log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/apache/mxd-testbed.conf	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,105 @@
+#
+# VirtualHost template
+# Note: to use the template, rename it to /etc/apache2/vhost.d/yourvhost.conf. 
+# Files must have the .conf suffix to be loaded.
+#
+# See /usr/share/doc/packages/apache2/README.QUICKSTART for further hints 
+# about virtual hosts.
+#
+# NameVirtualHost statements can be added to /etc/apache2/listen.conf.
+#
+# Almost any Apache directive may go into a VirtualHost container.
+# The first VirtualHost section is used for requests without a known
+# server name.
+#
+<VirtualHost *:80>
+    ServerAdmin webmaster@dummy-host.example.com
+    ServerName dummy-host.example.com
+
+    # DocumentRoot: The directory out of which you will serve your
+    # documents. By default, all requests are taken from this directory, but
+    # symbolic links and aliases may be used to point to other locations.
+    DocumentRoot /home/intevation/mxd-testbed/web
+
+    # if not specified, the global error log is used
+    ErrorLog /var/log/apache2/mxd-testbed_error.log
+    CustomLog /var/log/apache2/mxd-testbed_access.log combined
+
+    # don't loose time with IP address lookups
+    HostnameLookups Off
+
+    # needed for named virtual hosts
+    UseCanonicalName Off
+
+    # configures the footer on server-generated documents
+    ServerSignature On
+
+
+    # Optionally, include *.conf files from /etc/apache2/conf.d/
+    #
+    # For example, to allow execution of PHP scripts:
+    #
+    # Include /etc/apache2/conf.d/mod_php4.conf
+    #
+    # or, to include all configuration snippets added by packages:
+    # Include /etc/apache2/conf.d/*.conf
+
+
+    # ScriptAlias: This controls which directories contain server scripts.
+    # ScriptAliases are essentially the same as Aliases, except that
+    # documents in the realname directory are treated as applications and
+    # run by the server when requested rather than as documents sent to the client.
+    # The same rules about trailing "/" apply to ScriptAlias directives as to
+    # Alias.
+    #
+    ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
+
+    # "/srv/www/cgi-bin" should be changed to whatever your ScriptAliased
+    # CGI directory exists, if you have one, and where ScriptAlias points to.
+    #
+    <Directory "/srv/www/cgi-bin">
+	AllowOverride None
+	Options +ExecCGI -Includes +FollowSymLinks
+	Order allow,deny
+	Allow from all
+
+    </Directory>
+
+
+
+    #
+    # This should be changed to whatever you set DocumentRoot to.
+    #
+    <Directory "/home/intevation/mxd-testbed/web">
+    
+	#
+	# Possible values for the Options directive are "None", "All",
+	# or any combination of:
+	#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
+	#
+	# Note that "MultiViews" must be named *explicitly* --- "Options All"
+	# doesn't give it to you.
+	#
+	# The Options directive is both complicated and important.  Please see
+	# http://httpd.apache.org/docs-2.2/mod/core.html#options
+	# for more information.
+	#
+	Options Indexes FollowSymLinks
+    
+	#
+	# AllowOverride controls what directives may be placed in .htaccess files.
+	# It can be "All", "None", or any combination of the keywords:
+	#   Options FileInfo AuthConfig Limit
+	#
+	AllowOverride None
+    
+	#
+	# Controls who can get stuff from this server.
+	#
+	Order allow,deny
+	Allow from all
+    
+    </Directory>
+
+</VirtualHost>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/python/FixWorkspacePaths.py	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,34 @@
+import arcpy, os
+
+inputMXD = arcpy.GetParameterAsText(0)
+
+newpath = r'C:\mxd-konverter\testdata-frida'
+
+rootdir = inputMXD
+
+for root, subFolders, files in os.walk(rootdir):
+    for file in files:
+        f = os.path.join(root, file)
+        if os.path.isfile(f):
+            basename, extension = os.path.splitext(f)
+            if extension.lower() == ".mxd":
+                print "Bearbeitet Dokument %s" % f
+                mxd = arcpy.mapping.MapDocument(f)
+                #Report broken sources
+                if len(arcpy.mapping.ListBrokenDataSources(mxd)) > 0:
+                    for brkLyr in arcpy.mapping.ListBrokenDataSources(mxd):
+                        if brkLyr.supports("dataSource"):
+                            oldpath =  brkLyr.dataSource
+                            oldworkspace =  brkLyr.workspacePath
+                            print "Old dataSource-Path %s, old workspacePath %s " % (oldpath, oldworkspace)
+                            # Replace
+                            brkLyr.findAndReplaceWorkspacePath(oldworkspace, newpath)
+                            print "Corrected path: %s" % brkLyr.workspacePath
+                            print "Corrected dataSource: %s" %brkLyr.dataSource
+                            mxd.save()
+                            print "Wrote file %s" % f
+                            print arcpy.GetMessages()
+                else:
+                    print "keine kaputten Layer gefunden"
+            
+del mxd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/python/foobar.py	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,68 @@
+# Author:  ESRI
+# Date:    July 5, 2010
+# Version: ArcGIS 10.0
+# Summary: This script will add a layer file into a map document. The script
+#          must be run from within ArcMap because it references the CURRENT
+#          map document.  The purpose of the script is to create a user
+#          friendly tool that allows users to simply add a layer from a list
+#          of existing layer files all stored in a common location. A validation
+#          script is used to automatically populate two of the parameters.
+#          The parameters are:
+#               1) Browse to a folder that contains layer files. This could be
+#                  hard coded within the validation script eliminating the need
+#                  for entering this parameter.
+#               2) Select a layer file from the list.  This is auto populated
+#                  using a validation script.
+#               3) Select a data frame.  This is also auto populated using a 
+#                  validation script.
+#               4) Select one of 3 placement positions.
+#
+# Note: This script tool will only work if background processing is disabled.
+#       because CURRENT is being used.
+# Note: To run the script from ArcMap either run the script tool from the
+#       Catalog window from within ArcMap or add the script tool into the UI
+#       via the customize dialog box [Geoprocessing Tools].
+
+import arcpy
+import shlex, subprocess
+
+#Helper for executing an external shell-scrip or programm
+def executeCommand(command):
+    success = False
+    try:
+        args = shlex.split(command)
+        p = subprocess.Popen(args)
+        p.wait()
+
+        returnCode = p.returncode
+
+        if (returnCode == 0):
+            success = True
+        else:
+            print "Subproccess terminates with %s. This is an error"\
+                       % returnCode
+    except OSError, err:
+        success = False
+
+    return success
+
+try:
+    #Read parameters from dialog
+    inputMXD = arcpy.GetParameterAsText(0)
+    outputMXD = arcpy.GetParameterAsText(1)
+    template = arcpy.GetParameterAsText(2)
+
+    print "InputMXD: %s,\nOutputMXD: %s" % (inputMXD, outputMXD)
+
+    # execute Java-command for converting
+    javacmd = "-Dmapserver.library.name=lib/mapscript -jar mxd-testbed_sh.jar"
+    javafiles = "-mxd %s -map %s -template %s " % (inputMXD, outputMXD, template)
+
+    cmd = "java "+ javafiles + javacmd
+    print cmd
+    executeCommand(cmd)
+    
+except Exception, e:
+  import traceback
+  map(arcpy.AddError, traceback.format_exc().split("\n"))
+  arcpy.AddError(str(e))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/sh/test_mxd.cgi	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+#!/bin/sh
+# SLES compatible
+MS_MAPFILE=/tmp/test.map
+export MS_MAPFILE
+/srv/www/cgi-bin/mapserv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/sh/wms_mxd.cgi	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+#!/bin/sh
+# SLES compatible
+MS_MAPFILE=/home/intevation/mxd-testbed/mapserver/mapfile/mxd.map
+export MS_MAPFILE
+/srv/www/cgi-bin/mapserv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/converter.properties.sample	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,4 @@
+# Java properties file for the MXD Converter Tool.
+mxd = \\full\\path\\to\\mxd-file
+map = \\full\\path\\to\\map-file
+map-template = \\full\\path\\to\\mapfile-template
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/Makefile	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,130 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MXD2map.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MXD2map.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/MXD2map"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MXD2map"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	make -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/funktionsweise/Makefile	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,39 @@
+# Makefile to get images from vector drawings. 
+# Sketch (.sk)
+# SVG (.sk)
+
+SKS=$(wildcard *.sk)
+SVG=$(wildcard *.svg)
+PNG=$(wildcard *.png)
+
+OUTPUT_PNG_SK=$(SKS:sk=png)
+OUTPUT_PNG_SVG=$(SVG:svg=png)
+OUTPUT_PS_PNG=$(PNG:png=ps)
+OUTPUT_PS_SVG=$(SVG:svg=eps)
+
+all: png
+
+png:	$(OUTPUT_PNG_SK) $(OUTPUT_PNG_SVG)
+
+ps:	$(OUTPUT_PS_SVG) $(OUTPUT_PS_PNG)
+
+%.png:	%.sk
+	sk2ppm --bbox $*.sk | pnmtopng - > $*.png
+
+%.png:	%.svg
+	inkscape -d 150 -D -e $*.png $*.svg
+
+%.ps:	%.png
+	convert $*.png $*.ps
+
+%.eps:	%.svg
+	inkscape -d 150 -D -E $*.eps $*.svg
+
+clean:
+	rm -f $(OUTPUT_PNG_SK) 2>/dev/null; true
+	rm -f $(OUTPUT_PNG_SVG) 2>/dev/null; true
+	rm -f $(OUTPUT_PS_PNG) 2>/dev/null; true
+	rm -f $(OUTPUT_PS_SVG) 2>/dev/null; true
+
+
+.PHONY:	png ps clean
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/funktionsweise/funktionsweise-MXD-konverter.svg	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,514 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="545.669"
+   height="481.889"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="funktionsweise-MXD-konverter.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata261">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="937"
+     inkscape:window-width="1646"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="1.3866188"
+     inkscape:cx="472.008"
+     inkscape:cy="-60.67088"
+     inkscape:window-x="26"
+     inkscape:window-y="51"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs4">
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="408.298"
+       x2="201.633"
+       y1="408.298"
+       x1="270.62"
+       id="1">
+      <stop
+         id="stop83"
+         style="stop-color:#c3c3c3"
+         offset="0" />
+      <stop
+         id="stop85"
+         style="stop-color:#ffffff"
+         offset="0.205" />
+      <stop
+         id="stop87"
+         style="stop-color:#ffffff"
+         offset="0.495" />
+      <stop
+         id="stop89"
+         style="stop-color:#b4b4b4"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="408.298"
+       x2="259.418"
+       y1="408.298"
+       x1="328.405"
+       id="2">
+      <stop
+         id="stop104"
+         style="stop-color:#c3c3c3"
+         offset="0" />
+      <stop
+         id="stop106"
+         style="stop-color:#ffffff"
+         offset="0.205" />
+      <stop
+         id="stop108"
+         style="stop-color:#ffffff"
+         offset="0.495" />
+      <stop
+         id="stop110"
+         style="stop-color:#b4b4b4"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="408.298"
+       x2="317.203"
+       y1="408.298"
+       x1="386.19"
+       id="3">
+      <stop
+         id="stop125"
+         style="stop-color:#c3c3c3"
+         offset="0" />
+      <stop
+         id="stop127"
+         style="stop-color:#ffffff"
+         offset="0.205" />
+      <stop
+         id="stop129"
+         style="stop-color:#ffffff"
+         offset="0.495" />
+      <stop
+         id="stop131"
+         style="stop-color:#b4b4b4"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="321.599"
+       x2="144.758"
+       y1="321.599"
+       x1="445.62"
+       id="4">
+      <stop
+         id="stop144"
+         style="stop-color:#c3c3c3"
+         offset="0" />
+      <stop
+         id="stop146"
+         style="stop-color:#ffffff"
+         offset="0.205" />
+      <stop
+         id="stop148"
+         style="stop-color:#ffffff"
+         offset="0.495" />
+      <stop
+         id="stop150"
+         style="stop-color:#b4b4b4"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 240.9445 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="545.66901 : 240.9445 : 1"
+       inkscape:persp3d-origin="272.8345 : 160.62967 : 1"
+       id="perspective263" />
+    <marker
+       id="ArrowEnd"
+       viewBox="0 0 10 10"
+       refX="0"
+       refY="5"
+       markerUnits="strokeWidth"
+       markerWidth="4"
+       markerHeight="3"
+       orient="auto">
+      <path
+         d="M 0 0 L 10 5 L 0 10 z"
+         id="path7" />
+    </marker>
+    <marker
+       id="ArrowStart"
+       viewBox="0 0 10 10"
+       refX="10"
+       refY="5"
+       markerUnits="strokeWidth"
+       markerWidth="4"
+       markerHeight="3"
+       orient="auto">
+      <path
+         d="M 10 0 L 0 5 L 10 10 z"
+         id="path10" />
+    </marker>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#1"
+       id="linearGradient3001"
+       gradientUnits="userSpaceOnUse"
+       x1="270.62"
+       y1="408.298"
+       x2="201.633"
+       y2="408.298" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#2"
+       id="linearGradient3003"
+       gradientUnits="userSpaceOnUse"
+       x1="328.405"
+       y1="408.298"
+       x2="259.418"
+       y2="408.298" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#3"
+       id="linearGradient3005"
+       gradientUnits="userSpaceOnUse"
+       x1="386.19"
+       y1="408.298"
+       x2="317.203"
+       y2="408.298" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#4"
+       id="linearGradient3007"
+       gradientUnits="userSpaceOnUse"
+       x1="445.62"
+       y1="321.599"
+       x2="144.758"
+       y2="321.599" />
+    <inkscape:perspective
+       id="perspective3922"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3989"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4094"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4144"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective4285"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <g
+     inkscape:groupmode="layer"
+     id="layer1"
+     inkscape:label="hintergrund"
+     style="display:inline">
+    <path
+       id="path14"
+       d="M 105.40238,-0.99976997 L 522.70156,-0.99976997 L 522.70156,496.75517 L 105.40238,496.75517 L 105.40238,-0.99976997 z"
+       style="fill:#e5e5e5;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g22"
+       transform="translate(-22.4177,460.59473)">
+      <path
+         id="path24"
+         d="M 490.345,9.591 C 492.323,10.475 495.093,10.487 496.973,9.19501 C 497.686,8.70502 498.372,8.07202 498.372,7.18201 C 498.578,7.18298 498.712,7.54199 498.903,7.46497 C 499.556,7.20599 500.272,7.39398 500.77,7.62598 C 501.014,7.73999 501.242,7.19098 501.511,7.19098 C 501.622,7.51697 502.433,8.44098 502.433,8.48999 C 504.592,10.452 508.474,11.372 511.216,10.741 C 512.078,10.543 519.465,7.88397 519.465,7.14301 C 519.932,7.28198 520.239,7.55103 520.998,7.56799 L 522.405,7.19098 C 523.622,6.974 523.553,7.24097 524.127,7.26599 C 524.127,9.34302 523.202,12.088 524.147,14.114 C 524.24,14.314 524.524,14.734 524.671,14.883 C 528.562,18.816 534.607,17.258 539.065,15.378 C 539.065,15.509 539.321,15.664 539.321,15.795 C 539.321,15.977 539.065,16.136 539.065,16.318 C 538.718,16.318 538.491,16.445 538.202,16.655 C 535.968,18.275 533.024,19.427 530.953,21.363 C 530.748,21.554 530.755,21.758 530.755,22.055 C 530.953,22.303 531.233,22.673 531.512,22.866 C 531.596,22.924 531.761,23.031 533.646,24.05 C 535.212,24.896 536.877,25.27 538.391,25.267 C 538.391,25.452 538.243,25.642 538.248,25.846 C 538.249,25.897 538.263,25.953 538.283,26.01 C 538.303,26.067 538.329,26.127 538.355,26.186 C 538.38,26.245 538.406,26.305 538.424,26.361 C 538.442,26.418 538.452,26.473 538.449,26.523 C 538.435,26.765 538.348,26.946 538.273,27.15 C 535.947,25.986 533.408,24.919 530.808,24.182 C 529.429,23.791 528.073,23.433 526.698,23.14 C 525.502,22.885 523.178,22.636 522.495,24.182 C 521.775,25.811 522.526,27.482 522.741,29.065 C 522.442,28.928 522.237,28.311 522.023,28.598 L 521.753,29.128 C 521.407,28.386 521.105,27.39 520.895,26.552 C 520.61,25.411 520.049,24.663 518.67,24.467 C 516.52,24.162 516.738,24.402 516.005,24.829 C 514.686,25.596 513.644,27.28 513.624,29.164 C 513.3,29.111 513.237,28.824 512.912,28.771 C 512.858,28.791 512.791,28.827 512.718,28.865 C 512.645,28.902 512.565,28.942 512.485,28.97 C 512.406,28.997 512.326,29.012 512.253,29.002 C 512.18,28.991 512.113,28.955 512.059,28.878 C 512.011,28.665 511.71,28.48 511.362,28.732 L 510.426,29.128 C 510.305,28.815 509.779,28.589 509.513,28.423 C 508.263,27.646 506.25,28.398 505.475,29.417 C 505.29,29.357 505.105,29.297 504.92,29.238 C 504.726,29.137 504.454,29.017 504.009,29.295 L 503.689,29.347 C 503.689,29.09 504.138,29.071 504.297,28.818 C 504.676,28.212 505.053,27.367 505.631,26.691 C 506.621,25.534 507.574,24.173 506.833,22.669 C 506.612,22.223 506.773,22.419 505.872,21.633 C 505.339,21.167 504.557,20.579 503.915,20.28 C 501.117,18.981 497.653,18.834 494.369,19.259 C 492.658,19.48 490.98,19.737 489.504,20.324 C 489.458,20.342 489.5,20.415 489.451,20.415 C 489.503,20.234 489.833,19.981 489.653,19.878 C 489.432,19.788 489.445,19.639 489.452,19.444 L 489.47,19.13 C 489.619,19.13 489.505,19.103 489.653,19.088 C 491.83,18.856 493.749,18.172 495.786,17.455 C 496.42,17.232 497.184,16.925 497.724,16.475 C 498.074,16.183 498.519,15.706 498.519,15.26 C 498.519,14.865 498.092,13.968 497.814,13.746 C 495.618,11.989 490.082,11.054 490.032,10.985 L 489.98,10.914 C 489.983,10.817 490.248,10.754 490.317,10.57 C 490.37,10.427 490.248,10.141 490.299,10.004 C 490.39,9.75897 490.422,9.591 490.345,9.591 z"
+         style="fill:#e5e5e5;fill-rule:evenodd;stroke:#e5e5e5;stroke-width:0.215433" />
+      <path
+         id="path26"
+         d="M 517.4,15.724 C 516.856,15.774 515.867,15.971 515.57,16.416 C 515.521,16.416 515.471,16.466 515.471,16.515 C 515.323,16.565 515.224,16.961 515.026,17.06 C 515.026,17.801 514.73,18.444 515.323,19.088 L 515.422,19.186 L 515.62,19.236 C 517.104,20.027 518.538,19.928 519.923,19.038 L 519.973,18.939 C 520.072,18.89 520.269,18.593 520.467,18.593 C 520.467,18.049 520.962,17.505 520.615,16.812 C 520.517,16.614 520.022,16.466 520.022,16.268 C 519.923,16.268 519.329,15.922 519.329,15.872 L 519.132,15.872 C 518.934,15.675 517.598,15.675 517.4,15.724 z"
+         style="fill:#cccccc;fill-rule:evenodd;stroke:#b2b2b2;stroke-width:0.85039401" />
+      <path
+         id="path28"
+         d="M 538.415,25.32 C 535.942,25.023 532.833,24.232 531.002,22.402 C 530.854,22.253 530.656,21.907 530.656,21.659 L 530.755,21.61 C 530.755,21.56 530.954,21.364 531.002,21.313 C 532.332,19.931 534.325,19.27 535.87,18.171 C 537.244,17.195 538.624,16.416 538.867,16.416 C 538.972,16.364 539.23,16.312 539.312,16.268 M 538.306,27.11 C 536.624,26.615 535.109,25.564 533.426,25.023 L 530.739,24.159 C 529.725,23.832 528.707,23.526 527.72,23.367 C 525.938,23.081 524.426,22.304 522.94,23.638 C 522.002,24.48 522.203,25.27 522.203,26.507 C 522.318,27.018 522.766,28.643 522.766,29.138 M 521.737,29.125 C 521.094,27.839 521.057,25.687 519.782,24.781 C 519.178,24.351 517.109,24.246 516.411,24.479 C 515.921,24.642 515.57,25.171 515.224,25.518 C 514.284,26.457 513.628,27.891 513.628,29.226 M 510.584,29.206 C 509.632,27.935 507.443,27.497 506.222,28.786 C 506.077,28.92 505.802,29.15 505.289,29.539 M 503.785,29.268 C 504.528,28.922 504.819,28.106 505.158,27.41 C 505.758,26.177 507.768,24.291 506.857,22.81 L 506.549,22.309 C 506.26,21.803 505.033,20.925 504.904,20.796 C 504.706,20.598 504.186,20.391 503.947,20.275 C 499.932,18.314 495.44,18.992 491.235,19.78 C 490.692,19.882 489.933,20.431 489.389,20.431 M 490.052,10.94 C 490.646,11.088 491.14,11.308 491.73,11.471 C 493.119,11.852 494.891,12.073 496.181,12.756 C 496.573,12.963 497.022,13.35 497.418,13.548 C 498.16,13.894 498.506,14.685 498.457,15.526 C 498.457,15.724 498.056,16.165 497.913,16.318 C 497.265,17.006 495.881,17.445 494.994,17.752 C 493.309,18.335 491.334,19.186 489.504,19.186 L 489.455,19.236 M 490.454,9.625 C 490.984,9.896 491.068,9.81598 491.498,9.99402 C 492.992,10.612 494.998,9.995 496.38,9.39301 C 497.32,8.98297 498.409,8.18298 498.409,7.086 M 501.473,7.224 C 502.165,8.263 502.954,9.10498 504.096,9.64001 C 504.536,9.84698 505.187,10.217 505.678,10.333 C 507.71,10.811 509.43,11.136 511.515,10.728 C 511.708,10.69 511.777,10.699 512.306,10.531 C 514.45,9.849 516.875,8.698 518.835,7.612 C 518.894,7.58002 519.533,7.11401 519.549,7.11401 M 524.127,7.19202 C 524.012,8.17297 523.806,8.96399 523.807,9.5 C 523.808,11.063 523.524,12.119 523.831,13.3 C 524.395,15.477 527.655,17.063 529.172,17.208 C 532.375,17.513 535.355,16.631 538.273,15.576 C 538.32,15.559 538.471,15.526 538.57,15.526 C 538.62,15.427 539.015,15.279 539.164,15.279"
+         style="fill:none;stroke:#cccccc;stroke-width:0.85039401;stroke-linecap:round;stroke-linejoin:round" />
+      <path
+         id="path30"
+         d="M 490.822,12.951 L 491.867,12.951 L 491.867,20.662 L 490.822,20.662 L 490.822,12.951 z M 493.242,17.46 C 493.242,17.167 493.293,16.89 493.396,16.63 C 493.499,16.37 493.653,16.126 493.858,15.899 C 494.071,15.679 494.32,15.512 494.606,15.398 C 494.892,15.284 495.218,15.228 495.585,15.228 C 495.644,15.228 495.708,15.231 495.778,15.239 C 495.847,15.246 495.922,15.257 496.003,15.272 C 496.084,15.286 496.166,15.304 496.251,15.327 C 496.335,15.349 496.421,15.378 496.509,15.415 C 496.663,15.48 496.81,15.565 496.949,15.668 C 497.088,15.77 497.224,15.895 497.356,16.041 C 497.488,16.181 497.587,16.353 497.653,16.558 C 497.719,16.764 497.752,16.999 497.752,17.263 C 497.752,17.27 497.752,17.279 497.752,17.29 C 497.752,17.301 497.752,17.314 497.752,17.329 C 497.752,17.336 497.752,17.345 497.752,17.356 C 497.752,17.367 497.752,17.38 497.752,17.395 L 497.752,20.662 L 496.707,20.662 L 496.707,17.549 C 496.707,17.387 496.683,17.228 496.635,17.07 C 496.588,16.913 496.516,16.764 496.421,16.625 C 496.326,16.478 496.201,16.368 496.047,16.295 C 495.893,16.221 495.71,16.185 495.497,16.185 C 495.299,16.185 495.125,16.217 494.974,16.283 C 494.824,16.35 494.694,16.448 494.584,16.581 C 494.474,16.713 494.388,16.854 494.326,17.004 C 494.263,17.154 494.221,17.314 494.199,17.483 L 494.199,20.662 L 493.242,20.662 L 493.242,17.46 z M 498.874,14.084 L 499.908,14.084 L 499.908,15.382 L 501.91,15.382 L 501.91,16.327 L 499.908,16.327 L 499.908,19.012 C 499.908,19.114 499.915,19.206 499.93,19.287 C 499.945,19.367 499.967,19.444 499.996,19.518 C 500.025,19.591 500.089,19.644 500.189,19.677 C 500.287,19.71 500.425,19.726 500.601,19.726 L 501.822,19.705 L 501.822,20.662 L 500.524,20.662 C 500.517,20.662 500.509,20.662 500.502,20.662 C 500.495,20.662 500.487,20.662 500.48,20.662 C 500.473,20.662 500.467,20.662 500.463,20.662 C 500.46,20.662 500.454,20.665 500.447,20.673 C 500.44,20.673 500.432,20.673 500.425,20.673 C 500.418,20.673 500.41,20.673 500.403,20.673 C 500.396,20.673 500.39,20.673 500.387,20.673 C 500.383,20.673 500.377,20.673 500.37,20.673 C 500.121,20.673 499.904,20.636 499.721,20.563 C 499.538,20.489 499.387,20.376 499.27,20.222 C 499.153,20.067 499.063,19.902 499,19.726 C 498.938,19.551 498.9,19.367 498.885,19.177 C 498.878,19.162 498.874,19.145 498.874,19.127 C 498.874,19.109 498.874,19.089 498.874,19.067 C 498.874,19.052 498.874,19.035 498.874,19.017 C 498.874,18.999 498.874,18.979 498.874,18.957 L 498.874,18.934 L 498.874,14.084 z M 505.98,16.768 C 505.966,16.76 505.951,16.751 505.936,16.74 C 505.921,16.729 505.907,16.713 505.892,16.691 C 505.877,16.676 505.861,16.658 505.843,16.636 C 505.824,16.613 505.804,16.592 505.782,16.57 C 505.76,16.555 505.736,16.538 505.711,16.52 C 505.685,16.502 505.661,16.482 505.639,16.46 C 505.61,16.445 505.581,16.428 505.551,16.41 C 505.522,16.392 505.489,16.375 505.452,16.361 C 505.379,16.324 505.292,16.298 505.194,16.283 C 505.095,16.269 504.983,16.262 504.858,16.262 C 504.572,16.262 504.321,16.313 504.104,16.416 C 503.888,16.518 503.707,16.668 503.56,16.867 C 503.413,17.064 503.304,17.274 503.23,17.494 C 503.157,17.714 503.12,17.941 503.12,18.176 C 503.12,18.183 503.12,18.19 503.12,18.197 L 503.12,18.209 C 503.12,18.421 503.159,18.625 503.236,18.819 C 503.312,19.014 503.425,19.199 503.571,19.375 C 503.718,19.551 503.899,19.683 504.116,19.771 C 504.332,19.859 504.579,19.902 504.858,19.902 C 505.159,19.902 505.41,19.868 505.612,19.798 C 505.813,19.728 505.966,19.624 506.068,19.485 C 506.171,19.338 506.264,19.165 506.349,18.968 C 506.433,18.769 506.508,18.546 506.574,18.297 L 506.574,18.286 L 506.585,18.275 L 506.585,18.263 L 507.542,18.318 C 507.542,18.333 507.542,18.346 507.542,18.357 C 507.542,18.368 507.546,18.377 507.553,18.385 C 507.553,18.399 507.553,18.41 507.553,18.418 C 507.553,18.425 507.553,18.436 507.553,18.451 C 507.553,18.458 507.553,18.467 507.553,18.478 C 507.553,18.489 507.557,18.498 507.564,18.506 C 507.564,18.52 507.564,18.531 507.564,18.538 C 507.564,18.546 507.564,18.553 507.564,18.561 C 507.564,18.619 507.56,18.68 507.553,18.742 C 507.546,18.804 507.535,18.869 507.52,18.934 C 507.513,18.964 507.504,18.997 507.492,19.034 C 507.482,19.07 507.472,19.103 507.465,19.133 C 507.451,19.169 507.437,19.204 507.427,19.237 C 507.416,19.27 507.403,19.305 507.388,19.342 C 507.3,19.525 507.183,19.705 507.036,19.881 C 506.89,20.057 506.71,20.222 506.497,20.376 C 506.292,20.53 506.052,20.645 505.777,20.722 C 505.502,20.799 505.196,20.838 504.858,20.838 C 504.469,20.838 504.11,20.777 503.78,20.656 C 503.45,20.535 503.153,20.35 502.889,20.101 C 502.618,19.844 502.416,19.556 502.284,19.237 C 502.152,18.918 502.086,18.564 502.086,18.176 C 502.086,17.765 502.141,17.402 502.251,17.087 C 502.361,16.771 502.526,16.5 502.746,16.272 C 502.966,16.045 503.197,15.858 503.439,15.711 C 503.681,15.565 503.934,15.459 504.198,15.393 C 504.228,15.385 504.255,15.38 504.281,15.376 C 504.306,15.372 504.334,15.367 504.363,15.36 C 504.393,15.36 504.42,15.358 504.446,15.354 C 504.471,15.35 504.499,15.345 504.528,15.338 C 504.587,15.33 504.644,15.325 504.699,15.321 C 504.754,15.317 504.807,15.315 504.858,15.315 C 505.159,15.315 505.439,15.358 505.7,15.442 C 505.96,15.526 506.2,15.653 506.42,15.821 C 506.633,15.99 506.825,16.177 506.998,16.382 C 507.17,16.588 507.322,16.808 507.454,17.043 L 503.813,19.012 L 503.384,18.242 L 505.98,16.768 z M 508.84,15.382 L 510.479,19.54 L 511.953,15.382 L 513.086,15.382 L 511.26,20.145 C 511.216,20.255 511.166,20.348 511.111,20.425 C 511.056,20.502 510.996,20.566 510.93,20.618 C 510.864,20.662 510.796,20.698 510.727,20.728 C 510.657,20.757 510.582,20.775 510.501,20.783 C 510.494,20.783 510.488,20.783 510.484,20.783 C 510.481,20.783 510.475,20.783 510.468,20.783 C 510.461,20.783 510.453,20.783 510.446,20.783 C 510.365,20.783 510.287,20.772 510.209,20.749 C 510.132,20.728 510.054,20.694 509.973,20.651 C 509.9,20.592 509.834,20.524 509.775,20.447 C 509.716,20.37 509.665,20.277 509.621,20.167 L 507.707,15.382 L 508.84,15.382 z M 517.585,17.626 C 517.585,17.464 517.554,17.305 517.491,17.147 C 517.429,16.989 517.336,16.841 517.211,16.702 C 517.086,16.555 516.91,16.445 516.683,16.372 C 516.456,16.298 516.181,16.262 515.858,16.262 C 515.806,16.262 515.753,16.265 515.698,16.272 C 515.644,16.28 515.583,16.291 515.517,16.306 C 515.451,16.313 515.385,16.327 515.319,16.35 C 515.253,16.372 515.187,16.401 515.121,16.437 C 515.004,16.489 514.89,16.56 514.78,16.652 C 514.67,16.744 514.564,16.852 514.461,16.977 C 514.366,17.094 514.289,17.239 514.23,17.411 C 514.171,17.583 514.135,17.78 514.12,18 C 514.12,18.293 514.16,18.548 514.241,18.764 C 514.322,18.98 514.442,19.162 514.604,19.309 C 514.773,19.448 514.947,19.56 515.126,19.644 C 515.306,19.728 515.495,19.782 515.693,19.804 C 515.7,19.804 515.71,19.804 515.72,19.804 C 515.731,19.804 515.741,19.804 515.748,19.804 C 515.763,19.811 515.775,19.815 515.786,19.815 C 515.797,19.815 515.806,19.815 515.814,19.815 C 515.829,19.815 515.84,19.815 515.847,19.815 C 515.854,19.815 515.865,19.815 515.88,19.815 C 515.887,19.815 515.896,19.815 515.907,19.815 C 515.918,19.815 515.928,19.815 515.935,19.815 C 516.023,19.815 516.106,19.809 516.182,19.798 C 516.259,19.787 516.335,19.767 516.408,19.738 C 516.445,19.723 516.479,19.708 516.512,19.694 C 516.545,19.679 516.58,19.664 516.617,19.65 C 516.646,19.628 516.679,19.606 516.716,19.584 C 516.753,19.561 516.786,19.536 516.815,19.506 C 516.852,19.485 516.886,19.457 516.919,19.424 C 516.953,19.391 516.987,19.36 517.024,19.33 C 517.061,19.294 517.097,19.259 517.134,19.226 C 517.171,19.193 517.207,19.158 517.244,19.122 L 517.244,20.321 C 517.237,20.335 517.229,20.346 517.222,20.353 L 517.222,20.365 C 517.134,20.423 517.042,20.477 516.947,20.524 C 516.852,20.572 516.753,20.614 516.65,20.651 C 516.547,20.68 516.422,20.704 516.276,20.722 C 516.129,20.74 515.961,20.749 515.77,20.749 C 515.763,20.749 515.757,20.749 515.753,20.749 C 515.75,20.749 515.744,20.749 515.737,20.749 C 515.73,20.749 515.719,20.749 515.704,20.749 C 515.697,20.749 515.689,20.749 515.682,20.749 C 515.675,20.749 515.667,20.749 515.66,20.749 C 515.653,20.749 515.647,20.749 515.644,20.749 C 515.64,20.749 515.634,20.749 515.627,20.749 C 515.289,20.749 514.976,20.689 514.687,20.568 C 514.397,20.447 514.131,20.262 513.889,20.012 C 513.647,19.756 513.465,19.461 513.344,19.127 C 513.223,18.793 513.163,18.418 513.163,18 C 513.163,17.633 513.222,17.292 513.339,16.977 C 513.456,16.661 513.632,16.372 513.867,16.107 C 514.101,15.844 514.391,15.645 514.736,15.514 C 515.081,15.382 515.48,15.315 515.935,15.315 C 516.367,15.315 516.753,15.374 517.09,15.491 C 517.427,15.609 517.71,15.785 517.937,16.02 C 518.172,16.254 518.346,16.502 518.459,16.762 C 518.573,17.022 518.63,17.292 518.63,17.571 L 518.63,20.662 L 517.585,20.662 L 517.585,17.626 z M 519.664,14.084 L 520.698,14.084 L 520.698,15.382 L 522.7,15.382 L 522.7,16.327 L 520.698,16.327 L 520.698,19.012 C 520.698,19.114 520.705,19.206 520.72,19.287 C 520.735,19.367 520.757,19.444 520.786,19.518 C 520.815,19.591 520.88,19.644 520.979,19.677 C 521.078,19.71 521.215,19.726 521.391,19.726 L 522.612,19.705 L 522.612,20.662 L 521.314,20.662 C 521.307,20.662 521.299,20.662 521.292,20.662 C 521.285,20.662 521.277,20.662 521.27,20.662 C 521.263,20.662 521.257,20.662 521.254,20.662 C 521.25,20.662 521.244,20.665 521.237,20.673 C 521.23,20.673 521.222,20.673 521.215,20.673 C 521.208,20.673 521.201,20.673 521.193,20.673 C 521.186,20.673 521.18,20.673 521.177,20.673 C 521.173,20.673 521.167,20.673 521.16,20.673 C 520.911,20.673 520.695,20.636 520.511,20.563 C 520.328,20.489 520.178,20.376 520.06,20.222 C 519.943,20.067 519.853,19.902 519.791,19.726 C 519.728,19.551 519.69,19.367 519.675,19.177 C 519.668,19.162 519.664,19.145 519.664,19.127 C 519.664,19.109 519.664,19.089 519.664,19.067 C 519.664,19.052 519.664,19.035 519.664,19.017 C 519.664,18.999 519.664,18.979 519.664,18.957 L 519.664,18.934 L 519.664,14.084 z M 523.646,15.382 L 524.603,15.382 L 524.603,20.662 L 523.646,20.662 L 523.646,15.382 z M 523.569,14.161 C 523.569,14.08 523.584,14.005 523.613,13.935 C 523.643,13.865 523.69,13.805 523.756,13.754 C 523.815,13.71 523.879,13.675 523.949,13.649 C 524.018,13.623 524.09,13.61 524.163,13.61 C 524.244,13.61 524.317,13.621 524.383,13.644 C 524.449,13.665 524.515,13.702 524.581,13.754 C 524.647,13.805 524.697,13.865 524.73,13.935 C 524.763,14.005 524.779,14.087 524.779,14.182 C 524.779,14.278 524.763,14.362 524.73,14.436 C 524.697,14.509 524.651,14.571 524.592,14.623 C 524.526,14.674 524.46,14.711 524.394,14.733 C 524.328,14.754 524.259,14.766 524.185,14.766 C 524.112,14.773 524.039,14.766 523.965,14.743 C 523.892,14.722 523.822,14.685 523.756,14.633 C 523.69,14.582 523.643,14.518 523.613,14.441 C 523.584,14.364 523.569,14.278 523.569,14.182 L 523.569,14.161 z M 525.989,17.89 C 525.989,17.486 526.059,17.123 526.198,16.801 C 526.337,16.478 526.543,16.196 526.814,15.954 C 527.093,15.711 527.388,15.53 527.7,15.409 C 528.011,15.288 528.34,15.228 528.684,15.228 C 528.699,15.228 528.715,15.228 528.734,15.228 C 528.752,15.228 528.768,15.228 528.783,15.228 C 528.798,15.235 528.814,15.239 528.833,15.239 C 528.851,15.239 528.871,15.239 528.893,15.239 C 528.908,15.239 528.924,15.239 528.943,15.239 C 528.961,15.239 528.981,15.239 529.003,15.239 C 529.018,15.246 529.034,15.249 529.053,15.249 C 529.071,15.249 529.087,15.249 529.102,15.249 C 529.396,15.294 529.676,15.38 529.944,15.508 C 530.211,15.636 530.47,15.807 530.719,16.02 C 530.961,16.24 531.144,16.515 531.269,16.844 C 531.394,17.174 531.456,17.56 531.456,18 C 531.456,18.029 531.456,18.058 531.456,18.087 C 531.456,18.117 531.453,18.142 531.445,18.165 C 531.445,18.194 531.443,18.223 531.44,18.252 C 531.436,18.282 531.434,18.311 531.434,18.341 C 531.427,18.399 531.418,18.458 531.407,18.517 C 531.396,18.575 531.383,18.634 531.368,18.693 C 531.302,18.957 531.201,19.208 531.066,19.446 C 530.93,19.685 530.756,19.91 530.543,20.123 C 530.338,20.335 530.092,20.493 529.806,20.596 C 529.52,20.698 529.201,20.749 528.849,20.749 C 528.35,20.749 527.92,20.682 527.557,20.546 C 527.194,20.41 526.898,20.203 526.671,19.925 C 526.444,19.646 526.273,19.338 526.159,19.001 C 526.046,18.663 525.989,18.3 525.989,17.912 L 525.989,17.89 z M 527.034,17.89 C 527.034,17.948 527.034,18.001 527.034,18.049 C 527.034,18.097 527.038,18.146 527.045,18.197 C 527.052,18.249 527.062,18.298 527.073,18.346 C 527.084,18.394 527.093,18.443 527.1,18.495 C 527.137,18.656 527.196,18.814 527.276,18.968 C 527.357,19.122 527.456,19.268 527.573,19.408 C 527.698,19.547 527.852,19.65 528.035,19.716 C 528.219,19.782 528.435,19.815 528.684,19.815 C 528.919,19.815 529.139,19.782 529.344,19.716 C 529.549,19.65 529.737,19.551 529.905,19.419 C 530.074,19.287 530.2,19.094 530.285,18.841 C 530.369,18.588 530.411,18.278 530.411,17.912 C 530.411,17.655 530.375,17.422 530.301,17.213 C 530.228,17.004 530.118,16.819 529.971,16.658 C 529.824,16.503 529.643,16.386 529.427,16.306 C 529.21,16.225 528.963,16.185 528.684,16.185 C 528.42,16.185 528.193,16.219 528.002,16.289 C 527.812,16.359 527.654,16.467 527.529,16.613 C 527.404,16.753 527.304,16.903 527.227,17.064 C 527.15,17.226 527.096,17.391 527.067,17.56 C 527.06,17.589 527.052,17.618 527.045,17.648 C 527.038,17.677 527.034,17.706 527.034,17.736 C 527.034,17.765 527.034,17.794 527.034,17.824 C 527.034,17.853 527.034,17.882 527.034,17.912 L 527.034,17.89 z M 532.402,17.46 C 532.402,17.167 532.454,16.89 532.556,16.63 C 532.659,16.37 532.813,16.126 533.018,15.899 C 533.231,15.679 533.48,15.512 533.766,15.398 C 534.052,15.284 534.379,15.228 534.745,15.228 C 534.804,15.228 534.868,15.231 534.938,15.239 C 535.008,15.246 535.083,15.257 535.163,15.272 C 535.244,15.286 535.326,15.304 535.411,15.327 C 535.495,15.349 535.581,15.378 535.669,15.415 C 535.823,15.48 535.97,15.565 536.109,15.668 C 536.249,15.77 536.384,15.895 536.516,16.041 C 536.648,16.181 536.747,16.353 536.813,16.558 C 536.879,16.764 536.912,16.999 536.912,17.263 C 536.912,17.27 536.912,17.279 536.912,17.29 C 536.912,17.301 536.912,17.314 536.912,17.329 C 536.912,17.336 536.912,17.345 536.912,17.356 C 536.912,17.367 536.912,17.38 536.912,17.395 L 536.912,20.662 L 535.867,20.662 L 535.867,17.549 C 535.867,17.387 535.843,17.228 535.796,17.07 C 535.748,16.913 535.677,16.764 535.581,16.625 C 535.486,16.478 535.361,16.368 535.207,16.295 C 535.053,16.221 534.87,16.185 534.657,16.185 C 534.459,16.185 534.285,16.217 534.135,16.283 C 533.985,16.35 533.854,16.448 533.744,16.581 C 533.634,16.713 533.548,16.854 533.486,17.004 C 533.424,17.154 533.381,17.314 533.359,17.483 L 533.359,20.662 L 532.402,20.662 L 532.402,17.46 z"
+         style="fill:#000000;fill-rule:evenodd;stroke:none" />
+      <path
+         id="path32"
+         d="M 522.369,23.584 C 522.369,23.322 522.405,23.087 522.476,22.88 C 522.547,22.672 522.652,22.492 522.79,22.338 C 522.933,22.185 523.08,22.054 523.234,21.945 C 523.387,21.837 523.548,21.753 523.716,21.693 C 523.746,21.682 523.777,21.671 523.809,21.662 C 523.841,21.653 523.873,21.642 523.907,21.631 C 523.937,21.624 523.968,21.616 524,21.609 C 524.032,21.601 524.062,21.596 524.092,21.592 C 524.156,21.581 524.217,21.572 524.275,21.566 C 524.333,21.561 524.39,21.558 524.446,21.558 C 524.599,21.558 524.747,21.573 524.889,21.603 C 525.032,21.633 525.166,21.676 525.293,21.732 C 525.42,21.788 525.546,21.861 525.669,21.951 C 525.793,22.041 525.915,22.146 526.034,22.265 L 525.681,22.653 C 525.666,22.645 525.651,22.636 525.638,22.625 C 525.625,22.613 525.611,22.6 525.597,22.585 C 525.589,22.578 525.581,22.57 525.574,22.563 C 525.566,22.555 525.559,22.548 525.551,22.54 C 525.54,22.533 525.531,22.525 525.523,22.518 C 525.516,22.51 525.508,22.503 525.501,22.495 C 525.434,22.439 525.361,22.386 525.282,22.335 C 525.204,22.285 525.119,22.235 525.03,22.187 C 524.94,22.142 524.846,22.107 524.749,22.083 C 524.652,22.059 524.551,22.046 524.446,22.046 C 524.218,22.046 524.016,22.079 523.842,22.145 C 523.669,22.21 523.522,22.308 523.402,22.439 C 523.286,22.566 523.192,22.702 523.118,22.846 C 523.046,22.99 522.996,23.141 522.97,23.298 C 522.966,23.324 522.961,23.349 522.956,23.374 C 522.95,23.398 522.947,23.423 522.947,23.449 C 522.944,23.476 522.942,23.501 522.942,23.525 C 522.942,23.55 522.942,23.573 522.942,23.595 C 522.942,23.783 522.973,23.963 523.034,24.137 C 523.096,24.311 523.189,24.476 523.312,24.634 C 523.436,24.791 523.592,24.912 523.781,24.996 C 523.97,25.08 524.191,25.128 524.446,25.139 C 524.45,25.139 524.452,25.139 524.454,25.139 C 524.456,25.139 524.459,25.139 524.463,25.139 C 524.466,25.139 524.47,25.139 524.474,25.139 C 524.478,25.139 524.481,25.139 524.485,25.139 C 524.493,25.139 524.498,25.139 524.502,25.139 C 524.506,25.139 524.509,25.139 524.51,25.139 C 524.512,25.139 524.515,25.139 524.519,25.139 C 524.687,25.143 524.841,25.12 524.979,25.071 C 525.117,25.023 525.239,24.948 525.344,24.847 C 525.452,24.75 525.543,24.646 525.616,24.535 C 525.689,24.425 525.746,24.31 525.787,24.19 C 525.798,24.16 525.809,24.131 525.818,24.103 C 525.828,24.075 525.834,24.048 525.838,24.022 C 525.841,24.007 525.844,23.993 525.846,23.98 C 525.848,23.967 525.849,23.953 525.849,23.938 C 525.853,23.927 525.856,23.914 525.857,23.901 C 525.859,23.888 525.86,23.874 525.86,23.859 L 524.491,23.848 L 524.491,23.315 L 526.433,23.315 L 526.433,23.803 C 526.41,24.099 526.345,24.358 526.236,24.58 C 526.128,24.803 525.978,24.993 525.787,25.15 C 525.593,25.307 525.384,25.424 525.161,25.501 C 524.939,25.577 524.7,25.616 524.446,25.616 C 524.147,25.616 523.873,25.57 523.626,25.478 C 523.38,25.387 523.161,25.246 522.97,25.054 C 522.779,24.868 522.633,24.651 522.532,24.406 C 522.431,24.161 522.377,23.891 522.369,23.595 L 522.369,23.584 z M 526.921,23.713 C 526.921,23.597 526.943,23.488 526.988,23.385 C 527.033,23.282 527.102,23.188 527.196,23.101 C 527.289,23.015 527.398,22.951 527.521,22.908 C 527.645,22.865 527.783,22.843 527.937,22.843 C 528.045,22.843 528.141,22.852 528.223,22.869 C 528.305,22.885 528.372,22.909 528.425,22.939 C 528.477,22.969 528.526,23.005 528.571,23.048 C 528.616,23.091 528.655,23.141 528.689,23.197 C 528.722,23.152 528.764,23.11 528.812,23.071 C 528.861,23.031 528.919,22.993 528.986,22.956 C 529.054,22.918 529.128,22.89 529.211,22.871 C 529.293,22.853 529.385,22.843 529.486,22.843 C 529.613,22.843 529.733,22.861 529.845,22.897 C 529.957,22.932 530.062,22.987 530.159,23.062 C 530.256,23.133 530.33,23.215 530.381,23.306 C 530.431,23.398 530.458,23.5 530.462,23.612 C 530.462,23.616 530.462,23.619 530.462,23.621 C 530.462,23.622 530.462,23.625 530.462,23.629 C 530.462,23.633 530.462,23.636 530.462,23.637 C 530.462,23.639 530.462,23.642 530.462,23.646 C 530.458,23.65 530.457,23.652 530.457,23.654 C 530.457,23.656 530.457,23.659 530.457,23.663 C 530.457,23.667 530.457,23.669 530.457,23.671 C 530.457,23.673 530.457,23.676 530.457,23.68 L 530.457,25.571 L 529.968,25.571 L 529.968,23.848 C 529.968,23.852 529.968,23.853 529.968,23.851 C 529.968,23.849 529.97,23.848 529.974,23.848 C 529.974,23.844 529.974,23.842 529.974,23.84 C 529.974,23.838 529.974,23.835 529.974,23.831 C 529.974,23.824 529.974,23.817 529.974,23.811 C 529.974,23.806 529.974,23.801 529.974,23.798 C 529.974,23.786 529.973,23.775 529.971,23.764 C 529.969,23.753 529.966,23.739 529.963,23.724 C 529.959,23.713 529.956,23.701 529.954,23.688 C 529.953,23.675 529.95,23.661 529.946,23.646 C 529.931,23.601 529.909,23.558 529.879,23.517 C 529.848,23.476 529.813,23.436 529.772,23.399 C 529.731,23.362 529.686,23.334 529.637,23.315 C 529.589,23.296 529.538,23.287 529.486,23.287 C 529.418,23.287 529.356,23.299 529.298,23.323 C 529.24,23.347 529.186,23.384 529.138,23.433 C 529.089,23.481 529.051,23.533 529.023,23.587 C 528.995,23.641 528.975,23.698 528.964,23.758 C 528.96,23.766 528.957,23.774 528.955,23.783 C 528.953,23.793 528.952,23.801 528.952,23.809 C 528.952,23.82 528.952,23.829 528.952,23.837 C 528.952,23.844 528.952,23.852 528.952,23.859 L 528.952,25.571 L 528.47,25.571 L 528.47,23.893 C 528.47,23.811 528.459,23.734 528.436,23.663 C 528.414,23.592 528.38,23.526 528.335,23.466 C 528.29,23.406 528.234,23.362 528.167,23.332 C 528.1,23.302 528.023,23.287 527.937,23.287 C 527.828,23.298 527.738,23.322 527.667,23.36 C 527.596,23.397 527.544,23.447 527.51,23.511 C 527.476,23.575 527.451,23.642 527.434,23.713 C 527.417,23.784 527.409,23.857 527.409,23.932 C 527.409,23.936 527.409,23.94 527.409,23.943 L 527.409,23.949 L 527.409,25.571 L 526.921,25.571 L 526.921,23.713 z M 531.427,21.682 L 531.427,24.202 C 531.427,24.351 531.446,24.485 531.483,24.603 C 531.521,24.721 531.575,24.825 531.646,24.914 C 531.721,25.004 531.81,25.071 531.913,25.116 C 532.016,25.161 532.133,25.184 532.264,25.184 C 532.387,25.184 532.497,25.166 532.595,25.13 C 532.692,25.095 532.776,25.041 532.847,24.971 C 532.915,24.899 532.971,24.825 533.016,24.746 C 533.061,24.667 533.094,24.587 533.117,24.505 C 533.124,24.486 533.129,24.466 533.131,24.446 C 533.133,24.425 533.136,24.404 533.139,24.381 C 533.143,24.359 533.146,24.337 533.147,24.317 C 533.149,24.296 533.15,24.276 533.15,24.258 C 533.15,24.108 533.131,23.977 533.091,23.865 C 533.052,23.753 532.995,23.661 532.92,23.59 C 532.846,23.515 532.766,23.456 532.682,23.413 C 532.598,23.37 532.51,23.343 532.421,23.332 C 532.41,23.332 532.399,23.332 532.39,23.332 C 532.381,23.332 532.372,23.332 532.365,23.332 C 532.361,23.332 532.356,23.332 532.351,23.332 C 532.345,23.332 532.34,23.33 532.337,23.326 C 532.329,23.326 532.323,23.326 532.32,23.326 C 532.316,23.326 532.312,23.326 532.309,23.326 C 532.253,23.326 532.2,23.33 532.151,23.337 C 532.103,23.345 532.058,23.356 532.017,23.371 C 531.976,23.386 531.935,23.402 531.896,23.419 C 531.857,23.435 531.817,23.453 531.775,23.472 L 531.77,23.478 L 531.764,23.478 C 531.757,23.481 531.749,23.485 531.742,23.489 C 531.734,23.493 531.729,23.494 531.725,23.494 C 531.717,23.498 531.711,23.502 531.705,23.506 C 531.7,23.509 531.693,23.513 531.686,23.517 C 531.671,23.521 531.657,23.525 531.643,23.531 C 531.63,23.537 531.616,23.543 531.601,23.55 L 531.601,23.051 C 531.643,23.032 531.683,23.014 531.722,22.995 C 531.761,22.976 531.802,22.959 531.843,22.944 C 531.884,22.929 531.925,22.916 531.966,22.905 C 532.007,22.894 532.05,22.885 532.095,22.877 C 532.114,22.873 532.133,22.87 532.154,22.869 C 532.175,22.867 532.196,22.864 532.219,22.86 C 532.23,22.86 532.24,22.86 532.25,22.86 C 532.259,22.86 532.269,22.858 532.281,22.854 C 532.288,22.854 532.297,22.854 532.309,22.854 C 532.32,22.854 532.331,22.854 532.342,22.854 C 532.518,22.854 532.683,22.884 532.836,22.942 C 532.99,23 533.134,23.088 533.268,23.208 C 533.403,23.324 533.505,23.463 533.574,23.624 C 533.643,23.784 533.678,23.966 533.678,24.168 C 533.678,24.355 533.648,24.535 533.588,24.707 C 533.528,24.879 533.439,25.043 533.319,25.2 C 533.203,25.358 533.056,25.474 532.878,25.549 C 532.7,25.623 532.495,25.661 532.264,25.661 C 532.032,25.661 531.83,25.624 531.658,25.551 C 531.485,25.478 531.343,25.367 531.231,25.217 C 531.119,25.064 531.034,24.9 530.978,24.726 C 530.922,24.552 530.894,24.366 530.894,24.168 L 530.894,21.682 L 531.427,21.682 z M 534.166,21.637 L 534.694,21.637 L 534.694,23.231 L 536.378,23.231 L 536.378,21.637 L 536.905,21.637 L 536.905,25.571 L 536.378,25.571 L 536.378,23.758 L 534.694,23.758 L 534.694,25.571 L 534.166,25.571 L 534.166,21.637 z"
+         style="fill:#000000;fill-rule:evenodd;stroke:none" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:6.40893126px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="431.33109"
+       y="481.29651"
+       id="text4313"><tspan
+         sodipodi:role="line"
+         id="tspan4315"
+         x="431.33109"
+         y="481.29651">Mai 2011</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="zeichnung"
+     style="display:inline">
+    <path
+       id="path168"
+       d="M 236.92018,114.79457 L 236.92018,90.04047"
+       style="fill:none;stroke:#000000;stroke-width:1.20000005;marker-start:url(#ArrowStart)" />
+    <text
+       xml:space="preserve"
+       style="font-size:24.45913696px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="152.673"
+       y="33.06731"
+       id="text3009"><tspan
+         sodipodi:role="line"
+         id="tspan3011"
+         x="152.673"
+         y="33.06731">Funktionsweise MXD2map</tspan></text>
+    <g
+       id="g3833"
+       transform="translate(35.966454,4.7255402)">
+      <rect
+         rx="19.995394"
+         ry="19.995394"
+         y="116.97306"
+         x="151.96501"
+         height="40.990559"
+         width="97.977432"
+         id="rect3013"
+         style="fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <text
+         id="text3797"
+         style="font-size:12px;fill:#000000;fill-rule:evenodd;stroke:none;font-family:Helvetica"
+         x="171.57248"
+         y="141.83034">MXD-Datei</text>
+    </g>
+    <g
+       id="g3813"
+       transform="translate(-110.99968,288.38913)">
+      <rect
+         rx="19.995394"
+         ry="19.995394"
+         y="63.485378"
+         x="279.93552"
+         height="40.990559"
+         width="135.96869"
+         id="rect3803"
+         style="fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+      <text
+         id="text3805"
+         style="font-size:12px;fill:#000000;fill-rule:evenodd;stroke:none;display:inline;font-family:Helvetica"
+         x="302.50735"
+         y="88.342659">MapServer-Datei</text>
+    </g>
+    <g
+       id="g4010"
+       transform="translate(-35.501794,-13.38903)">
+      <g
+         transform="translate(3.9837967,53.821232)"
+         id="g3823">
+        <rect
+           ry="19.995392"
+           y="155.96408"
+           x="159.96317"
+           height="116.97305"
+           width="216.95003"
+           id="rect3799"
+           style="opacity:1;fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+           rx="19.995394" />
+        <text
+           y="174.32285"
+           x="180.57039"
+           style="font-size:12px;fill:#000000;fill-rule:evenodd;stroke:none;display:inline;font-family:Helvetica"
+           id="text3801">MXD2map</text>
+      </g>
+      <image
+         xlink:href="/home/clients/bsh/mxd-konverter/Material/architektur/img/arcgis-logo.png"
+         sodipodi:absref="/home/clients/bsh/mxd-konverter/Material/architektur/img/arcgis-logo.png"
+         width="59.406544"
+         height="41.994282"
+         id="image3924"
+         x="180.33536"
+         y="259.97614" />
+      <g
+         transform="matrix(1.4806571,0,0,1.4806571,-145.02243,-149.66876)"
+         id="g3999">
+        <image
+           y="284.87512"
+           x="278.77701"
+           id="image3991"
+           height="19.701038"
+           width="74.272911"
+           sodipodi:absref="/home/clients/bsh/mxd-konverter/Material/architektur/img/banner.png"
+           xlink:href="/home/clients/bsh/mxd-konverter/Material/architektur/img/banner.png" />
+        <text
+           xml:space="preserve"
+           style="font-size:7.32055473px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+           x="279.4693"
+           y="282.42068"
+           id="text3995"><tspan
+             sodipodi:role="line"
+             id="tspan3997"
+             x="279.4693"
+             y="282.42068">Java MapScript</tspan></text>
+      </g>
+    </g>
+    <g
+       id="g4020"
+       transform="translate(90.997215,-1.5751801)">
+      <rect
+         rx="19.995394"
+         style="opacity:1;fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         id="rect4004"
+         width="216.95003"
+         height="37.991245"
+         x="37.447952"
+         y="49.488598"
+         ry="19.995392" />
+      <text
+         xml:space="preserve"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="90.086052"
+         y="71.794769"
+         id="text4006"><tspan
+           sodipodi:role="line"
+           id="tspan4008"
+           x="90.086052"
+           y="71.794769">ArcGIS Desktop 10</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.20000005;marker-start:url(#ArrowStart)"
+       d="M 236.92018,190.40321 L 236.92018,165.64911"
+       id="path4150" />
+    <path
+       id="path4152"
+       d="M 236.92018,342.47013 L 236.92018,317.71603"
+       style="fill:none;stroke:#000000;stroke-width:1.20000005;marker-start:url(#ArrowStart)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.20000005;marker-start:url(#ArrowStart)"
+       d="M 236.92018,423.29118 L 236.92018,398.53708"
+       id="path4154" />
+    <g
+       id="g4164"
+       transform="translate(23.932742,9.0556322)">
+      <rect
+         style="fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+         id="rect4158"
+         width="97.977432"
+         height="40.990559"
+         x="379.3934"
+         y="184.44119"
+         ry="19.995394"
+         rx="19.995394" />
+      <text
+         y="208.05647"
+         x="388.72522"
+         style="font-size:12px;fill:#000000;fill-rule:evenodd;stroke:none;font-family:Helvetica"
+         id="text4160">Map-Template</text>
+    </g>
+    <path
+       id="path4168"
+       d="M 351.10187,251.88474 L 399.94887,221.36535"
+       style="fill:none;stroke:#000000;stroke-width:1.19999993;marker-start:url(#ArrowStart)"
+       inkscape:transform-center-x="-22.849842"
+       inkscape:transform-center-y="-1.3622312" />
+    <g
+       id="g4302"
+       transform="translate(-221.40187,64.906086)">
+      <rect
+         rx="19.995394"
+         style="opacity:1;fill:#9ebdf4;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.99999988;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         id="rect3821"
+         width="216.95003"
+         height="37.991245"
+         x="353.41861"
+         y="371.58163"
+         ry="19.995392" />
+      <g
+         transform="translate(226.16725,-69.349294)"
+         id="g4297">
+        <image
+           y="452.45642"
+           x="271.80328"
+           id="image4096"
+           height="14.940277"
+           width="56.324844"
+           sodipodi:absref="/home/clients/bsh/mxd-konverter/Material/architektur/img/banner.png"
+           xlink:href="/home/clients/bsh/mxd-konverter/Material/architektur/img/banner.png" />
+        <image
+           y="451.88843"
+           x="216.73216"
+           id="image4146"
+           height="16.076233"
+           width="39.831738"
+           sodipodi:absref="/home/clients/bsh/mxd-konverter/Material/architektur/img/apache.jpg"
+           xlink:href="/home/clients/bsh/mxd-konverter/Material/architektur/img/apache.jpg" />
+        <image
+           style="display:inline"
+           y="454.23315"
+           x="143.32458"
+           id="image4287"
+           height="11.386805"
+           width="60.011536"
+           sodipodi:absref="/home/clients/bsh/mxd-konverter/Material/architektur/img/openlayers-logo-40.png"
+           xlink:href="/home/clients/bsh/mxd-konverter/Material/architektur/img/openlayers-logo-40.png" />
+      </g>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="374.29175"
+       y="180.43629"
+       id="text4309"><tspan
+         sodipodi:role="line"
+         id="tspan4311"
+         x="374.29175"
+         y="180.43629">Konfigurierbar</tspan></text>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/source/INSTALL.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+../../INSTALL.txt
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/source/conf.py	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,235 @@
+# -*- coding: utf-8 -*-
+#
+# MXD2map documentation build configuration file, created by
+# sphinx-quickstart on Mon Jun 20 09:48:05 2011.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.viewcode']
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.txt'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'MXD2map'
+copyright = u'2011, foo bar'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.0.1'
+# The full version, including alpha/beta/rc tags.
+release = '0.0.1'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'de'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'MXD2mapdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'MXD2map.tex', u'MXD2map Documentation',
+   u'foo bar', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+latex_elements = {
+'preamble': r'''\newcommand{\pyHeaderFamily}{\sffamily\bfseries}
+\fancypagestyle{normal}{ \fancyhf{}
+    \fancyfoot[LE,RO]{{\pyHeaderFamily \thepage}}
+    \fancyfoot[LO]{{\pyHeaderFamily \nouppercase{\rightmark}}}
+    \fancyfoot[RE]{{\pyHeaderFamily \nouppercase{\leftmark}}}
+    \fancyhead[LE,RO]{{\pyHeaderFamily \title,
+ \releasename\space\version}}
+    \renewcommand{\headrulewidth}{0.4pt}
+    \renewcommand{\footrulewidth}{0.4pt}
+    % changes
+    %\fancyhead[LO,RE]{{\includegraphics[height=0.5cm]{InteProxy-logo.png}}}
+
+}
+''',
+'classoptions': ',oneside',
+'babel': '\\usepackage[ngerman,german]{babel}'
+} 
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'mxd2map', u'MXD2map Documentation',
+     [u'foo bar'], 1)
+]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/source/index.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,23 @@
+.. MXD2map documentation master file, created by
+   sphinx-quickstart on Mon Jun 20 09:48:05 2011.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to MXD2map's documentation!
+===================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   INSTALL.txt
+   restrictions.txt
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doku/source/restrictions.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+------------
+Restrictions
+------------
+
+Currently there are some restrictions in the usage of the converter:
+
+Supported datasources:
+
+ * ArcSDE-passwords cannot be read since they are encrypted. The converter
+ exports the string "define me" which needs to be replaced later on in the
+ resulting mapfile
+
+ * 
Binary file images/brick1.png has changed
Binary file images/grass.png has changed
Binary file images/warning.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/epsg/epsg	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+# WGS 84 / LAT-LON
+<4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <>
+
+# DHDN / Gauss-Kruger zone 3
+<31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/fonts/fonts.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,3 @@
+## SLES 11
+DejaVuSans /usr/share/fonts/truetype/DejaVuSans.ttf
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/mapfile/mapfile_header.include	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,60 @@
+STATUS ON
+SIZE 400 400 
+EXTENT 3427000 5787000 3444200 5801000
+UNITS meters
+IMAGECOLOR -1 -1 -1 #transparent
+FONTSET "../../ttf-fonts/fonts.txt"
+SYMBOLSET "../symbols/symbols.sym"
+SHAPEPATH "../../testdata-frida/"
+IMAGETYPE png 
+CONFIG "ON_MISSING_DATA" "LOG" # see http://mapserver.org/mapfile/map.html for details
+CONFIG "MS_ERRORFILE" "../../logs/ms_error.log"
+DEBUG 5
+
+MAXSIZE 2500 # 2500x2500 pixel maximum Site
+
+# Own PROJECTION-file
+CONFIG "PROJ_LIB" "../../mapserver/epsg"
+
+PROJECTION
+	"init=epsg:31467"
+END
+
+#8bit png, supports transparency.
+OUTPUTFORMAT
+	NAME aggpng
+	DRIVER AGG/PNG
+	MIMETYPE "image/png"
+	
+	## transparency only with RGBA Image Mode
+	## mapserver had to be compiled -with-experimental-png
+	
+	IMAGEMODE RGBA
+	EXTENSION "png"
+	
+	## The next options works with transparency, when requesting another
+	## layer within the same request. When requesting the layer alone,
+	## everything seems black. TODO: Verify if this is a bug or a features.
+	## Anyway, it reduces the PNG-filesize by 70% though!
+	FORMATOPTION "QUANTIZE_FORCE=ON"
+	FORMATOPTION "QUANTIZE_COLORS=256"
+	FORMATOPTION "QUANTIZE_NEW=ON"
+	
+	
+	## The next options will work with transparency but are incompatible
+	## with the previous quantization options.
+	#FORMATOPTION "PALETTE_FORCE=ON"
+	#FORMATOPTION "PALETTE=/home/geo4/mapserver/palette.txt" #to be defined
+	
+	TRANSPARENT ON
+END
+
+#24bit png, supports all colors but does not support transparency.
+OUTPUTFORMAT
+	NAME aggpng24
+	DRIVER AGG/PNG
+	MIMETYPE "image/png; mode=24bit"
+	IMAGEMODE RGBA
+	EXTENSION "png"
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/mapfile/mxd.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,41 @@
+#MapServer mxd map file
+MAP
+
+  NAME  "mxd"
+  INCLUDE "mapfile_header.include"
+
+WEB
+  IMAGEPATH "/tmp/"
+  IMAGEURL "/tmp/"
+
+  METADATA
+    'ows_title'           'Intevation MXD WMS DemoService'
+    'ows_srs'             'EPSG:4326 EPSG:31467'
+    'ows_extent'          '3427000 5787000 3444200 5801000'
+    'ows_addresstype'     'postal'
+    'ows_address'         'Neuer Graben 17'
+    'ows_postcode'        '49074'
+    'ows_city'            'Osnabrueck'
+    'ows_stateorprovince' 'DE-NDS'
+    'ows_country'         'DE'
+    'ows_contactposition' 'Geospatial'
+    'ows_contactperson'   'Bjoern Schilberg'
+    'ows_contactorganization' 'Geospatial'
+    'ows_contactvoicetelephone' '+49 541 33 50 83 0'
+    'ows_contactfacsimiletelephone' '+49 541 33 50 83 99'
+    'ows_contactelectronicmailaddress' 'geospatial@intevation.de'
+    'ows_abstract'        'MXD - Demo-Dienst für die Überprüfung der Konvertierung der MXD Dateien nach MAP Dateien.' 
+    'ows_fees'            'Die Nutzung dieses Dienstes ist kostenfrei.'
+    'ows_accessconstraints' 'Sämtliche Rechte an diesem Produkt liegen bei der Intevation GmbH.' 
+    'ows_keywordlist'     'MXD, STYLES, SYMBOLOGY'
+    'ows_sld_enabled'   'false'
+    'ows_http_max_age'  '86400' # should 24h in seconds
+    'ows_enable_request'       '*'
+    'wms_feature_info_mime_type'    'text/html'
+    'wms_getmap_formatlist' 'image/png,image/png; mode=24bit'
+    'wms_encoding' 'UTF-8'
+    'wms_exceptions_format' 'XML'
+  END
+END
+
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/rundir/Readme.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+This is a placeholder.
+
+This folder is intended to copy the generated Mapfiles to and run them
+through mapserver with the following command:
+
+http://localhost/cgi-bin/mapserv.exe?map=z:/mxd-testbed_sh/rundir/p_categorie_4pt_11classes.map&template=openlayers&mode=browse&layers=poi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mapserver/symbols/symbols.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,8 @@
+SYMBOLSET
+    # basic symbol for hatching in all variantes which
+    # will be combined inside the STYLE-block
+    SYMBOL
+      NAME "hatch"
+      TYPE hatch
+    END
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/README_mxd.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,19 @@
+===========
+MXD TESTBED
+===========
+
+For more information take a look at:
+https://bsh-intern.intevation.de/MXD/Arbeitspakete/AP2/1
+
+URLs
+====
+http://bhutan.atlas.intevation.de/cgi-bin/wms_mxd.cgi
+http://bhutan.atlas.intevation.de/cgi-bin/wms_mxd.cgi?Request=GetCapabilities&Service=WMS&Version=1.1.1
+
+
+Setting up mapserver mxd testbed under SLES 11
+==============================================
+zypper in mapserver
+ln -s /home/intevation/mxd-testbed/contrib/sh/wms_mxd.cgi /srv/www/cgi-bin
+ln -s /home/intevation/mxd-testbed/contrib/apache/mxd-testbed.conf /etc/apache2/vhosts.d/
+/etc/init.d/apache2 reload
Binary file mxd/Shapefile-SimpleFeature/Geometry/LineString/gewaesserlinien-joined.mxd.old has changed
Binary file mxd/Shapefile-SimpleFeature/Geometry/LineString/strassen-joined.mxd.old has changed
Binary file mxd/Shapefile-SimpleFeature/Geometry/Point/poi-joined.mxd.old has changed
Binary file mxd/Shapefile-SimpleFeature/Geometry/Polygon/gewaesserflaechen.mxd.old has changed
Binary file mxd/Shapefile-SimpleFeature/Geometry/Polygon/gruenflaechen-joined.mxd.old has changed
Binary file mxd/Styles/label/pol_label_allthesame.mxd has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/label/pol_label_allthesame.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+Label all entries the same
+Labelfield: gfName
+Font: Arial
+Size: 8pt
+FontColor: black
Binary file mxd/Styles/label/pol_label_scaledependent.mxd has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/label/pol_label_scaledependent.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Label all features the same way
+Font: Arial
+size: 12
+FontColor: 85 255 0
+LabelField: gfName
+Minscale: all below  1:24.000
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,30 @@
+LAYER
+	NAME "l_cartoline_04pt_c255-255-255_butt-round_template_multilayer"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_04pt_c255-255-255_butt-round_template_multilayer"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_04pt_c255-255-255_butt-round_template_multilayer"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN round #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+			OFFSET 0 -0.8
+		END
+		STYLE
+			SYMBOL "l_cartoline_04pt_c255-255-255_butt-round_template_multilayer"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN round #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+			OFFSET 0 0.8
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,7 @@
+SYMBOL
+  NAME "l_cartoline_04pt_c255-255-255_butt-round_template_multilayer"
+  ## AGG library error. Cartoline drawing is deprecated with AGG
+  #TYPE CARTOLINE
+  TYPE SIMPLE
+  PATTERN 4 1 END
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_04pt_c255-255-255_butt-round_template_multilayer.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,35 @@
+# Hinweis: Unterschied zw. erster und zweiter Layer: LineProperties.Offset
+LineProperties.Offset: -0,8000
+LineProperties.LineDecorations: None
+
+# erster Layer
+
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 0,4000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Round
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern: 4-1
+
+LineProperties.Offset: -0,8000
+LineProperties.LineDecorations: None
+
+# zweiter Layer
+
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 0,4000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Round
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern: 4-1
+
+LineProperties.Offset: 0,8000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+LAYER
+	NAME "l_cartoline_1pt_c255-255-255_butt-bever"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_1pt_c255-255-255_butt-bever"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_1pt_c255-255-255_butt-bever"
+			LINECAP butt #[butt|round|square|triangle]
+  			LINEJOIN bevel #[round|miter|bevel]
+        	#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+  NAME "l_cartoline_1pt_c255-255-255_butt-bever"
+  ## AGG library error. Cartoline drawing is deprecated with AGG
+  #TYPE CARTOLINE
+  TYPE SIMPLE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-bever.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 1,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Bevel
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern:
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+LAYER
+	NAME "l_cartoline_1pt_c255-255-255_butt-miter"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_1pt_c255-255-255_butt-miter"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_1pt_c255-255-255_butt-miter"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN miter #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+  NAME "l_cartoline_1pt_c255-255-255_butt-miter"
+  ## AGG library error. Cartoline drawing is deprecated with AGG
+  #TYPE CARTOLINE
+  TYPE SIMPLE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-miter.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 1,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Miter
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern:
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+LAYER
+	NAME "l_cartoline_1pt_c255-255-255_butt-round"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_1pt_c255-255-255_butt-round"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_1pt_c255-255-255_butt-round"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN round #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+  NAME "l_cartoline_1pt_c255-255-255_butt-round"
+  ## AGG library error. Cartoline drawing is deprecated with AGG
+  #TYPE CARTOLINE
+  TYPE SIMPLE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_butt-round.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 1,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Round
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern:
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+LAYER
+	NAME "l_cartoline_1pt_c255-255-255_round-butted"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_1pt_c255-255-255_round-butted"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_1pt_c255-255-255_round-butted"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN round #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			COLOR 0 0 0
+			WIDTH 1
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+  NAME "l_cartoline_1pt_c255-255-255_round-butted"
+  ## AGG library error. Cartoline drawing is deprecated with AGG
+  #TYPE CARTOLINE
+  TYPE SIMPLE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_1pt_c255-255-255_round-butted.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 1,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Round
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern:
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,21 @@
+LAYER
+	NAME "l_cartoline_6pt_c255-255-255_butt-round_template"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_cartoline_6pt_c255-255-255_butt-round_template"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_cartoline_6pt_c255-255-255_butt-round_template"
+			LINECAP butt #[butt|round|square|triangle]
+			LINEJOIN round #[round|miter|bevel]
+			#LINEJOINMAXSIZE 3 #only relevant for LINEJOIN type MITER
+			PATTERN 1 1 END
+			COLOR 0 0 0
+			WIDTH 6
+		END
+	END
+END
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.mxd has changed
Binary file mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+	NAME "l_cartoline_6pt_c255-255-255_butt-round_template"
+	## AGG library error. Cartoline drawing is deprecated with AGG
+	#TYPE CARTOLINE
+	TYPE SIMPLE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/CartographicLineSymbol/l_cartoline_6pt_c255-255-255_butt-round_template.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 6,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Round
+
+Template.Interval: 1,00
+Template.RepeatingMark/GapLinePattern: 1-1
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
\ No newline at end of file
Binary file mxd/Styles/line/HashLineSymbol/l_hashline_90,0_Express-Way_255-251-134_1,0.lyr has changed
Binary file mxd/Styles/line/HashLineSymbol/l_hashline_90,0_Express-Way_255-251-134_1,0.mxd has changed
Binary file mxd/Styles/line/HashLineSymbol/l_hashline_90,0_Express-Way_255-251-134_1,0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/HashLineSymbol/l_hashline_90,0_Express-Way_255-251-134_1,0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,8 @@
+SYMBOL
+  NAME "CartographicLine"
+  TYPE cartoline
+  LINECAP round  #[butt|round|square|triangle]
+  LINEJOIN miter #[round|miter|bevel]
+  LINEJOINMAXSIZE 3 
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/HashLineSymbol/l_hashline_90,0_Express-Way_255-251-134_1,0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,68 @@
+l_hashline_90,0_Express-Way_255-251-134_1,0
+
+Type: Hash Line Symbol
+Units: Points
+
+HashLine.Angle: 90,00
+HashLine.HashSymbol: Express Way
+
+CartographicLine.Color: 255 251 134
+CartographicLine.With: 1,0000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Miter
+
+Template.RepeatingMark/GapLinePattern: 1-1
+Template.Interval: 1,00
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecorations: None
+
+##HashSymbol
+
+#Layer 1
+
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 0,8000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Rount
+
+Template.RepeatingMark/GapLinePattern:
+Template.Interval: 1,00
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecoration: None
+
+#Layer 2
+
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 255 251 134
+CartographicLine.Width: 2,6000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Rount
+
+Template.RepeatingMark/GapLinePattern:
+Template.Interval: 1,00
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecoration: None
+
+#Layer 3
+
+Type: Cartographic Line Symbol
+Units: Points
+
+CartographicLine.Color: 0 0 0
+CartographicLine.Width: 3,4000
+CartographicLine.LineCaps: Butt
+CartographicLine.LineJoins: Rount
+
+Template.RepeatingMark/GapLinePattern:
+Template.Interval: 1,00
+
+LineProperties.Offset: 0,0000
+LineProperties.LineDecoration: None
\ No newline at end of file
Binary file mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,15 @@
+LAYER
+	NAME "l_markerline_18pt_0-0-0_raute"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_markerline_18pt_0-0-0_raute"
+	END
+	CLASS
+		SYMBOL "l_markerline_18pt_0-0-0_raute"
+		COLOR 0 0 0
+		SIZE 18
+	END
+END
Binary file mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.mxd has changed
Binary file mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,12 @@
+SYMBOL 
+  NAME "l_markerline_18pt_0-0-0_raute"
+  TYPE VECTOR
+  POINTS
+    0 0.5
+    0.5 0
+    1 0.5
+    0.5 1
+    0 0.5
+  END
+  FILLED FALSE 
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/MarkerLineSymbol/l_markerline_18pt_0-0-0_raute.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,12 @@
+shapefile
+Markerline
+Marker: 
+ Font: ESRI Default Marker
+ Subset: Latin
+ Unicode: 87
+ Size: 18pt
+ Angle: 0
+ Color: 0-0-0
+ Mask: None
+
+
Binary file mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_pictureline_brick1_1_1_1-0-0-0"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_pictureline_brick1_1_1_1-0-0-0"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_pictureline_brick1_1_1_1-0-0-0"
+			COLOR 0 0 0
+			SIZE 1
+		END
+	END
+END
Binary file mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.mxd has changed
Binary file mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+    NAME "l_pictureline_brick1_1_1_1-0-0-0"
+    TYPE PIXMAP
+    IMAGE "/home/intevation/mxd-testbed/images/brick1.png"
+    TRANSPARENT 0 #PictureMarker.TransparentColor: 255 255 255
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/PictureLineSymbol/l_pictureline_brick1_1_1_1-0-0-0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,12 @@
+l_pictureline_brick1_1_1_1-0-0-0
+
+Type: Picture Line Symbol
+Units: Points
+PictureLine.Picture: C:\Program Files\ArcGIS\Desktop10.0\Styles\Pictures\brick1.bmp
+PictureLine.With: 1,0000
+PictureLine.Scale X: 1,0000
+PictureLine.Scale Y: 1,0000
+PictureLine.ForegroundColor: 0 0 0
+PictureLine.BackgroundColor: No Color
+PictureLine.Transparentcolor: 
+PictureLine.Swap Foreground Color on 1 bit Images: 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/README.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,10 @@
+Possible types
+==============
+
+* 3D Simple Line Symbol (deferred)
+* 3D Texture Line Symbol (deferred)
+* Cartographic Line Symbol
+* Hash Line Symbol
+* Marker Line Symbol
+* Picture Line Symbol
+* Simple Line Symbol
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_dash-dott-dott_1pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_dash-dott-dott_1pt_c255-255-255"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_dash-dott-dott_1pt_c255-255-255"
+			COLOR 0 0 0
+			SIZE 1
+		END
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+SYMBOL
+	NAME "l_dash-dott-dott_1pt_c255-255-255"
+	TYPE SIMPLE
+
+	#dash-dot-dot line where the dashes are seven and spaces are five pixels long
+	#first number: dash length (7 pixel)
+	#second number: space length (5 pixel)
+	#third number: one pixel dot 
+	#fourth number: space length (5 pixel)
+	#five number: one pixel dot 
+	#six number: space length (5 pixel)
+	PATTERN 7 5 1 5 1 5 END 
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dott-dott_1pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Dash-Dot-Dot
+SimpleLine.Width: 1,0000
\ No newline at end of file
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_dash-dotted_1pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_dash-dotted_1pt_c255-255-255"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_dash-dotted_1pt_c255-255-255"
+			COLOR 0 0 0
+			SIZE 1
+		END
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,11 @@
+SYMBOL
+	NAME "l_dash-dotted_1pt_c255-255-255"
+	TYPE SIMPLE
+
+	#dash-dot line where the dashes are seven and spaces are five pixels long
+	#first number: dash length (7 pixel)
+	#second number: space length (5 pixel)
+	#third number: one pixel dot 
+	#fourth number: space length (5 pixel)
+	PATTERN 7 5 1 5  END 
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dash-dotted_1pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Dash-Dot
+SimpleLine.Width: 1,0000
\ No newline at end of file
Binary file mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_dashed_1pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_dashed_1pt_c255-255-255"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_dashed_1pt_c255-255-255"
+			COLOR 0 0 0
+			SIZE 1
+		END
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,9 @@
+SYMBOL
+	NAME "l_dashed_1pt_c255-255-255"
+	TYPE SIMPLE
+
+	#dashed line where the dashes and spaces are both five pixels long
+	#first number: dash length 
+	#second number: space length
+	PATTERN 5 5 END 
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dashed_1pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Dashed
+SimpleLine.Width: 1,0000
Binary file mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_dotted_1pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_dotted_1pt_c255-255-255"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_dotted_1pt_c255-255-255"
+			COLOR 0 0 0
+			SIZE 1
+		END
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,9 @@
+SYMBOL
+	NAME "l_dotted_1pt_c255-255-255"
+	TYPE SIMPLE
+
+	#dotted line where the dashes and spaces are both one pixels long
+	#first number: dash length 
+	#second number: space length
+	PATTERN 1 1 END 
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_dotted_1pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Dotted
+SimpleLine.Width: 1,0000
\ No newline at end of file
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER
+	NAME "l_solid_1pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_solid_1pt_c255-255-255"
+	END
+	CLASS
+		STYLE
+			SYMBOL "l_solid_1pt_c255-255-255"
+			COLOR 0 0 0
+			WIDTH 1
+		END
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+SYMBOL
+	NAME "l_solid_1pt_c255-255-255"
+	TYPE SIMPLE
+	FILLED TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_1pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Solid
+SimpleLine.Width: 1,0000
\ No newline at end of file
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,15 @@
+LAYER
+	NAME "l_solid_4pt_c255-255-255"
+	DATA "gewaesserlinien"
+	TYPE LINE
+	GROUP "line"
+	STATUS ON
+	METADATA
+		"wms_title"                     "l_solid_4pt_c255-255-255"
+	END
+	CLASS
+		SYMBOL "l_solid_4pt_c255-255-255"
+		COLOR 0 0 0
+		WIDTH 4
+	END
+END
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.mxd has changed
Binary file mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,3 @@
+SYMBOL
+	NAME "SimpleLineSolid"
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/line/SimpleLineSymbol/l_solid_4pt_c255-255-255.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+Type: Simple Line Symbol
+Units: Points
+
+SimpleLine.Color: 0 0 0
+SimpleLine.Style: Solid
+SimpleLine.Width: 4,0000
\ No newline at end of file
Binary file mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,19 @@
+LAYER 
+	NAME "p_arrowmarker_0-0-0_12-0"
+    TYPE POINT 
+    DATA "poi"
+    STATUS ON
+	GROUP "point"
+    METADATA
+    	"wms_title"     "p_arrowmarker_0-0-0_12-0"
+    END
+    CLASS
+    	STYLE
+			SYMBOL "p_arrowmarker_0-0-0_12-0"
+			ANGLE 90
+            COLOR 0 0 0
+            SIZE 12
+			WIDTH 8
+		END
+	END
+END
Binary file mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.mxd has changed
Binary file mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,11 @@
+SYMBOL 
+  NAME "p_arrowmarker_0-0-0_12-0"
+  TYPE VECTOR
+  POINTS
+    0 1
+    0.5 0
+    1 1
+    0 1
+  END
+  FILLED TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/ArrowMarkerSymbol/p_arrowmarker_0-0-0_12-0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,11 @@
+Type: Arrow Marker Symbol
+Units: Points
+
+ArrowMarker.Color: 0 0 0
+ArrowMarker.Length: 12,0000
+ArrowMarker.Width: 8,0000
+ArrowMarker.XOffset: 0,0000
+ArrowMarker.YOffset: 0,0000
+ArrowMarker.Angel: 0,00
+
+Mask.Style: None
\ No newline at end of file
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER 
+	NAME "p_charmarker_18pt_c255-0-0"
+    TYPE POINT 
+    DATA "poi"
+    STATUS ON
+	GROUP "point"
+    METADATA
+    	"wms_title"     "p_charmarker_18pt_c255-0-0"
+    END
+    CLASS
+    	STYLE
+			SYMBOL "p_charmarker_18pt_c255-0-0"
+            COLOR 255 0 0
+            SIZE 18
+		END
+	END
+END
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.mxd has changed
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,7 @@
+SYMBOL
+	NAME "p_charmarker_18pt_c255-0-0"
+	TYPE TRUETYPE
+	FONT "ESRIDefaultMarker"
+	CHARACTER "&#66;"
+	ANTIALIAS TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_charmarker_18pt_c255-0-0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,14 @@
+Type: Character Marker Symbol
+Units: Points
+
+CharacterMarker.Font: ESRI Default Marker
+CharacterMarker.Subset: Basic Latin
+CharacterMarker.Unicode: 66
+CharacterMarker.Size: 18
+CharacterMarker.Angel: 0,00
+CharacterMarker.Color: 255 0 0
+CharacterMarker.Offset.X:0,0000
+CharacterMarker.Offset.Y:0,0000
+
+
+CharacterMarker.Mask.Style: None
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,17 @@
+LAYER 
+	NAME "p_single_18pt_c255-255-255_ttf"
+    TYPE POINT 
+    DATA "poi"
+    STATUS ON
+	GROUP "point"
+    METADATA
+    	"wms_title"     "p_single_18pt_c255-255-255_ttf"
+    END
+    CLASS
+    	STYLE
+			SYMBOL "p_single_18pt_c255-255-255_ttf"
+            COLOR 0 0 0
+            SIZE 18
+		END
+	END
+END
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.mxd has changed
Binary file mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,7 @@
+SYMBOL
+	NAME "p_single_18pt_c255-255-255_ttf"
+	TYPE TRUETYPE
+	FONT "ESRIDefaultMarker"
+	CHARACTER "&#70;"
+	ANTIALIAS TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/CharacterMarkerSymbol/p_single_18pt_c255-255-255_ttf.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Character Marker Symbol
+Units: Points
+
+CharacterMarker.Font: ESRI Default Marker
+CharacterMarker.Subset: Basic Latin
+CharacterMarker.Unicode: 70
+CharacterMarker.Size: 18
+CharacterMarker.Angle: 0,00
+CharacterMarker.Color: 0 0 0
+CharacterMarker.Offset.X: 0,0000
+CharacterMarker.Offset.Y: 0,0000
+
+Mask.Style: None
\ No newline at end of file
Binary file mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,16 @@
+LAYER 
+	NAME "p_pictmarker_11pt_warning.bmp"
+    TYPE POINT 
+    DATA "poi"
+    STATUS ON
+	GROUP "point"
+    METADATA
+    	"wms_title"     "p_pictmarker_11pt_warning.bmp"
+    END
+    CLASS
+    	STYLE
+			SYMBOL "p_pictmarker_11pt_warning.bmp"
+            SIZE 11
+		END
+	END
+END
Binary file mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.mxd has changed
Binary file mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,6 @@
+SYMBOL
+	NAME "p_pictmarker_11pt_warning.bmp"
+	TYPE PIXMAP
+	IMAGE "/home/intevation/mxd-testbed/images/warning.png"
+	TRANSPARENT 0 #PictureMarker.TransparentColor: 255 255 255
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/PictureMarkerSymbol/p_pictmarker_11pt_warning.bmp.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,12 @@
+Type: Picture Marker Symbol
+Units: Points
+
+PictureMarker.Picture: Z:\waring.bmp
+PictureMarker.Size: 11,0
+PictureMarker.Angle: 0,00
+PictureMarker.XOffset: 0,00
+PictureMarker.YOffset: 0,00
+PictureMarker.BackgroundColor: No Color
+PictureMarker.TransparentColor: 255 255 255
+
+PictureMarker.Mask.Style: None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/README.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,16 @@
+Possible types
+==============
+
+* 3D Character Marker Symbol (deferred)
+* 3D Marker Symbol (deferred)
+* 3D Simple Marker Symbol (defeferred)
+* Arrow Marker Symbol
+* Character Marker Symbol
+* Picture Marker Symbol
+* Simple Marker Symbol
+  * Style:
+     * Circle
+     * Square
+     * Cross
+     * X
+     * Diamond
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/TODO.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,7 @@
+MAPFILE fuer:
+- p_categorie_4pt_11classes
+- p_categorie_4pt_5quantity-classes
+
+Weitere Hinweise zu Colorramps:
+http://mapserver.org/development/rfc/ms-rfc-6.html
+http://trac.osgeo.org/mapserver/ticket/1305
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_11classes.lyr has changed
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_11classes.mxd has changed
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_11classes.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_11classes.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,26 @@
+Symbology
+Symbology.Categories.UniqueValues
+Symbology.Categories.UniqueValues.ValueField:poiTypID
+
+Symbology.Categories.UniqueValues.ColorRamp:
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.MinimumValue:60
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.MaximumValue:80
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.MinimumSaturation:60
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.MaximumSaturation:80
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.SartHue:0
+Symbology.Categories.UniqueValues.ColorRamp.Ranges.EndHue:0
+
+#Properties for All Symbols ...
+Type: Simple Marker Symbol
+Units: Points
+SimpleMarker.Color: 128 128 128
+SimpleMarker.Style: Circle
+SimpleMarker.Size: 4,0000
+SimpleMarker.XOffset: 0,0000
+SimpleMarker.YOffset: 0,0000
+
+SimpleMarker.UseOutline: Yes/True
+SimpleMarker.Outline: 0 0 0
+SimpleMarker.Outline.OutlineSize: 1,0000
+
+SimpleMarker.Mask.Style: None
\ No newline at end of file
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_5quantity-classes.lyr has changed
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_5quantity-classes.mxd has changed
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_5quantity-classes.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/p_categorie_4pt_5quantity-classes.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,31 @@
+Symbology
+
+Symbology.Quantities: Graduates colors
+Symbology.Quantities.Fields.Value: poiTypID
+Symbology.Quantities.Fields.Normalization: none
+Symbology.Quantities.Classification.Method: Natural Breaks (Jenks)
+Symbology.Quantities.Classification.Classes: 5
+Symbology.Quantities.Classification.Columns: 100
+Symbology.Quantities.Classification.BreakValues: 2 4 5 7 10
+
+Symbology.ColorRamp.General.Colors.Color1.HSV: 164 17% 96%
+Symbology.ColorRamp.General.Colors.Color2.HSV: 157 77% 81%
+Symbology.ColorRamp.General.Algorithm: CIE Lab
+Symbology.ColorRamp.Black: #FIXME SLIDER
+Symbology.ColorRamp.White: #FIXME SLIDER
+
+#Properties for All Symbols ...
+Type: Simple Marker Symbol
+Units: Points
+
+SimpleMarker.Color.HSV: 164 17% 96%
+SimpleMarker.Style: Circle
+SimpleMarker.Size: 4,0000
+SimpleMarker.XOffset: 0,0000
+SimpleMarker.YOffset: 0,0000
+
+SimpleMarker.UseOutline: Yes/True
+SimpleMarker.Outline: 0 0 0
+SimpleMarker.OutlineSize: 1,0000
+
+SimpleMarker.Mask.Style: None
\ No newline at end of file
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,18 @@
+LAYER 
+	NAME "p_single_4pt_c255-0-0"
+    TYPE POINT 
+    DATA "poi"
+    STATUS ON
+	GROUP "point"
+    METADATA
+    	"wms_title"     "p_single_4pt_c255-0-0"
+    END
+    CLASS
+    	STYLE
+			SYMBOL "p_single_4pt_c255-0-0"
+			SIZE 4
+            COLOR 255 0 0
+			OUTLINECOLOR 0 0 0
+		END
+	END
+END
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.mxd has changed
Binary file mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,8 @@
+SYMBOL 
+	NAME "p_single_4pt_c255-0-0"
+	TYPE ELLIPSE
+	POINTS
+		1 1
+	END
+	FILLED TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/point/SimpleMarkerSymbol/p_single_4pt_c255-0-0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Simple Marker Symbol
+Units: Points
+
+SimpleMarker.Color: 255 0 0
+SimpleMarker.Style: Circle
+SimpleMarker.Size: 4,0000
+SimpleMarker.XOffset: 0,0000
+SimpleMarker.YOffset: 0,0000
+SimpleMarker.UseOutline: Yes/True
+SimpleMarker.Outline: 0 0 0
+SimpleMarker.OutlineSize: 1,0000
+
+SimplerMarker.Mask: None
\ No newline at end of file
Binary file mxd/Styles/polygon/GradientFillSymbol/pol_gradientfill_5_75_90_Linear.lyr has changed
Binary file mxd/Styles/polygon/GradientFillSymbol/pol_gradientfill_5_75_90_Linear.mxd has changed
Binary file mxd/Styles/polygon/GradientFillSymbol/pol_gradientfill_5_75_90_Linear.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/GradientFillSymbol/pol_gradientfill_5_75_90_Linear.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,18 @@
+pol_gradientfill_5_75_90_Linear
+
+Type: Gradient Fill symbol
+Units: Points
+GradientFill.Intervals: 5
+GradientFill.Percentage: 75
+GradientFill.Angle: 90
+GradientFill.Style: Linear
+GradientFill.ColorRamp.General.Color1:  HSV 120 20% 100%
+GradientFill.ColorRamp.General.Algorithm: CIE Lab
+GradientFill.ColorRamp.General.Black:
+GradientFill.ColorRamp.General.White:
+
+
+GradientFill.Outline.Type: Simple Line Symbol
+GradientFill.Outline.SimpleLine.Color: 110 110 110
+GradientFill.Outline.SimpleLine.Style:Solid
+GradientFill.Outline.SimpleLine.Width: 1,0000
\ No newline at end of file
Binary file mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,24 @@
+LAYER 
+        NAME "pol_linefill_255-0-0_45_outline"
+        TYPE POLYGON
+        DATA "gruenflaechen"
+        STATUS ON
+		GROUP "polygon"
+        METADATA
+                "wms_title"     "pol_linefill_255-0-0_45_outline"
+        END
+        CLASS
+                STYLE
+                        SYMBOL "pol_linefill_255-0-0_45_outline"
+                        COLOR 255 0 0
+						ANGLE 45
+						SIZE 10
+						WIDTH 3
+                END
+                STYLE # outline
+                        OUTLINECOLOR 0 0 0
+                        WIDTH 1
+                        ANTIALIAS TRUE
+                END
+        END
+END
Binary file mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.mxd has changed
Binary file mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,4 @@
+SYMBOL
+	NAME "pol_linefill_255-0-0_45_outline"
+	TYPE HATCH
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/LineFillSymbol/pol_linefill_255-0-0_45_outline.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,21 @@
+Type: Line Fill Symbol
+Units: Points
+
+LineFill.Color: 255 0 0
+LineFill.Line.Type: Simple Line Symbol
+LineFill.Line.Units: Points
+
+LineFill.Line.SimpleLine.Color: 255 0 0
+LineFill.Line.SimpleLine.Style: Dotted
+LineFill.Line.SimpleLine.Width: 1,0000
+
+LineFill.Outline.Type: Simple Line Symbol
+LineFill.Outline.Units: Points
+
+LineFill.Outline.SimpleLine.Color: 0 0 0
+LineFill.Outline.SimpleLine.Style: Soild
+LineFill.Outline.SimpleLine.Width: 1,0000
+
+LineFill.Angle: 45,00
+LineFill.Offset: 0,0000
+LineFill.Separation: 5,0000
\ No newline at end of file
Binary file mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,22 @@
+LAYER 
+	NAME "pol_marker_fill_0-0-0_1"
+	TYPE POLYGON
+	DATA "gewaesserflaechen"
+	STATUS ON
+	GROUP "polygon"
+	METADATA
+		"wms_title"     "pol_marker_fill_0-0-0_1"
+	END
+	CLASS
+		STYLE
+			SYMBOL "pol_marker_fill_0-0-0_1"
+			COLOR 0 0 0 
+			SIZE 8
+		END
+		STYLE # outline
+			OUTLINECOLOR 110 110 110
+			WIDTH 1
+			ANTIALIAS TRUE
+		END
+	END
+END
Binary file mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.mxd has changed
Binary file mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,8 @@
+SYMBOL
+	NAME "pol_marker_fill_0-0-0_1"
+	TYPE ELLIPSE
+	POINTS
+		1 1
+	END
+	FILLED TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/MarkerFillSymbol/pol_marker_fill_0-0-0_1.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+Type: Maker Fill Symbol
+Units: Points
+
+MarkerFill.Color: 0 0 0
+MarkerFill.Marker.Type: Simple Marker Symbol
+MarkerFill.Marker.Units: Points
+MarkerFill.Marker.SimpleMarker.Color: 0 0 0
+MarkerFill.Marker.SimpleMarker.Style: Circle
+MarkerFill.Marker.SimpleMarker.Size: 8,0000
+MarkerFill.Marker.SimpleMarker.XOffset: 0,0000
+MarkerFill.Marker.SimpleMarker.YOffset: 0,0000
+MarkerFill.Marker.SimpleMarker.UseOutline: #NotSet
+
+MarkerFill.Outline.Type: Simple Line Symbol
+MarkerFill.Outline.Units: Points
+MarkerFill.Outline.SimpleLine.Color: 110 110 100
+MarkerFill.Outline.Style: Solid
+MarkerFill.Outline.Width: 1,0000
+
+MarkerFill.Grid: Yes/True
\ No newline at end of file
Binary file mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+LAYER 
+        NAME "pol_single_04pt_109-187-67_0-1-1_Grassland"
+        TYPE POLYGON
+        DATA "gruenflaechen"
+        STATUS ON
+		GROUP "polygon"
+        METADATA
+                "wms_title"     "pol_single_04pt_109-187-67_0-1-1_Grassland"
+        END
+        CLASS
+                STYLE
+                        SYMBOL "pol_single_04pt_109-187-67_0-1-1_Grassland"
+                END
+                STYLE # outline
+                        OUTLINECOLOR 109 187 67
+                        WIDTH 1
+                        ANTIALIAS TRUE
+                END
+        END
+END
Binary file mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.mxd has changed
Binary file mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+SYMBOL
+    NAME "pol_single_04pt_109-187-67_0-1-1_Grassland"
+    TYPE PIXMAP
+    IMAGE "/home/intevation/mxd-testbed/images/grass.png"
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/PictureFillSymbol/pol_single_04pt_109-187-67_0-1-1_Grassland.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,22 @@
+Type: Picture Fill Symbol
+Units: Points
+
+PictureFill.Picture: Grassland
+PictureFill.Angle: 0,00
+PictureFill.ScaleX: 1,00
+PictureFill.ScaleY: 1,00
+PictureFill.ForegroundColor: 109 187 67
+PictureFill.BackgroundColor: 255 255 255
+PictureFill.TransparentColor: #NotSet
+PictureFill.SwapForegroundAndBackgroundColorOn1BitImages: #NotSet
+
+PictureFill.Outline.Type: Simple Line Symbol
+PictureFill.Outline.Units: Points
+PictureFill.Outline.simpleLine.Color: 109 187 67
+PictureFill.Outline.SimpleLine.Style: Solid
+PictureFill.Outline.SimpleLine.Width: 0,4000
+
+PictureFill.FillProperties.Offset.X: 0,0000
+PicutreFill.FillProperties.Offset.Y: 0,0000
+PictureFill.FillProperties.Separation.X: 0,0000
+PictureFill.FillProperties.Separation.Y: 0,0000
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/README.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,9 @@
+Possible types
+==============
+
+* 3D Texture Fill Symbol (deferred)
+* Gradient Fill Symbol
+* Line Fill Symbol
+* Marker Fill Symbol
+* Picture Fill Symbol
+* Simple Fill Symbol
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,21 @@
+LAYER 
+	NAME "pol_simple_255-0-0"
+	TYPE POLYGON
+	DATA "gruenflaechen"
+	STATUS ON
+	GROUP "polygon"
+	METADATA
+		"wms_title"     "pol_simple_255-0-0"
+	END
+	CLASS
+		STYLE
+			SYMBOL "pol_simple_255-0-0"
+			COLOR 255 0 0
+		END
+		STYLE # outline
+  			OUTLINECOLOR 0 0 0
+  			WIDTH 1
+  			ANTIALIAS TRUE
+		END
+	END
+END
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.mxd has changed
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+SYMBOL
+	NAME "pol_simple_255-0-0"
+	TYPE SIMPLE
+	FILLED TRUE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_255-0-0.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+Type: Simple Fill Symbol
+Units: Points
+
+SimpleFill.Color: 255 0 0
+SimpleFill.OutlineColor: 0 0 0
+SimpleFill.OutlineWidth: 1,0000
+
+SimpleFill.Outline.Type: SimpleLineSymbol
+SimpleFill.Outline.Units: Points
+
+SimpleFill.Outline.SimpleLine.Color: 0 0 0
+SimpleFill.Outline.SimpleLine.Style: Solid
+SimpleFill.Outline.SimpleLine.Width: 1,0000
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.lyr has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.map	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,21 @@
+LAYER 
+	NAME "pol_simple_transp_dashed-outline"
+	TYPE POLYGON
+	DATA "gruenflaechen"
+	STATUS ON
+	GROUP "polygon"
+	METADATA
+		"wms_title"     "pol_simple_transp_dashed-outline"
+	END
+	CLASS
+		STYLE
+			SYMBOL "pol_simple_transp_dashed-outline"
+		END
+		STYLE # outline
+			SYMBOL "l_dashed_1pt_c255-255-255"
+  			OUTLINECOLOR 0 0 0
+  			WIDTH 1
+  			ANTIALIAS TRUE
+		END
+	END
+END
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.mxd has changed
Binary file mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.sym	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,5 @@
+SYMBOL
+	NAME "pol_simple_transp_dashed-outline"
+	TYPE SIMPLE
+	FILLED FALSE
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/Styles/polygon/SimpleFillSymbol/pol_simple_transp_dashed-outline.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,12 @@
+Type: Simple Fill Symbol
+Units: Points
+
+SimpleFill.color: No Color
+SimpleFill.OutlineColor: 0 0 0
+SimpleFill.OutlineWidth: 1,0000
+
+SimpleFill.Outline.Type: Simple Line Symbol
+SimpleFill.Outline.Units: Points
+SimpleFill.Outline.SimpleLine.Color: 0 0 0
+SimpleFill.Outline.SimpleLine.Style: Dashed
+SimpleFill.Outline.SimpleLine.Width: 1,0000
Binary file mxd/connections/PGDB/pgdb_areas.mxd has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/connections/PGDB/pgdb_areas.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+Layer-Verbindung zu Personal Geodatabase ist hier einzig interessant.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mxd/connections/SDE/sde_areas.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,13 @@
+SDE:server,instanz,db,user,pw,table table 
+ogrinfo -al -so SDE:pluto,5152,SGE.SGEFeatures,gast,gast,SGE.SGEAreas \
+SGE.AREAS
+
+LAYER
+  ...
+  CONNECTIONTYPE PLUGIN
+  CONNECTION "hostname,port:xxx,database,username,password"
+  PLUGIN "C:/ms_6.1-dev/bin/msplugin_sde_93.dll"
+  DATA "layername,geometrycolumn,SDE.DEFAULT"
+  ...
+END # layer
+
Binary file mxd/empty-mxd.mxd has changed
Binary file mxd/projections/DHDN-projection-dataframe.mxd has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/properties.xml	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,30 @@
+<!-- ========================================= -->
+<!-- load environment variables -->
+<!-- ========================================= -->
+<property environment="env"/>
+<condition property="runtime.home" value="${env.AGSENGINEJAVA}">
+    <available file="arcobjects.jar" filepath="${env.AGSENGINEJAVA}/java/lib" />
+</condition>
+<condition property="runtime.home" value="${env.AGSDESKTOPJAVA}">
+    <not>
+    <isset property="runtime.home"/>
+    </not>
+</condition>
+<property name="devkit.home" value="${env.AGSDEVKITJAVA}" />
+<property name="ant.home" value="${devkit.home}/java/tools/ant"/>
+
+<!-- ========================================= -->
+<!-- directory mappings -->
+<!-- ========================================= -->
+<property name="root.dir" location="${basedir}"/>
+<basename property="sample.dir" file="${basedir}" />
+<property name="src.dir" location="src"/>
+<property name="build.dir" location="c:\tmp\build_sh"/>
+<property name="class.dir" location="${build.dir}/classes"/>
+<property name="dist.dir" location="${build.dir}/dist"/>
+<property name="libs.dir" location="lib"/>
+
+<!-- ========================================= -->
+<!-- jar file mapping -->
+<!-- ========================================= -->
+<property name="arcobjects.jar" location="${runtime.home}/java/lib/arcobjects.jar"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/ArcGISInitializer.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,143 @@
+package de.intevation.mxd;
+
+import java.io.IOException;
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.system.AoInitialize;
+import com.esri.arcgis.system.EngineInitializer;
+import com.esri.arcgis.system.esriLicenseProductCode;
+import com.esri.arcgis.system.esriLicenseStatus;
+
+/**
+ * Initializes the ArcGIS Engine and Objects.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class ArcGISInitializer {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(ArcGISInitializer.class);
+
+    /**
+     * Private member.
+     */
+    private AoInitialize    aoInit;
+    private String          engineInstallDir = "";
+
+
+    /**
+     * Init ArcGIS Java Objects.
+     */
+    public boolean initArcGIS ()
+    throws IOException {
+        logger.debug("initArcGIS()");
+
+        String engineInstallDir    = System.getenv("AGSENGINEJAVA");
+	if(engineInstallDir == null) {
+            engineInstallDir = System.getenv("AGSDESKTOPJAVA");
+	    if(engineInstallDir == null) {
+                logger.error("Could not find ArcGIS Environment. \n" +
+                             "AGSENGINEJAVA or AGSDESKTOPJAVA not set.");
+		return false;
+	    }
+	}
+
+	//Obtain the relative path to the arcobjects.jar file
+        String jarPath = engineInstallDir + "java" + File.separator + "lib" +
+            			 File.separator + "arcobjects.jar";
+
+        //Create a new file
+        File jarFile = new File(jarPath);
+        
+        //Test for file existence
+        if(!jarFile.exists()){
+                logger.error("The arcobjects.jar was not found in the following location: " +
+                                                jarFile.getParent());
+                logger.error("Verify that arcobjects.jar can be located in the specified folder.");
+                logger.error("If not present, try uninstalling your ArcGIS software and reinstalling it.");
+                System.exit(0);
+        }
+
+        //Helps load classes and resources from a search path of URLs
+        URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
+        Class<URLClassLoader> sysclass = URLClassLoader.class;
+
+        try {
+            Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
+            method.setAccessible(true);
+            method.invoke(sysloader, new Object[]{jarFile.toURI().toURL()});
+        }
+	catch (Throwable throwable) {
+            throwable.printStackTrace();
+            logger.error("Could not add arcobjects.jar to system classloader");
+            System.exit(0);
+        }
+    
+	EngineInitializer.initializeEngine();
+	
+	aoInit              = new AoInitialize();
+        return true;
+    }
+
+    /**
+     * Init ArcGIS License.
+     */
+    public boolean initArcGISLicenses()
+    throws IOException {
+        logger.debug("initArcGISLicenses()");
+        if(aoInit.isProductCodeAvailable
+           (esriLicenseProductCode.esriLicenseProductCodeEngine) ==
+           esriLicenseStatus.esriLicenseAvailable) {
+           aoInit.initialize
+               (esriLicenseProductCode.esriLicenseProductCodeEngine);
+        }
+        else if (aoInit.isProductCodeAvailable
+                 (esriLicenseProductCode.esriLicenseProductCodeArcView) ==
+                 esriLicenseStatus.esriLicenseAvailable) {
+                 aoInit.initialize
+                     (esriLicenseProductCode.esriLicenseProductCodeArcView);
+        }
+        else {
+            logger.error("Engine Runtime or ArcView" +
+                         " license not initialized.\n" +
+                         "Please install an ArcGIS product and set the" +
+                         " PATH-variable correctly.");
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Shutdown the ArcGIS Objects.
+     */
+    public boolean shutdownArcGIS()
+    throws IOException {
+        if(aoInit != null) {
+            aoInit.shutdown();
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * Get the ArcGIS Engine Directory.
+     */
+    public String getEngineDirectory()
+    throws Exception {
+        if(engineInstallDir == "") {
+            throw new Exception("Call initArcGIS() first!");
+        }
+        else {
+            return engineInstallDir;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/Converter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,147 @@
+package de.intevation.mxd;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+import java.net.MalformedURLException;
+
+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.
+ *
+ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
+ */
+public class Converter {
+
+    /**
+     * The logging is done via Log4j. To configure the logging
+     * a file 'log4j.properties' is search in the configuration
+     * directory.
+     */
+    public static final String LOG4J_PROPERTIES = "log4j.properties";
+
+    /**
+     *
+     * The path of the configuration directory.
+     */
+    public static final String CONFIG_PATH = System.getProperty("config.dir",
+                                                                "conf");
+
+
+    /**
+     * The logger used in this class.
+     */
+    private static Logger logger;
+
+    static {
+        configureLogging();
+        logger = Logger.getLogger(Converter.class);
+    }
+
+
+    /**
+     * Entrypoint for the application.
+     */
+    public static void main(String[] args) {
+        try{
+            String mxdfile = "";
+            String mapfile = "";
+            String maptemplate = "";
+            int ndx = 0;
+            if (args.length > 0) {
+                if (args[0].equals("-mxd") && args.length >= 2) {
+                    mxdfile = args[1];
+                    ndx = 2;
+                }
+            }
+            if (args.length >= ndx + 2) {
+                if (args[ndx].equals("-map")) {
+                    mapfile = args[ndx+1];
+                    ndx += 2;
+                }
+            }
+            if (args.length >= ndx + 2) {
+                if (args[ndx].equals("-template")) {
+                    maptemplate = args[ndx+1];
+                    ndx += 2;
+                }
+            }
+
+            if(mxdfile.equals("")) {
+                try {
+                    mxdfile = readProperty("mxd");
+                }
+                catch(Exception e) {
+                    e.printStackTrace ();
+                }
+            }
+            if(mapfile.equals("")) {
+                try {
+                    mapfile = readProperty("map");
+                }
+                catch(Exception e) {
+                    e.printStackTrace ();
+                }
+            }
+            if(maptemplate.equals("")) {
+                try {
+                    maptemplate = readProperty("map-template");
+                }
+                catch(Exception e) {
+                    e.printStackTrace ();
+                }
+            }
+
+            IReader reader = new MXDReader();
+            IWriter writer = new MapScriptWriter(maptemplate, mapfile);
+
+            reader.init();
+            reader.setFilename(mxdfile);
+            reader.read();
+
+            writer.write(reader.getMapDocument());
+            reader.shutdown();
+        }
+        catch(Exception e) {
+            logger.error(e.getMessage());
+        }
+    }
+
+    private static String readProperty (String key)
+    throws Exception {
+        Properties properties = new Properties();
+        BufferedInputStream stream =
+            new BufferedInputStream(
+                new FileInputStream("converter.properties")
+            );
+        properties.load(stream);
+        stream.close();
+        return properties.getProperty(key);
+    }
+    /**
+     * Trys to load the Log4j configuration
+     * from ${config.dir}/log4j.properties.
+     */
+    public static final void configureLogging() {
+        File configDir = new File(CONFIG_PATH);
+        File propFile  = new File(configDir, LOG4J_PROPERTIES);
+        if (propFile.isFile() && propFile.canRead()) {
+            try {
+                PropertyConfigurator.configure(propFile.toURI().toURL());
+            }
+            catch (MalformedURLException mue) {
+                mue.printStackTrace(System.err);
+            }
+        }
+    }
+
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/AbstractSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,45 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * Reads multi layer marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public abstract class AbstractSymbolReader implements ISymbolReader{
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(AbstractSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    protected Element parent;
+    protected MapToXMLUtils util;
+
+
+    /**
+     * Setter for the parent XML element.
+     *
+     * @param parent The XML parent node.
+     */
+    public void setParent(Element p) {
+        this.parent = p;
+    }
+
+    /**
+     * Setter for XML document helper.
+     *
+     * @param util The helper class for storing map information.
+     */
+    public void setUtil(MapToXMLUtils u) {
+        this.util = u;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/ArrowMarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,162 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.ArrowMarkerSymbol;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.awt.Color;
+
+import java.io.IOException;
+
+/**
+ * Reads arrow marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class ArrowMarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(ArrowMarkerSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private ArrowMarkerSymbol symbol;
+
+    public ArrowMarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof ArrowMarkerSymbol) {
+            this.symbol = (ArrowMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a ArrowMarkerSymbol!");
+        }
+    }
+
+    public ArrowMarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof ArrowMarkerSymbol) {
+            this.symbol = (ArrowMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a ArrowMarkerSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try{
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "angle",
+                String.valueOf(symbol.getAngle()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read angle.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "size",
+                String.valueOf(symbol.getSize()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read size. Setting size to 1.");
+            symbolElement.setAttribute("size", "1");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "x_offset",
+                String.valueOf(symbol.getXOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "y_offset",
+                String.valueOf(symbol.getYOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read y-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "name",
+                symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "length",
+                String.valueOf(symbol.getLength()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read length.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "width",
+                String.valueOf(symbol.getWidth()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read width.");
+        }
+        symbolElement.setAttribute("style", "arrow");
+        symbolElement.setAttribute("type", "marker");
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/CartoLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,207 @@
+package de.intevation.mxd.reader;
+
+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.CartographicLineSymbol;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+import com.esri.arcgis.display.Template;
+
+import com.esri.arcgis.display.esriLineCapStyle;
+import com.esri.arcgis.display.esriLineJoinStyle;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads cartoline symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class CartoLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(CartoLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private CartographicLineSymbol symbol;
+
+    public CartoLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof CartographicLineSymbol) {
+            this.symbol = (CartographicLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a CartographicLineSymbol!");
+        }
+    }
+
+
+    public CartoLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof CartographicLineSymbol) {
+            this.symbol = (CartographicLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a CartographicLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            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()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        int cap;
+        String capStyle = "";
+        try {
+            cap = symbol.getCap();
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read line cap.");
+            cap = -1;
+        }
+        switch(cap) {
+            case esriLineCapStyle.esriLCSRound: capStyle = "round"; break;
+            case esriLineCapStyle.esriLCSSquare: capStyle = "square"; break;
+            default: break;
+        }
+
+
+        int join;
+        String joinStyle = "";
+        try {
+            join = symbol.getJoin();
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read line join." +
+                " Setting line join to \"bevel\".");
+            join = -1;
+        }
+        switch(join) {
+            case esriLineJoinStyle.esriLJSRound: joinStyle = "round"; break;
+            case esriLineJoinStyle.esriLJSMitre: joinStyle = "miter"; break;
+            default: break;
+        }
+        if(!capStyle.equals("")) {
+            symbolElement.setAttribute("cap", capStyle);
+        }
+        if (!joinStyle.equals("")) {
+            symbolElement.setAttribute("join", joinStyle);
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "linestart",
+                String.valueOf(symbol.getLineStartOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read line start offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "miterlimit",
+                String.valueOf(symbol.getMiterLimit()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read miter limit.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "offset",
+                String.valueOf(symbol.getOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "width",
+                String.valueOf(symbol.getWidth()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read width.");
+        }
+        //TODO Read further attributes depending on the Mapscript functionality:
+        //     Template, MarkerSymbol, LineDecorations
+
+        try {
+            Template temp = (Template)symbol.getTemplate();
+            double length = temp.getInterval();
+            int count = temp.getPatternElementCount();
+            symbolElement.setAttribute("pattern_count", String.valueOf(count));
+            for (int j = 0; j < count; j++) {
+                double[] mark = new double[1];
+                double[] gap = new double[1];
+                temp.getPatternElement(j, mark, gap);
+                symbolElement.setAttribute(
+                    "mark_" + j,
+                    String.valueOf(mark[0]));
+                symbolElement.setAttribute("gap_" + j, String.valueOf(gap[0]));
+            }
+        }
+        catch(IOException ioe){
+            logger.warn("Could not read pattern elements.");
+        }
+        catch(NullPointerException npe) {
+            logger.debug("No pattern elements in carto line symbol"); 
+        }
+        symbolElement.setAttribute("type", "line");
+        symbolElement.setAttribute("style", "carto");
+
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/CharacterMarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,170 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.CharacterMarkerSymbol;
+import com.esri.arcgis.support.ms.stdole.Font;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.awt.Color;
+import java.io.IOException;
+
+/**
+ * Reads character marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class CharacterMarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(CharacterMarkerSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private CharacterMarkerSymbol symbol;
+
+    public CharacterMarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof CharacterMarkerSymbol) {
+            this.symbol = (CharacterMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a CharacterMarkerSymbol!");
+        }
+    }
+
+    public CharacterMarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof CharacterMarkerSymbol) {
+            this.symbol = (CharacterMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a CharacterMarkerSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute(
+                "angle",
+                String.valueOf(symbol.getAngle()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read angle.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "size",
+                String.valueOf(symbol.getSize()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read size.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "x_offset",
+                String.valueOf(symbol.getXOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "y_offset",
+                String.valueOf(symbol.getYOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read y-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "name",
+                symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "char",
+                String.valueOf(symbol.getCharacterIndex()));
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read character number.");
+        }
+
+        try {
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            Font f = symbol.getFont();
+            symbolElement.setAttribute("font", f.getName());
+            symbolElement.setAttribute("char_set", String.valueOf(f.getCharset()));
+            symbolElement.setAttribute("bold", String.valueOf(f.getBold()));
+            symbolElement.setAttribute("italic", String.valueOf(f.getItalic()));
+            symbolElement.setAttribute("font_size", String.valueOf(f.getSize()));
+            symbolElement.setAttribute(
+                "strike_through",
+                String.valueOf(f.getStrikethrough()));
+            symbolElement.setAttribute("weight", String.valueOf(f.getWeight()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read font. Setting font to \"FreeSans\".");
+            symbolElement.setAttribute("font", "FreeSans");
+        }
+        symbolElement.setAttribute("style", "char");
+        symbolElement.setAttribute("type", "marker");
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/ClassBreakRendererReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,141 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.IFeatureRenderer;
+import com.esri.arcgis.carto.ClassBreaksRenderer;
+import com.esri.arcgis.display.ISymbol;
+
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+import java.io.IOException;
+
+/**
+ * Reads the ClassBreaksRender Object Attributes.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class ClassBreakRendererReader
+implements IRendererReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(ClassBreakRendererReader.class);
+
+    /**
+     * Private member.
+     */
+    private ClassBreaksRenderer renderer;
+    private Element layer;
+    private MapToXMLUtils util;
+
+
+    public ClassBreakRendererReader(IFeatureRenderer renderer)
+    throws Exception {
+        logger.debug("contructor()");
+        if(renderer instanceof ClassBreaksRenderer)
+            this.renderer = (ClassBreaksRenderer)renderer;
+        else
+            throw new Exception("Not a ClassBreaksRenderer!");
+    }
+
+    /**
+     * Setter for the parent XML element.
+     *
+     * @param parent The XML parent node.
+     */
+    public void setParent(Element parent) {
+        this.layer = 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 Renderer attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+
+        int count = 0;
+        try {
+            count = renderer.getBreakCount();
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "No break symbols found in renderer." +
+                " Stopped reading this renderer.");
+            return layer;
+        }
+
+        for(int i = 0; i < count; i++){
+            Element rendererElement = util.addRenderer(layer);
+            try {
+                rendererElement.setAttribute("value",
+                    String.valueOf(renderer.getBreak(i)));
+                rendererElement.setAttribute("label", renderer.getLabel(i));
+                rendererElement.setAttribute(
+                    "field_count",
+                    String.valueOf(renderer.getFieldCount()));
+                for(int j = 0; j < renderer.getFieldCount(); j++) {
+                    rendererElement.setAttribute(
+                        "expression_field_" + j,
+                        renderer.getField(j));
+
+                }
+                rendererElement.setAttribute(
+                    "min_value",
+                    String.valueOf(renderer.getLowBreak(i)));
+                rendererElement.setAttribute("expression_operator", "<=");
+
+                ISymbol sym = renderer.getSymbol(i);
+                MarkerSymbolReader markerReader = new MarkerSymbolReader();
+                LineSymbolReader lineReader = new LineSymbolReader();
+                FillSymbolReader fillReader = new FillSymbolReader();
+                if(markerReader.canRead(sym)) {
+                    markerReader.setSymbol(sym);
+                    markerReader.setUtil(util);
+                    markerReader.setParent(rendererElement);
+                    markerReader.read();
+                }
+                else if(lineReader.canRead(sym)) {
+                    lineReader.setSymbol(sym);
+                    lineReader.setUtil(util);
+                    lineReader.setParent(rendererElement);
+                    lineReader.read();
+                }
+                else if(fillReader.canRead(sym)) {
+                    fillReader.setSymbol(sym);
+                    fillReader.setUtil(util);
+                    fillReader.setParent(rendererElement);
+                    fillReader.read();
+                }
+                else {
+                    logger.debug("Not a known symbol type: " +
+                                 sym.getClass().toString());
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read data for " + i +
+                    ". break of renderer. Stopped reading this renderer.");
+                return layer;
+            }
+        }
+        return layer;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/FeatureClassReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,65 @@
+package de.intevation.mxd.reader;
+
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.geodatabase.IClass;
+import com.esri.arcgis.geodatabase.FeatureClass;
+
+import org.w3c.dom.Node;
+
+/**
+ * Reads FeatureClass information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class FeatureClassReader
+implements IClassReader {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(FeatureClassReader.class);
+
+    /**
+     * Private member.
+     */
+    private IClass fclass;
+    private Node parent;
+
+
+    public FeatureClassReader(IClass cl)
+    throws Exception {
+        if(cl instanceof FeatureClass) {
+            this.fclass = cl;
+        }
+        else {
+            throw new Exception("Not a FeatureClass object!" +
+                                cl.getClass().toString());
+        }
+    }
+
+    /**
+     * Reads the Layer content.
+     *
+     * @return Currently always false.
+     */
+    public boolean read()
+    throws IOException {
+        logger.debug("read() -> not implemented jet.");
+        return false;
+    }
+
+    public void getClassDoc()
+    throws IOException {
+        logger.debug("getLayer() -> not implemented jet.");
+        return;
+    }
+
+    public void setXMLNode(Node node) {
+        parent = node;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/FeatureLayerReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,229 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.ILayer;
+import com.esri.arcgis.carto.FeatureLayer;
+import com.esri.arcgis.geodatabase.FeatureClassName;
+import com.esri.arcgis.system.IName;
+import com.esri.arcgis.system.IPropertySet;
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+import java.io.IOException;
+import com.esri.arcgis.interop.AutomationException;
+/**
+ * Reads Layer information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class FeatureLayerReader
+implements ILayerReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(FeatureLayerReader.class);
+
+    /**
+     * Privte member.
+     */
+    private FeatureLayer  layer;
+    private MapToXMLUtils util;
+
+
+    public FeatureLayerReader(ILayer layer)
+    throws Exception {
+        if(layer instanceof FeatureLayer) {
+            this.layer = (FeatureLayer)layer;
+        }
+        else {
+            throw new Exception("Not an instance of FeatureLayer: " +
+                layer.getClass().toString());
+        }
+    }
+
+    /**
+     * Setter for XML document helper.
+     *
+     * @param util The helper for storing map information.
+     */
+    public void setUtil(MapToXMLUtils util) {
+        this.util = util;
+    }
+
+    /**
+     * Reads the Layer content.
+     *
+     * @return The layer XML element.
+     */
+    public Element read()
+    throws IOException{
+        logger.debug("read()");
+        Element layerElement;
+        try {
+            layerElement = util.addLayer();
+        }
+        catch(Exception e) {
+            logger.error("Failed to create DOM-Element for Layer.");
+            return null;
+        }
+
+        try {
+            layerElement.setAttribute("name", layer.getName());
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read layer name." +
+                " Stopped reading layer.");
+            throw new IOException("Error reading layer name.");
+        }
+
+        try {
+            layerElement.setAttribute("min_scale",
+                String.valueOf(layer.getMinimumScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read minimum scale.");
+        }
+
+        try {
+            layerElement.setAttribute("max_scale",
+                String.valueOf(layer.getMaximumScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read maximum scale.");
+        }
+
+        try {
+            if(layer.isVisible()) {
+                layerElement.setAttribute("status", "on");
+            }
+            else {
+                layerElement.setAttribute("status", "off");
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read layer status." +
+                " Setting layer status to \"on\".");
+            layerElement.setAttribute("status", "on");
+        }
+
+        int type = 0;
+        try {
+            type = layer.getShapeType();
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read shape type.");
+            throw new IOException("Error reading shape type.");
+        }
+        switch (type) {
+            case 0: layerElement.setAttribute("type", "none"); break;
+            case 1: layerElement.setAttribute("type", "point"); break;
+            case 3: layerElement.setAttribute("type", "line"); break;
+            case 4: layerElement.setAttribute("type", "polygon"); break;
+        }
+
+        try {
+            layerElement.setAttribute("definition_query",
+                layer.getDefinitionExpression());
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read definition query.");
+        }
+        try {
+            IName fcn = layer.getDataSourceName();
+            if(fcn instanceof FeatureClassName) {
+                FeatureClassName name = (FeatureClassName)fcn;
+                layerElement.setAttribute("data_source", name.getName());
+            }
+            else {
+                logger.debug (
+                    "Unknown FeatureClass name:" +
+                    fcn.getClass().toString());
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read datasource." +
+                " Stopped reading layer " + layer.getName() + ".");
+            util.removeLayer(layerElement);
+            return null;
+        }
+
+        try {
+            String datatype = layer.getDataSourceType();
+            if(layer.getWorkspace().getType() == 0) {
+                layerElement.setAttribute("connection_type", "local");
+                layerElement.setAttribute(
+                    "workspace",
+                    layer.getWorkspace().getPathName());
+            }
+            else if(layer.getWorkspace().getType() == 1){
+                layerElement.setAttribute("connection_type", "ogr");
+                layerElement.setAttribute(
+                    "data",
+                    layer.getFeatureClass().getFeatureDataset().getName());
+                layerElement.setAttribute(
+                    "workspace",
+                    layer.getWorkspace().getPathName());
+
+            }
+            else if(layer.getWorkspace().getType() == 2) {
+                IPropertySet set = layer.getWorkspace().getConnectionProperties();
+                Object names[] = new Object[set.getCount()];
+                Object prop[] = new Object[set.getCount()];
+                set.getAllProperties(names, prop);
+                layerElement.setAttribute("connection_type", "SDE");
+                for(int i = 0; i < names.length; i++) {
+                    if(names[i] != null) {
+                        String[] prop_names = (String[])names[i];
+                        for(int j = 0; j < prop_names.length; j++) {
+                            layerElement.setAttribute(
+                                prop_names[j].toLowerCase(),
+                                set.getProperty(prop_names[j]).toString());
+                        }
+                    }
+                }
+                try {
+                    layerElement.setAttribute(
+                        "join_table",
+                        layer.getRelationshipClass()
+                             .getOriginClass().getAliasName());
+                    layerElement.setAttribute(
+                        "join_field",
+                        layer.getRelationshipClass().getOriginPrimaryKey());
+                    layerElement.setAttribute(
+                        "join_table_target",
+                        layer.getRelationshipClass()
+                             .getDestinationClass().getAliasName());
+                    layerElement.setAttribute(
+                        "join_field_target",
+                        layer.getRelationshipClass().getOriginForeignKey());
+                }
+                catch(AutomationException ioe) {
+                    //Do nothing, cause no jointable defined.
+                }
+                catch(IOException ae) {
+                    //Do nothing, cause no jointable defined.
+                }
+                catch(NullPointerException npe) {
+                    //Do nothing, cause no jointable defined.
+                }
+            }
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not read layer datasource." +
+                " Stopped reading layer " + layer.getName() + ".");
+            util.removeLayer(layerElement);
+            return null;
+        }
+        return layerElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/FillSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,154 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.w3c.dom.Element;
+
+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.LineFillSymbol;
+
+/**
+ * Wrapper for fill symbol reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class FillSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(FillSymbolReader.class);
+
+    private ISymbol symbol;
+    private IFillSymbol fillSymbol;
+
+    public FillSymbolReader() throws Exception{
+        logger.debug("contructor()");
+        this.symbol = null;
+        this.fillSymbol = null;
+    }
+
+    public FillSymbolReader(ISymbol symbol) throws Exception{
+        logger.debug("contructor(ISymbol)");
+        this.symbol = symbol;
+        this.fillSymbol = null;
+    }
+
+    public FillSymbolReader(IFillSymbol symbol) throws Exception{
+        logger.debug("contructor(ILineSymbol)");
+        this.fillSymbol = symbol;
+        this.symbol= null;
+    }
+
+    public Element read() {
+        ISymbolReader sreader = null;
+        if(symbol != null) {
+            try {
+                if(symbol instanceof SimpleFillSymbol) {
+                    sreader = new SimpleFillSymbolReader(symbol);
+                }
+                else if(symbol instanceof MultiLayerFillSymbol) {
+                    sreader = new MultiLayerFillSymbolReader(symbol);
+                }
+                else if(symbol instanceof MarkerFillSymbol) {
+                    sreader = new MarkerFillSymbolReader(symbol);
+                }
+                else if(symbol instanceof LineFillSymbol) {
+                    sreader = new LineFillSymbolReader(symbol);
+                }
+                else {
+                    logger.debug("The reader for type " + symbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+            }
+        }
+        else if(fillSymbol != null) {
+            try {
+                if(fillSymbol instanceof SimpleFillSymbol) {
+                    sreader = new SimpleFillSymbolReader(fillSymbol);
+                }
+                else if(fillSymbol instanceof MultiLayerFillSymbol) {
+                    sreader = new MultiLayerFillSymbolReader(fillSymbol);
+                }
+                else if(fillSymbol instanceof MarkerFillSymbol) {
+                    sreader = new MarkerFillSymbolReader(fillSymbol);
+                }
+                else if(fillSymbol instanceof LineFillSymbol) {
+                    sreader = new LineFillSymbolReader(fillSymbol);
+                }
+                else {
+                    logger.debug("The reader for type " +
+                                 fillSymbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+            }
+        }
+        else {
+            return parent;
+        }
+        if (sreader != null) {
+            sreader.setParent(parent);
+            sreader.setUtil(util);
+            sreader.read();
+        }
+        return parent;
+    }
+
+    public void setSymbol(ISymbol sym) {
+        this.symbol = sym;
+        this.fillSymbol = null;
+    }
+
+    public void setSymbol(IFillSymbol sym) {
+        this.symbol = null;
+        this.fillSymbol = sym;
+    }
+
+    public boolean canRead(ISymbol sym) {
+        if(sym instanceof SimpleFillSymbol ||
+           sym instanceof MarkerFillSymbol ||
+           sym instanceof MultiLayerFillSymbol ||
+           sym instanceof LineFillSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    public boolean canRead(IFillSymbol sym) {
+        if(sym instanceof SimpleFillSymbol ||
+           sym instanceof MarkerFillSymbol ||
+           sym instanceof MultiLayerFillSymbol ||
+           sym instanceof LineFillSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/GdbRasterCatalogLayerReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,125 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.ILayer;
+import com.esri.arcgis.carto.GdbRasterCatalogLayer;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * Reads Layer information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class GdbRasterCatalogLayerReader
+implements ILayerReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(GdbRasterCatalogLayerReader.class);
+
+    /**
+     * Privte member.
+     */
+    private GdbRasterCatalogLayer  layer;
+    private MapToXMLUtils util;
+
+
+    public GdbRasterCatalogLayerReader(ILayer layer)
+    throws Exception {
+        if(layer instanceof GdbRasterCatalogLayer) {
+            this.layer = (GdbRasterCatalogLayer)layer;
+        }
+        else {
+            throw new Exception("Not an instance of GdbRastaCatalogLayer: " +
+                layer.getClass().toString());
+        }
+    }
+
+    /**
+     * Setter for XML document helper.
+     *
+     * @param util The helper for storing map information.
+     */
+    public void setUtil(MapToXMLUtils util) {
+        this.util = util;
+    }
+
+    /**
+     * Reads the Layer content.
+     *
+     * @return The layer XML element.
+     */
+    public Element read()
+    throws IOException {
+        logger.debug("read()");
+
+        Element layerElement;
+        try {
+            layerElement = util.addLayer();
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not create DOM element for layer." +
+                "Stopped reading layer.");
+            throw new IOException(
+                this.getClass().toString() +
+                "Error creating dom element");
+        }
+
+        try {
+            layerElement.setAttribute("name", layer.getName());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read layer name. Stopped reading layer.");
+            throw new IOException("Error reading layer name.");
+        }
+
+        try {
+            layerElement.setAttribute("min_scale",
+                String.valueOf(layer.getMinimumScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read minimum layer scale.");
+        }
+
+        try {
+            layerElement.setAttribute("max_scale",
+                String.valueOf(layer.getMaximumScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read maximum layer scale.");
+        }
+
+        try {
+            if(layer.isVisible()) {
+                layerElement.setAttribute("status", "on");
+            }
+            else {
+                layerElement.setAttribute("status", "off");
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read layer status." +
+                " Setting layer status to \"on\"");
+            layerElement.setAttribute("status", "on");
+        }
+
+        try {
+            layerElement.setAttribute("definition_query",
+                layer.getDefinitionExpression());
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read layer definition query.");
+        }
+        return layerElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/HashLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,201 @@
+package de.intevation.mxd.reader;
+
+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.HashLineSymbol;
+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 java.io.IOException;
+
+/**
+ * Reads cartoline symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class HashLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(HashLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private HashLineSymbol symbol;
+
+    public HashLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof HashLineSymbol) {
+            this.symbol = (HashLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a HashLineSymbol!");
+        }
+    }
+
+    public HashLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof HashLineSymbol) {
+            this.symbol = (HashLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a HashLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\".");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            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()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        int cap;
+        try {
+            cap = symbol.getCap();
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read line cap.");
+            cap = -1;
+        }
+        String capStyle = "";
+        switch(cap) {
+            case esriLineCapStyle.esriLCSRound: capStyle = "round"; break;
+            case esriLineCapStyle.esriLCSSquare: capStyle = "square"; break;
+            default: break;
+        }
+
+        int join;
+        try {
+            join = symbol.getJoin();
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read line join.");
+            join = -1;
+        }
+        String joinStyle = "";
+        switch(join) {
+            case esriLineJoinStyle.esriLJSRound: joinStyle = "round"; break;
+            case esriLineJoinStyle.esriLJSMitre: joinStyle = "miter"; break;
+            default: break;
+        }
+        if(!capStyle.equals("")) {
+            symbolElement.setAttribute("cap", capStyle);
+        }
+        if(!joinStyle.equals("")) {
+            symbolElement.setAttribute("join", joinStyle);
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "linestart",
+                String.valueOf(symbol.getLineStartOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read line start offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "miterlimit",
+                String.valueOf(symbol.getMiterLimit()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read miter limit.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "offset",
+                String.valueOf(symbol.getOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "width",
+                 String.valueOf(symbol.getWidth()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read width.");
+        }
+
+        try {
+            ILineSymbol ls = symbol.getHashSymbol();
+            readHashSymbol(ls, symbolElement);
+        }
+        catch(Exception e) {
+            logger.warn(
+                "Could not read HashSymbol." +
+                " No fallback symbol defined.");
+        }
+
+        //TODO Read further HashLine specific attributes:
+        //     LineDecoration, Template.
+        symbolElement.setAttribute("type", "line");
+        symbolElement.setAttribute("style", "hash");
+
+        return symbolElement;
+    }
+
+    private void readHashSymbol(ILineSymbol ls, Element parent) 
+    throws Exception {
+        LineSymbolReader lsr = new LineSymbolReader ();
+        if (lsr.canRead(ls)) {
+            lsr.setSymbol(ls);
+            lsr.setParent(parent);
+            lsr.setUtil(util);
+            lsr.read();
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/IClassReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,18 @@
+package de.intevation.mxd.reader;
+
+import java.io.IOException;
+
+import org.w3c.dom.Node;
+/**
+ * The interface to the class reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface IClassReader{
+
+    boolean read() throws IOException;
+    void getClassDoc() throws IOException;
+    void setXMLNode(Node node);
+
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/ILayerReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,19 @@
+package de.intevation.mxd.reader;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * The interface to the layer reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface ILayerReader{
+
+    void setUtil(MapToXMLUtils util);
+    Element read() throws IOException;
+
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/IReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,38 @@
+package de.intevation.mxd.reader;
+
+import java.io.IOException;
+
+import org.w3c.dom.Document;
+
+/**
+ * The interface to the MXD-Reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface IReader {
+    /**
+     * Initializes the reader component.
+     */
+    boolean init() throws IOException;
+
+    /**
+     * Method to perform actions at the of reader usage.
+     */
+    boolean shutdown() throws IOException;
+
+    /**
+     * Set the filename.
+     */
+    void setFilename(String name);
+
+    /**
+     * Read the content.
+     */
+    boolean read() throws Exception;
+
+    /**
+     * Request DOM Document containing the map data.
+     */
+    Document getMapDocument();
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/IRendererReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,22 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * The interface to the renderer reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface IRendererReader{
+
+    Element read();
+
+    void setParent(Element parent);
+    void setUtil(MapToXMLUtils util);
+
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/ISymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,21 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * The interface to the symbol reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface ISymbolReader{
+
+    Element read();
+
+    void setParent(Element parent);
+    void setUtil(MapToXMLUtils util);
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/LineFillSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,171 @@
+package de.intevation.mxd.reader;
+
+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.ILineSymbol;
+import com.esri.arcgis.display.LineFillSymbol;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads marker line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class LineFillSymbolReader
+extends AbstractSymbolReader{
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(LineFillSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private LineFillSymbol symbol;
+
+    public LineFillSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof LineFillSymbol) {
+            this.symbol = (LineFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a LineFillSymbol!");
+        }
+    }
+
+
+    public LineFillSymbolReader(IFillSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof LineFillSymbol) {
+            this.symbol = (LineFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a LineFillSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\".");
+            symbolElement.setAttribute("name", "default");
+        }
+        symbolElement.setAttribute("style", "fill");
+
+        try {
+            symbolElement.setAttribute(
+                "offset",
+                String.valueOf(symbol.getOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "separation",
+                String.valueOf(symbol.getSeparation()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read separation.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "angle",
+                String.valueOf(symbol.getAngle()));
+        }
+        catch(IOException e) {
+            logger.warn("Could not read angle.");
+        }
+
+        try {
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            ILineSymbol ols = symbol.getOutline();
+            LineSymbolReader olsr = new LineSymbolReader();
+            if(olsr.canRead(ols)) {
+                olsr.setSymbol(ols);
+                olsr.setUtil(util);
+                olsr.setParent(symbolElement);
+                olsr.read();
+            }
+            else {
+                logger.debug("The type of " + ols.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read outline.");
+        }
+
+        try {
+            ILineSymbol ls = symbol.getLineSymbol();
+            LineSymbolReader lsr = new LineSymbolReader();
+            if(lsr.canRead(ls)) {
+                symbolElement.setAttribute("hatch", "1");
+                lsr.setSymbol(ls);
+                lsr.setUtil(util);
+                lsr.setParent(symbolElement);
+                lsr.read();
+            }
+            else {
+                logger.debug("The type of " + ls.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read line symbol.");
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/LineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,171 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.ILineSymbol;
+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;
+
+/**
+ * Wrapper for line symbol reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class LineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(LineSymbolReader.class);
+
+    private ISymbol symbol;
+    private ILineSymbol lineSymbol;
+
+    public LineSymbolReader() throws Exception{
+        logger.debug("contructor()");
+        this.symbol = null;
+        this.lineSymbol = null;
+    }
+
+    public LineSymbolReader(ISymbol symbol) throws Exception{
+        logger.debug("contructor(ISymbol)");
+        this.symbol = symbol;
+        this.lineSymbol = null;
+    }
+
+    public LineSymbolReader(ILineSymbol symbol) throws Exception{
+        logger.debug("contructor(ILineSymbol)");
+        this.lineSymbol = symbol;
+        this.symbol= null;
+    }
+
+    public Element read() {
+        ISymbolReader sreader = null;
+        if(symbol != null) {
+            try {
+                if(symbol instanceof SimpleLineSymbol) {
+                    sreader = new SimpleLineSymbolReader(symbol);
+                }
+                else if(symbol instanceof MarkerLineSymbol) {
+                    sreader = new MarkerLineSymbolReader(symbol);
+                }
+                else if(symbol instanceof PictureLineSymbol) {
+                    sreader = new PictureLineSymbolReader(symbol);
+                }
+                else if(symbol instanceof MultiLayerLineSymbol) {
+                    sreader = new MultiLayerLineSymbolReader(symbol);
+                }
+                else if(symbol instanceof CartographicLineSymbol) {
+                    sreader = new CartoLineSymbolReader(symbol);
+                }
+                else if(symbol instanceof HashLineSymbol) {
+                    sreader = new HashLineSymbolReader(symbol);
+                }
+                else {
+                    logger.debug("The reader for type " + symbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+            }
+        }
+        else if(lineSymbol != null) {
+            try {
+                if(lineSymbol instanceof SimpleLineSymbol) {
+                    sreader = new SimpleLineSymbolReader(lineSymbol);
+                }
+                else if(lineSymbol instanceof MarkerLineSymbol) {
+                    sreader = new MarkerLineSymbolReader(lineSymbol);
+                }
+                else if(lineSymbol instanceof PictureLineSymbol) {
+                    sreader = new PictureLineSymbolReader(lineSymbol);
+                }
+                else if(lineSymbol instanceof MultiLayerLineSymbol) {
+                    sreader = new MultiLayerLineSymbolReader(lineSymbol);
+                }
+                else if(lineSymbol instanceof CartographicLineSymbol) {
+                    sreader = new CartoLineSymbolReader(lineSymbol);
+                }
+                else if(lineSymbol instanceof HashLineSymbol) {
+                    sreader = new HashLineSymbolReader(lineSymbol);
+                }
+                else {
+                    logger.debug("The reader for type " +
+                                 lineSymbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+            }
+        }
+        else {
+            return parent;
+        }
+        if (sreader != null) {
+            sreader.setParent(parent);
+            sreader.setUtil(util);
+            sreader.read();
+        }
+        return parent;
+    }
+
+    public void setSymbol(ISymbol sym) {
+        this.symbol = sym;
+        this.lineSymbol = null;
+    }
+
+    public void setSymbol(ILineSymbol sym) {
+        this.lineSymbol = sym;
+        this.symbol = null;
+    }
+
+    public boolean canRead(ISymbol sym) {
+        if(sym instanceof SimpleLineSymbol ||
+           sym instanceof MarkerLineSymbol ||
+           sym instanceof PictureLineSymbol ||
+           sym instanceof MultiLayerLineSymbol ||
+           sym instanceof CartographicLineSymbol ||
+           sym instanceof HashLineSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    public boolean canRead(ILineSymbol sym) {
+        if(sym instanceof SimpleLineSymbol ||
+           sym instanceof MarkerLineSymbol ||
+           sym instanceof PictureLineSymbol ||
+           sym instanceof MultiLayerLineSymbol ||
+           sym instanceof CartographicLineSymbol ||
+           sym instanceof HashLineSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MXDReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,215 @@
+package de.intevation.mxd.reader;
+
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.ILayer;
+import com.esri.arcgis.carto.IMap;
+import com.esri.arcgis.carto.MapDocument;
+import com.esri.arcgis.carto.FeatureLayer;
+import com.esri.arcgis.carto.GdbRasterCatalogLayer;
+import com.esri.arcgis.carto.IFeatureRenderer;
+import com.esri.arcgis.carto.SimpleRenderer;
+import com.esri.arcgis.carto.ClassBreaksRenderer;
+import com.esri.arcgis.carto.UniqueValueRenderer;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.ArcGISInitializer;
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * The MXD file reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MXDReader
+implements IReader {
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(MXDReader.class);
+
+    /**
+     * Private member.
+     */
+    private String filename = "";
+    private ArcGISInitializer initializer = null;
+    private MapToXMLUtils util;
+    private IMap map;
+    private int invalidLayerCount;
+
+    public MXDReader()
+    throws IOException {
+        logger.debug("constructor()");
+        initializer = new ArcGISInitializer();
+        util = new MapToXMLUtils();
+        invalidLayerCount = 0;
+    }
+
+
+    /**
+     * Initialize the ArcGIS Objects.
+     */
+    public boolean init()
+    throws IOException {
+        logger.debug("init()");
+        if(!initializer.initArcGIS()) {
+            return false;
+        }
+        if(!initializer.initArcGISLicenses()) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Shutdown the ArcGIS Objects.
+     */
+    public boolean shutdown()
+    throws IOException {
+        logger.debug("shutdown()");
+        if(initializer == null) {
+            throw new IOException("Faild to shutdown!");
+        }
+        else {
+            initializer.shutdownArcGIS();
+            return true;
+        }
+    }
+
+    /**
+     * Set the path and filename to the MXD-File.
+     */
+    public void setFilename(String name) {
+        logger.debug("setFilename()");
+        filename = name;
+    }
+
+
+    private void openMapDocument()
+    throws IOException {
+        MapDocument m = new MapDocument();
+        if(!m.isMapDocument(filename)) {
+            throw new IOException(filename + " is not a map!");
+        }
+        m.open(filename, null);
+        map = m.getMap(0);
+    }
+
+    /**
+     * Read the MXD file content.
+     */
+    public boolean read()
+    throws Exception {
+        logger.debug("read()");
+        if(filename == "") {
+            throw new IOException("Please set filename!");
+        }
+        else {
+            util.addFilename(filename);
+            openMapDocument();
+            MapReader mreader;
+            try {
+                mreader = new MapReader (map);
+                mreader.setUtil(util);
+                mreader.read();
+
+            }
+            catch(Exception e) {
+                throw e;
+            }
+
+            for(int i = 0; i < map.getLayerCount();i++) {
+                ILayer layer = map.getLayer(i);
+                try {
+                    if (layer instanceof FeatureLayer) {
+                        FeatureLayerReader lr = new FeatureLayerReader(layer);
+                        lr.setUtil(util);
+                        Element layerElement = lr.read();
+                        if (layerElement == null) {
+                            continue;
+                        }
+                        IFeatureRenderer renderer =
+                            ((FeatureLayer)layer).getRenderer();
+                        IRendererReader rreader;
+                        if(renderer instanceof SimpleRenderer) {
+                            rreader = new SimpleRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else if(renderer instanceof ClassBreaksRenderer) {
+                            rreader = new ClassBreakRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else if(renderer instanceof UniqueValueRenderer) {
+                            rreader = new UniqueValueRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else{
+                            logger.debug("Not a known renderer type " +
+                                         renderer.getClass().toString());
+                        }
+                    }
+                    else if(layer instanceof GdbRasterCatalogLayer) {
+                        GdbRasterCatalogLayerReader gclr =
+                            new GdbRasterCatalogLayerReader(layer);
+                        gclr.setUtil(util);
+                        Element layerElement = gclr.read();
+                        IFeatureRenderer renderer =
+                            ((GdbRasterCatalogLayer)layer).getRenderer();
+                        IRendererReader rreader;
+                        if(renderer instanceof SimpleRenderer) {
+                            rreader = new SimpleRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else if(renderer instanceof ClassBreaksRenderer) {
+                            rreader = new ClassBreakRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else if(renderer instanceof UniqueValueRenderer) {
+                            rreader = new UniqueValueRendererReader(renderer);
+                            rreader.setParent(layerElement);
+                            rreader.setUtil(util);
+                            rreader.read();
+                        }
+                        else {
+                            logger.debug("Not a known renderer type " +
+                                         renderer.getClass().toString());
+                        }
+                    }
+                }
+                catch(Exception e) {
+                    invalidLayerCount++;
+                    if(i == 0 && (i + 1) == map.getLayerCount() ||
+                       invalidLayerCount == map.getLayerCount()) {
+                        throw new IOException(
+                            "No valid layer in MXD file." +
+                            " Aborting.");
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Get the root DOM document.
+     */
+    public Document getMapDocument() {
+        logger.debug("getMapDocument()");
+        return util.getDocument();
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MapReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,197 @@
+package de.intevation.mxd.reader;
+
+import java.io.IOException;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.IMap;
+import com.esri.arcgis.carto.Map;
+import com.esri.arcgis.geometry.ISpatialReference;
+import com.esri.arcgis.geometry.ProjectedCoordinateSystem;
+import com.esri.arcgis.geometry.GeographicCoordinateSystem;
+import com.esri.arcgis.geometry.UnknownCoordinateSystem;
+import com.esri.arcgis.geometry.Projection;
+import com.esri.arcgis.geometry.IEnvelope;
+
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * Reads map information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MapReader {
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(MapReader.class);
+
+    /**
+     * Private member.
+     */
+    private Map map;
+    private MapToXMLUtils util;
+
+
+    public MapReader(IMap map)
+    throws Exception {
+        logger.debug("constructor()");
+        if(map instanceof Map) {
+            this.map = (Map)map;
+        }
+        else {
+            throw new Exception("Not an instance of \"Map\"!");
+        }
+    }
+
+    /**
+     * Reads the Map attributes.
+     */
+    public void read()
+    throws IOException {
+        logger.debug("read()");
+        if(util == null) {
+            throw new IOException("Can not write to document.");
+        }
+
+        //Create XML Element for map.
+        Element mapElement;
+        try{
+            mapElement = util.createMap();
+        }
+        catch(Exception e){
+            logger.error("Could not create DOM element. Aborting.");
+            throw new IOException("Error creating DOM element.");
+        }
+
+        //Read map name.
+        try {
+            mapElement.setAttribute("name", map.getName());
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read map name." +
+                " Setting map name to \"default-map\"");
+            mapElement.setAttribute("name", "default-map");
+        }
+
+        //Read map extent.
+        try {
+            IEnvelope ext = map.getExtent();
+            mapElement.setAttribute(
+                "extent_max_x",
+                String.valueOf(ext.getXMax()));
+            mapElement.setAttribute(
+                "extent_max_y",
+                String.valueOf(ext.getYMax()));
+            mapElement.setAttribute(
+                "extent_min_x",
+                String.valueOf(ext.getXMin()));
+            mapElement.setAttribute(
+                "extent_min_y",
+                String.valueOf(ext.getYMin()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read map extend. Setting to 0, 0, 0, 0.");
+            mapElement.setAttribute("extend_max_x", "0");
+            mapElement.setAttribute("extend_min_x", "0");
+            mapElement.setAttribute("extend_max_y", "0");
+            mapElement.setAttribute("extend_min_y", "0");
+        }
+
+        //Read map units.
+        int units = 0;
+        try {
+            units = map.getMapUnits();
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read map units." +
+                " Setting map units to unknown.");
+            units = 0;
+        }
+
+        String s_units;
+        switch(units) {
+            case   1: s_units = "inches"; break;
+            case   2: s_units = "points"; break;
+            case   3: s_units = "feet"; break;
+            case   4: s_units = "yards"; break;
+            case   5: s_units = "miles"; break;
+            case   6: s_units = "nauticalmiles"; break;
+            case   7: s_units = "millimeters"; break;
+            case   8: s_units = "centimeters"; break;
+            case   9: s_units = "meters"; break;
+            case  10: s_units = "kilometers"; break;
+            case  11: s_units = "degree"; break;
+            case  12: s_units = "decimeters"; break;
+            case  13: s_units = "units_last"; break;
+            default : s_units = "unknown"; break;
+        }
+        mapElement.setAttribute("units", s_units);
+
+        if(units == 0) {
+            logger.warn(
+                "Unknown units." +
+                " Please edit units in resulting mapfile.");
+        }
+
+        //TODO: Find out whats the correct scale value.
+        try {
+            mapElement.setAttribute(
+                "scale",
+                String.valueOf(map.getMaxScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read map scale. Setting map scale to 1000");
+            mapElement.setAttribute("scale", "1000");
+        }
+
+        //Read the projection.
+        try {
+            ISpatialReference sr = map.getSpatialReference();
+            String projection = "";
+            if(sr instanceof ProjectedCoordinateSystem) {
+                ProjectedCoordinateSystem pcs = (ProjectedCoordinateSystem)sr;
+                Projection p = (Projection)pcs.getProjection();
+                projection = p.getName();
+            }
+            else if(sr instanceof GeographicCoordinateSystem) {
+                GeographicCoordinateSystem gcs = (GeographicCoordinateSystem)sr;
+                projection = gcs.getName();
+            }
+            else if(sr instanceof UnknownCoordinateSystem) {
+                UnknownCoordinateSystem ucs = (UnknownCoordinateSystem)sr;
+                projection = ucs.getName();
+            }
+            else{
+                logger.debug(
+                    "Unknown SpatialReference: " +
+                    sr.getClass().toString());
+            }
+
+            if(projection.equals("Unknown")) {
+                logger.warn(
+                    "Unknown projection." +
+                    " Please edit projection in resulting mapfile.");
+            }
+            mapElement.setAttribute("projection", projection);
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read map projection." +
+                " Setting map projection to unknown.");
+            mapElement.setAttribute("projection", "Unknown");
+        }
+    }
+
+    /**
+     * Set the utilities.
+     */
+    public void setUtil(MapToXMLUtils util) {
+        this.util = util;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MarkerFillSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,209 @@
+package de.intevation.mxd.reader;
+
+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.ILineSymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.MarkerFillSymbol;
+import com.esri.arcgis.display.esriSimpleFillStyle;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads marker line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MarkerFillSymbolReader
+extends AbstractSymbolReader{
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MarkerFillSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private MarkerFillSymbol symbol;
+
+    public MarkerFillSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MarkerFillSymbol) {
+            this.symbol = (MarkerFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MarkerFillSymbol!");
+        }
+    }
+
+
+    public MarkerFillSymbolReader(IFillSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MarkerFillSymbol) {
+            this.symbol = (MarkerFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MarkerFillSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\".");
+            symbolElement.setAttribute("name", "default");
+        }
+        symbolElement.setAttribute("style", "fill");
+
+        try {
+           symbolElement.setAttribute(
+               "xoffset",
+               String.valueOf(symbol.getXOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "yoffset",
+                String.valueOf(symbol.getYOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read y-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "xseparation",
+                String.valueOf(symbol.getXSeparation()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-separation.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "yseparation",
+                String.valueOf(symbol.getYSeparation()));
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read y-separation.");
+        }
+
+        int style;
+        try {
+            style = symbol.getStyle();
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read style.");
+            style = -1;
+        }
+        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: break;
+        }
+
+        try {
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            ILineSymbol ls = symbol.getOutline();
+            LineSymbolReader lsr = new LineSymbolReader();
+            if(lsr.canRead(ls)) {
+                lsr.setSymbol(ls);
+                lsr.setUtil(util);
+                lsr.setParent(symbolElement);
+                lsr.read();
+            }
+            else {
+                logger.debug("The type of " + ls.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read outline.");
+        }
+
+        try {
+            IMarkerSymbol sym = symbol.getMarkerSymbol();
+            MarkerSymbolReader msr = new MarkerSymbolReader();
+            if(msr.canRead(sym)) {
+                msr.setSymbol(sym);
+                msr.setParent(symbolElement);
+                msr.setUtil(util);
+                msr.read();
+            }
+            else {
+                logger.debug("The type of " + sym.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read marker symbol.");
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MarkerLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,82 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.ILineSymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.MarkerLineSymbol;
+import com.esri.arcgis.display.MultiLayerMarkerSymbol;
+
+import org.w3c.dom.Element;
+
+/**
+ * Reads marker line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MarkerLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MarkerLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private MarkerLineSymbol symbol;
+
+    public MarkerLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MarkerLineSymbol) {
+            this.symbol = (MarkerLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MarkerLineSymbol!");
+        }
+    }
+
+    public MarkerLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MarkerLineSymbol) {
+            this.symbol = (MarkerLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MarkerLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        try {
+            IMarkerSymbol sym = symbol.getMarkerSymbol();
+            if(sym instanceof MultiLayerMarkerSymbol) {
+                ISymbolReader sreader = new MultiLayerMarkerSymbolReader(sym);
+                sreader.setParent(parent);
+                sreader.setUtil(util);
+                sreader.read();
+            }
+            else {
+                logger.debug("The type of " + sym.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not read the symbol " +
+                symbol.getClass().toString());
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,164 @@
+package de.intevation.mxd.reader;
+
+import java.lang.Exception;
+
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.SimpleMarkerSymbol;
+import com.esri.arcgis.display.ArrowMarkerSymbol;
+import com.esri.arcgis.display.CharacterMarkerSymbol;
+import com.esri.arcgis.display.PictureMarkerSymbol;
+import com.esri.arcgis.display.MultiLayerMarkerSymbol;
+
+/**
+ * Wrapper for marker symbol reader.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MarkerSymbolReader.class);
+
+    private ISymbol symbol;
+    private IMarkerSymbol markerSymbol;
+
+    public MarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor(ISymbol)");
+        this.symbol = symbol;
+        this.markerSymbol = null;
+    }
+
+    public MarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor(ISymbol)");
+        this.markerSymbol = symbol;
+        this.symbol = null;
+    }
+
+    public MarkerSymbolReader() {
+        logger.debug("contructor()");
+        this.symbol = null;
+        this.markerSymbol = null;
+    }
+
+    public Element read() {
+        logger.debug("read()");
+        ISymbolReader sreader = null;
+
+        if(symbol != null) {
+            try {
+                if(symbol instanceof SimpleMarkerSymbol) {
+                    sreader = new SimpleMarkerSymbolReader(symbol);
+                }
+                else if(symbol instanceof ArrowMarkerSymbol) {
+                    sreader = new ArrowMarkerSymbolReader(symbol);
+                }
+                else if(symbol instanceof CharacterMarkerSymbol) {
+                    sreader = new CharacterMarkerSymbolReader(symbol);
+                }
+                else if(symbol instanceof PictureMarkerSymbol) {
+                    sreader = new PictureMarkerSymbolReader(symbol);
+                }
+                else if(symbol instanceof MultiLayerMarkerSymbol) {
+                    sreader = new MultiLayerMarkerSymbolReader(symbol);
+                }
+                else {
+                    logger.debug("The reader for type " + symbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+
+            }
+        }
+        else if(markerSymbol != null) {
+            try {
+                if(markerSymbol instanceof SimpleMarkerSymbol) {
+                    sreader = new SimpleMarkerSymbolReader(markerSymbol);
+                }
+                else if(markerSymbol instanceof ArrowMarkerSymbol) {
+                    sreader = new ArrowMarkerSymbolReader(markerSymbol);
+                }
+                else if(markerSymbol instanceof CharacterMarkerSymbol) {
+                    sreader = new CharacterMarkerSymbolReader(markerSymbol);
+                }
+                else if(markerSymbol instanceof PictureMarkerSymbol) {
+                    sreader = new PictureMarkerSymbolReader(markerSymbol);
+                }
+                else if(markerSymbol instanceof MultiLayerMarkerSymbol) {
+                    sreader = new MultiLayerMarkerSymbolReader(markerSymbol);
+                }
+                else {
+                    logger.debug("The reader for type " + symbol.getClass().toString() +
+                                 " is not implemented!");
+                    return parent;
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read the symbol " +
+                    symbol.getClass().toString());
+                return parent;
+
+            }
+        }
+        if (sreader != null) {
+            sreader.setParent(parent);
+            sreader.setUtil(util);
+            sreader.read();
+        }
+        return parent;
+    }
+
+    public void setSymbol(ISymbol sym) {
+        this.symbol = sym;
+        this.markerSymbol = null;
+    }
+
+    public void setSymbol(IMarkerSymbol sym) {
+        this.markerSymbol = sym;
+        this.symbol = null;
+    }
+
+    public boolean canRead(ISymbol sym) {
+        if(sym instanceof SimpleMarkerSymbol ||
+           sym instanceof ArrowMarkerSymbol ||
+           sym instanceof PictureMarkerSymbol ||
+           sym instanceof CharacterMarkerSymbol ||
+           sym instanceof MultiLayerMarkerSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    public boolean canRead(IMarkerSymbol sym) {
+        if(sym instanceof SimpleMarkerSymbol ||
+           sym instanceof ArrowMarkerSymbol ||
+           sym instanceof PictureMarkerSymbol ||
+           sym instanceof CharacterMarkerSymbol ||
+           sym instanceof MultiLayerMarkerSymbol) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MultiLayerFillSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,85 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IFillSymbol;
+import com.esri.arcgis.display.MultiLayerFillSymbol;
+
+import org.w3c.dom.Element;
+
+/**
+ * Reads multi layer line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MultiLayerFillSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MultiLayerFillSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private MultiLayerFillSymbol symbol;
+
+    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!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        try {
+            for(int i = 0; i < symbol.getLayerCount(); i++) {
+                ISymbol sym = (ISymbol)symbol.getLayer(i);
+
+                FillSymbolReader fsr = new FillSymbolReader();
+                if(fsr.canRead(sym)) {
+                    fsr.setSymbol(sym);
+                    fsr.setParent(parent);
+                    fsr.setUtil(util);
+                    fsr.read();
+                }
+                else {
+                    logger.debug("The type of " + sym.getClass().toString() +
+                                 " is not implemented!");
+                }
+            }
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not read the symbol " +
+                symbol.getClass().toString());
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MultiLayerLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,76 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.ILineSymbol;
+import com.esri.arcgis.display.MultiLayerLineSymbol;
+
+import org.w3c.dom.Element;
+
+/**
+ * Reads multi layer line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MultiLayerLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MultiLayerLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private MultiLayerLineSymbol symbol;
+
+    public MultiLayerLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MultiLayerLineSymbol) {
+            this.symbol = (MultiLayerLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MultiLayerLineSymbol!");
+        }
+    }
+
+    public MultiLayerLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MultiLayerLineSymbol) {
+            this.symbol = (MultiLayerLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MultiLayerLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        try {
+            for(int i = 0; i < symbol.getLayerCount(); i++) {
+                ISymbol sym = (ISymbol)symbol.getLayer(i);
+                ISymbolReader sreader = new LineSymbolReader(sym);
+                sreader.setParent(parent);
+                sreader.setUtil(util);
+                sreader.read();
+            }
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not read the symbol " +
+                symbol.getClass().toString());
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/MultiLayerMarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,76 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.MultiLayerMarkerSymbol;
+
+import org.w3c.dom.Element;
+
+/**
+ * Reads multi layer marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MultiLayerMarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(MultiLayerMarkerSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private MultiLayerMarkerSymbol symbol;
+
+    public MultiLayerMarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MultiLayerMarkerSymbol) {
+            this.symbol = (MultiLayerMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MultiLayerMarkerSymbol!");
+        }
+    }
+
+    public MultiLayerMarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof MultiLayerMarkerSymbol) {
+            this.symbol = (MultiLayerMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a MultiLayerMarkerSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        try {
+            for(int i = 0; i < symbol.getLayerCount(); i++) {
+                ISymbol sym = (ISymbol)symbol.getLayer(i);
+                ISymbolReader sreader = new MarkerSymbolReader(sym);
+                sreader.setParent(parent);
+                sreader.setUtil(util);
+                sreader.read();
+            }
+        }
+        catch(Exception e) {
+            logger.error(
+                "Could not read symbol " +
+                symbol.getClass().toString());
+        }
+        return parent;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/PictureLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,143 @@
+package de.intevation.mxd.reader;
+
+import java.awt.Color;
+import java.awt.Image;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.ILineSymbol;
+import com.esri.arcgis.display.PictureLineSymbol;
+import com.esri.arcgis.support.ms.stdole.Picture;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads picture line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class PictureLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(SimpleLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private PictureLineSymbol symbol;
+
+    public PictureLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof PictureLineSymbol) {
+            this.symbol = (PictureLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a PictureLineSymbol!");
+        }
+    }
+
+    public PictureLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof PictureLineSymbol) {
+            this.symbol = (PictureLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a PictureLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        //TODO Read the picture from mxd and write it as base64 string to the
+        //     XML Element.
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            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()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "offset",
+                String.valueOf(symbol.getOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "x_scale",
+                String.valueOf(symbol.getXScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-scale.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "y_scale",
+                String.valueOf(symbol.getYScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read y-scale.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "width",
+                String.valueOf(symbol.getWidth()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read width.");
+        }
+
+        symbolElement.setAttribute("type", "line");
+        symbolElement.setAttribute("style", "picture");
+
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/PictureMarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,124 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.PictureMarkerSymbol;
+import com.esri.arcgis.carto.PictureElement;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads picture marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class PictureMarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(PictureMarkerSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private PictureMarkerSymbol symbol;
+
+    public PictureMarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof PictureMarkerSymbol) {
+            this.symbol = (PictureMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a PictureMarkerSymbol!");
+        }
+    }
+
+    public PictureMarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof PictureMarkerSymbol) {
+            this.symbol = (PictureMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a PictureMarkerSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        //TODO Read the picture from mxd and write it as base64 string to the
+        //     XML Element.
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute(
+                "angle",
+                String.valueOf(symbol.getAngle()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read angle.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "size",
+                String.valueOf(symbol.getSize()));
+        }
+        catch (IOException ioe) {
+            logger.warn("Could not read size. Setting size to 1.");
+            symbolElement.setAttribute("size", "1");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "x_offset",
+                String.valueOf(symbol.getXOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read x-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "y_offset",
+                String.valueOf(symbol.getYOffset()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read y-offset.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "name",
+                symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            PictureElement pElem = new PictureElement();
+            pElem.importPicture(symbol.getPicture());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read picture.");
+        }
+        symbolElement.setAttribute("style", "picture");
+        symbolElement.setAttribute("type", "marker");
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/SimpleFillSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,151 @@
+package de.intevation.mxd.reader;
+
+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.IFillSymbol;
+import com.esri.arcgis.display.SimpleFillSymbol;
+import com.esri.arcgis.display.esriSimpleFillStyle;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads simple marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class SimpleFillSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(SimpleFillSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private SimpleFillSymbol symbol;
+
+    public SimpleFillSymbolReader(ISymbol symbol) throws Exception{
+        logger.debug("contructor(ISymbol)");
+        if(symbol instanceof SimpleFillSymbol) {
+            this.symbol = (SimpleFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleFillSymbol!");
+        }
+    }
+
+    public SimpleFillSymbolReader(IFillSymbol symbol) throws Exception{
+        logger.debug("contructor(IFillSymbol)");
+        if(symbol instanceof SimpleFillSymbol) {
+            this.symbol = (SimpleFillSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleFillSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+        symbolElement.setAttribute("style", "fill");
+        int style;
+        try {
+            style = symbol.getStyle();
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read fill style.");
+            style = -1;
+        }
+
+        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: break;
+        }
+
+        try {
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            ILineSymbol ls = symbol.getOutline();
+            LineSymbolReader lsr = new LineSymbolReader();
+            if(lsr.canRead(ls)) {
+                lsr.setSymbol(ls);
+                lsr.setUtil(util);
+                lsr.setParent(symbolElement);
+                lsr.read();
+            }
+            else {
+                logger.debug("The type of " + ls.getClass().toString() +
+                             " is not implemented!");
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read line symbol.");
+        }
+
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/SimpleLineSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,133 @@
+package de.intevation.mxd.reader;
+
+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.SimpleLineSymbol;
+import com.esri.arcgis.display.esriSimpleLineStyle;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads simple line symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class SimpleLineSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(SimpleLineSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private SimpleLineSymbol symbol;
+
+    public SimpleLineSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof SimpleLineSymbol) {
+            this.symbol = (SimpleLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleLineSymbol!");
+        }
+    }
+
+    public SimpleLineSymbolReader(ILineSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof SimpleLineSymbol) {
+            this.symbol = (SimpleLineSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleLineSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\"");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            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()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            symbolElement.setAttribute("width", String.valueOf(symbol.getWidth()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read width.");
+        }
+
+        int style;
+        try {
+           style = symbol.getStyle();
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read line style.");
+            style = -1;
+        }
+        switch(style) {
+            case esriSimpleLineStyle.esriSLSSolid:
+                    symbolElement.setAttribute("linestyle", "solid"); break;
+            case esriSimpleLineStyle.esriSLSDash:
+                    symbolElement.setAttribute("linestyle", "dash"); break;
+            case esriSimpleLineStyle.esriSLSDot:
+                    symbolElement.setAttribute("linestyle", "dot"); break;
+            case esriSimpleLineStyle.esriSLSDashDot:
+                    symbolElement.setAttribute("linestyle", "dashdot"); break;
+            case esriSimpleLineStyle.esriSLSDashDotDot:
+                    symbolElement.setAttribute("linestyle", "dashdotdot"); break;
+            default: break;
+        }
+
+        symbolElement.setAttribute("type", "line");
+        symbolElement.setAttribute("style", "simple");
+
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/SimpleMarkerSymbolReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,183 @@
+package de.intevation.mxd.reader;
+
+import java.awt.Color;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.display.IMarkerSymbol;
+import com.esri.arcgis.display.SimpleMarkerSymbol;
+import com.esri.arcgis.display.esriSimpleMarkerStyle;
+import com.esri.arcgis.display.IRgbColor;
+import com.esri.arcgis.display.RgbColor;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+/**
+ * Reads simple marker symbol information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class SimpleMarkerSymbolReader
+extends AbstractSymbolReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(SimpleMarkerSymbolReader.class);
+
+    /**
+     * Private member.
+     */
+    private SimpleMarkerSymbol symbol;
+
+    public SimpleMarkerSymbolReader(ISymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof SimpleMarkerSymbol) {
+            this.symbol = (SimpleMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleMarkerSymbol!");
+        }
+    }
+
+    public SimpleMarkerSymbolReader(IMarkerSymbol symbol)
+    throws Exception {
+        logger.debug("contructor()");
+        if(symbol instanceof SimpleMarkerSymbol) {
+            this.symbol = (SimpleMarkerSymbol)symbol;
+        }
+        else {
+            throw new Exception("Not a SimpleMarkerSymbol!");
+        }
+    }
+
+    /**
+     * Reads the symbol attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element symbolElement = util.addSymbol(parent);
+
+        try {
+            symbolElement.setAttribute("name", symbol.getNameString());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read name. Setting name to \"default\".");
+            symbolElement.setAttribute("name", "default");
+        }
+
+        try {
+            if(symbol.getStyle() == esriSimpleMarkerStyle.esriSMSCircle)
+                symbolElement.setAttribute("style", "point");
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read marker style.");
+        }
+
+        try {
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            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()));
+                symbolElement.setAttribute("transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read color.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "size",
+                String.valueOf(symbol.getSize()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read size. Setting size to 1.");
+            symbolElement.setAttribute("size", "1");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "outline_size",
+                String.valueOf(symbol.getOutlineSize()));
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read outline size.");
+        }
+
+        try {
+            if(symbol.getOutlineColor() instanceof IRgbColor) {
+                IRgbColor color = (IRgbColor)symbol.getOutlineColor();
+                Color c = new Color (
+                    color.getRed(),
+                    color.getGreen(),
+                    color.getBlue());
+                symbolElement.setAttribute(
+                        "outline_color",
+                        String.valueOf(c.getRGB()));
+                symbolElement.setAttribute("outline_transparency",
+                    String.valueOf(color.getTransparency()));
+            }
+            else {
+                RgbColor col = new RgbColor();
+                col.setRGB(symbol.getOutlineColor().getRGB());
+                Color c = new Color (
+                    col.getRed(),
+                    col.getGreen(),
+                    col.getBlue());
+                symbolElement.setAttribute(
+                    "outline_color",
+                    String.valueOf(c.getRGB()));
+                symbolElement.setAttribute("outline_transparency",
+                    String.valueOf(col.getTransparency()));
+            }
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read outline color.");
+        }
+
+        try {
+           symbolElement.setAttribute(
+                "angle",
+                String.valueOf(symbol.getAngle()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read angle.");
+        }
+
+        try {
+            symbolElement.setAttribute(
+                "offset",
+                symbol.getXOffset() + "," + symbol.getYOffset());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read offset.");
+        }
+
+        symbolElement.setAttribute("type", "marker");
+        return symbolElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/SimpleRendererReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,131 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.IFeatureRenderer;
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.carto.SimpleRenderer;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * Reads simple renderer information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class SimpleRendererReader
+implements IRendererReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(SimpleRendererReader.class);
+
+    /**
+     * Private member.
+     */
+    private ISymbol symbol;
+    private SimpleRenderer renderer;
+    private Element layer;
+    private MapToXMLUtils util;
+
+
+    public SimpleRendererReader(IFeatureRenderer renderer)
+    throws Exception {
+        logger.debug("constructor()");
+        if(renderer instanceof SimpleRenderer) {
+            this.renderer = (SimpleRenderer)renderer;
+        }
+        else{
+            throw new Exception ("Not an instance of SimpleRenderer!");
+        }
+    }
+
+    /**
+     * Setter for the parent XML element.
+     *
+     * @param parent The XML parent node.
+     */
+    public void setParent(Element parent) {
+        this.layer = parent;
+    }
+
+    /**
+     * Setter for the XML document helper.
+     *
+     * @param util The helper class for storing map information.
+     */
+    public void setUtil(MapToXMLUtils util) {
+        this.util = util;
+    }
+
+    /**
+     * Reads the renderer attributes.
+     *
+     * @return The XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        Element rendererElement;
+        rendererElement = util.addRenderer(layer);
+
+        try {
+            rendererElement.setAttribute("label", renderer.getLabel());
+        }
+        catch(IOException ioe) {
+            logger.warn(
+                "Could not read label name." +
+                "Setting label name to \"default-label\"");
+            rendererElement.setAttribute("label", "default-label");
+        }
+
+        try {
+            rendererElement.setAttribute(
+                "description",
+                renderer.getDescription());
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read description.");
+        }
+
+        try {
+            symbol = renderer.getSymbol();
+
+            MarkerSymbolReader markerReader = new MarkerSymbolReader();
+            LineSymbolReader lineReader = new LineSymbolReader();
+            FillSymbolReader fillReader = new FillSymbolReader();
+            if(markerReader.canRead(symbol)) {
+                markerReader.setSymbol(symbol);
+                markerReader.setUtil(util);
+                markerReader.setParent(rendererElement);
+                markerReader.read();
+            }
+            else if(lineReader.canRead(symbol)) {
+                lineReader.setSymbol(symbol);
+                lineReader.setUtil(util);
+                lineReader.setParent(rendererElement);
+                lineReader.read();
+            }
+            else if(fillReader.canRead(symbol)) {
+                fillReader.setSymbol(symbol);
+                fillReader.setUtil(util);
+                fillReader.setParent(rendererElement);
+                fillReader.read();
+            }
+            else {
+                logger.debug(
+                    "No known Symbol type: " +
+                    symbol.getClass().toString());
+            }
+        }
+        catch(Exception e) {
+            logger.error("Could not read symbol. Stopped reading renderer.");
+        }
+        return layer;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/UniqueValueRendererReader.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,157 @@
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.IFeatureRenderer;
+import com.esri.arcgis.display.ISymbol;
+import com.esri.arcgis.carto.UniqueValueRenderer;
+
+import org.w3c.dom.Element;
+import java.io.IOException;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+
+/**
+ * Reads unique vaule renderer information.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class UniqueValueRendererReader
+implements IRendererReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(FeatureLayerReader.class);
+
+    /**
+     * Private Member.
+     */
+    private UniqueValueRenderer renderer;
+    private Element layer;
+    private MapToXMLUtils util;
+
+
+    public UniqueValueRendererReader(IFeatureRenderer renderer)
+    throws Exception {
+        logger.debug("constructor()");
+        if (renderer instanceof UniqueValueRenderer) {
+            this.renderer = (UniqueValueRenderer)renderer;
+        }
+        else {
+            throw new Exception ("Not an instance of UniqueValueRenderer.");
+        }
+    }
+
+    /**
+     * Setter for the parent XML element.
+     *
+     * @param parent The XML parent node.
+     */
+    public void setParent(Element parent) {
+        this.layer = 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 renderer attributes.
+     *
+     * @return The parent XML node.
+     */
+    public Element read() {
+        logger.debug("read()");
+        int count = 0;
+        try {
+            count = renderer.getClassCount();
+        }
+        catch(IOException ioe) {
+            logger.error(
+                "Could not read class count."+
+                " Stopped reading renderer.");
+            return layer;
+        }
+        for(int i = 0; i < count - 1; i++) {
+            Element rendererElement = util.addRenderer(layer);
+
+            try {
+                String value = renderer.getValue(i);
+                value = value.replaceAll(" ", "");
+                if(value.indexOf(",") > 0) {
+                    int j = 0;
+                    while(value.indexOf(",") > 0) {
+                        String v = value.substring(0, value.indexOf(","));
+                        rendererElement.setAttribute("value_" + j, v);
+                        value = value.substring(
+                            value.indexOf(",") + 1,
+                            value.length());
+                        j++;
+                    }
+                    rendererElement.setAttribute("value_" + j, value);
+                }
+                else {
+                    rendererElement.setAttribute("value", value);
+                }
+
+                value = renderer.getValue(i);
+                rendererElement.setAttribute("name", renderer.esri_getClass(i));
+                rendererElement.setAttribute("description",
+                    renderer.getDescription(value));
+
+                rendererElement.setAttribute("label", renderer.getLabel(value));
+                rendererElement.setAttribute(
+                    "field_count",
+                    String.valueOf(renderer.getFieldCount()));
+                for(int j = 0; j < renderer.getFieldCount(); j++) {
+                    rendererElement.setAttribute(
+                        "expression_field_" + j,
+                        renderer.getField(j));
+                }
+                rendererElement.setAttribute("expression_operator", "=");
+
+                ISymbol sym = renderer.getSymbol(value);
+                MarkerSymbolReader markerReader = new MarkerSymbolReader();
+                LineSymbolReader lineReader = new LineSymbolReader();
+                FillSymbolReader fillReader = new FillSymbolReader();
+                if(markerReader.canRead(sym)) {
+                    markerReader.setSymbol(sym);
+                    markerReader.setUtil(util);
+                    markerReader.setParent(rendererElement);
+                    markerReader.read();
+                }
+                else if(lineReader.canRead(sym)) {
+                    lineReader.setSymbol(sym);
+                    lineReader.setUtil(util);
+                    lineReader.setParent(rendererElement);
+                    lineReader.read();
+                }
+                else if(fillReader.canRead(sym)) {
+                    fillReader.setSymbol(sym);
+                    fillReader.setUtil(util);
+                    fillReader.setParent(rendererElement);
+                    fillReader.read();
+                }
+                else {
+                    logger.debug("Not a known symbol type: " +
+                                 sym.getClass().toString());
+                }
+            }
+            catch(Exception e) {
+                logger.error(
+                    "Could not read unique value data." +
+                    e.toString());
+                return layer;
+            }
+        }
+        return layer;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/utils/MapToXMLUtils.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2010 by Intevation GmbH
+ *
+ * This program is free software under the LGPL (>=v2.1)
+ * Read the file LGPL.txt coming with the software for details
+ * or visit http://www.gnu.org/licenses/ if it does not exist.
+ */
+package de.intevation.mxd.utils;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.DOMException;
+
+/**
+ * Utility class to store map information in a XML structure.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MapToXMLUtils
+{
+    /**
+     * The logger.
+     */
+    private static final Logger logger = Logger.getLogger(MapToXMLUtils.class);
+
+    /**
+     * Private member.
+     */
+    private Document root;
+    private Element rootElement;
+    private XMLUtils.ElementCreator creator;
+
+
+    public MapToXMLUtils() {
+        this.root = XMLUtils.newDocument();
+        creator = new XMLUtils.ElementCreator(root, "", "");
+        rootElement = creator.create("mxd");
+        root.appendChild(rootElement);
+    }
+
+    /**
+     * Add the mxd filename to the dom.
+     * @param path Path to the mxdfile.
+     * @return Currently always true.
+     */
+    public boolean addFilename(String path) {
+        Element file = creator.create("file");
+        file.setAttribute("name", path);
+        rootElement.appendChild(file);
+        return true;
+    }
+
+    /**
+     * Create the top level map element.
+     * @return The new map element.
+     */
+    public Element createMap()
+    throws Exception {
+        Element map;
+        NodeList list = root.getElementsByTagName("map");
+        if(list == null || list.getLength() == 0){
+            map = creator.create("map");
+            rootElement.appendChild(map);
+        }
+        else if(list.getLength() == 1){
+            map = (Element)list.item(0);
+        }
+        else{
+            throw new Exception("Error while creating map node.");
+        }
+        return map;
+    }
+
+    /**
+     * Add a layer element to the map.
+     * @param name The layer name.
+     * @return The layer element.
+     */
+    public Element addLayer()
+    throws Exception {
+        Element node = creator.create("layer");
+        NodeList list = root.getElementsByTagName("map");
+        if(list == null || list.getLength() == 0){
+            throw new Exception("No map node found!");
+        }
+        else if(list.getLength() > 1) {
+            throw new Exception("Found more than one map node." +
+                                " This should never happen!");
+        }
+        else {
+            list.item(0).appendChild(node);
+            return node;
+        }
+    }
+
+    /**
+     * Remove a layer element from map.
+     * @param name The layer name.
+     */
+    public void removeLayer(Element layerElement) {
+        NodeList list = root.getElementsByTagName("map");
+        if(list == null || list.getLength() == 0){
+            return;
+        }
+        else if(list.getLength() > 1) {
+            return;
+        }
+        else {
+            try {
+                list.item(0).removeChild(layerElement);
+            }
+            catch(DOMException de) {
+                return;
+            }
+        }
+    }
+
+    /**
+     * Add a renderer element to the map.
+     * @param layer The parent layer element.
+     * @return The renderer element.
+     */
+    public Element addRenderer(Element layer) {
+        Element node = creator.create("renderer");
+        layer.appendChild(node);
+        return node;
+    }
+
+    /**
+     * Add a symbol element to the map.
+     * @param renderer The parent renderer element.
+     * @return The symbol element.
+     */
+    public Element addSymbol(Element renderer) {
+        Element node = creator.create("symbol");
+        renderer.appendChild(node);
+        return node;
+    }
+
+    /**
+     * Print out the XML document.
+     */
+    public void print() {
+        XMLUtils.toStream(root, System.out);
+    }
+
+    /**
+     * Get the DOM document.
+     * @return The root document.
+     */
+    public Document getDocument() {
+        return root;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/utils/XMLUtils.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,361 @@
+/*
+ * Copyright (c) 2010 by Intevation GmbH
+ *
+ * This program is free software under the LGPL (>=v2.1)
+ * Read the file LGPL.txt coming with the software for details
+ * or visit http://www.gnu.org/licenses/ if it does not exist.
+ */
+
+package de.intevation.mxd.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+
+import javax.xml.transform.dom.DOMSource;
+
+import javax.xml.transform.stream.StreamResult;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.xml.sax.SAXException;
+
+/**
+ * Some helper functions to ease work with XML concering namespaces, XPATH
+ * and so on.
+ *  @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
+ */
+public final class XMLUtils
+{
+    /**
+     * W3C URL of XForms
+     */
+    public static final String XFORM_URL    = "http://www.w3.org/2002/xforms";
+    /**
+     * W3C prefix of XForms
+     */
+    public static final String XFORM_PREFIX = "xform";
+
+    private static Logger logger = Logger.getLogger(XMLUtils.class);
+
+    private XMLUtils() {
+    }
+
+    /**
+     * Helper class to generate elements and attributes with
+     * namespaces.
+     */
+    public static class ElementCreator
+    {
+        /**
+         * owner document of the elements to be created
+         */
+        protected Document document;
+        /**
+         * namespace to be used
+         */
+        protected String   ns;
+        /**
+         * prefix to be used
+         */
+        protected String   prefix;
+
+        /**
+         * Constructor to create an element/attribute creator
+         * with a given namespace and namespace prefix using a
+         * given owner document.
+         * @param document The owning document
+         * @param ns       The namespace
+         * @param prefix   The namespace prefix
+         */
+        public ElementCreator(Document document, String ns, String prefix) {
+            this.document = document;
+            this.ns       = ns;
+            this.prefix   = prefix;
+        }
+
+        /**
+         * Creates a new element using the owning document with
+         * the this creators namespace and namespace prefix.
+         * @param name The name of the element
+         * @return     The new element
+         */
+        public Element create(String name) {
+            Element element = document.createElementNS(ns, name);
+            element.setPrefix(prefix);
+            return element;
+        }
+
+        /**
+         * Adds a new attribute and its value to a given element.
+         * It does not set the namespace prefix.
+         * @param element The element to add the attribute to
+         * @param name    The name of the attribute
+         * @param value   The value of the attribute
+         */
+        public void addAttr(Element element, String name, String value) {
+            addAttr(element, name, value, false);
+        }
+
+        /**
+         * Adds a new attribute and its value to a given element.
+         * If the namespace prefix is used is decided by the 'addPrefix' flag.
+         * @param element The element to add the attribute to
+         * @param name    The name of the attribute
+         * @param value   The value of the attribute
+         * @param addPrefix If true the creators namespace prefix is
+         * set on the attribute.
+         */
+        public void addAttr(
+            Element element,
+            String  name,
+            String  value,
+            boolean addPrefix
+        ) {
+            if (addPrefix) {
+                Attr attr = document.createAttributeNS(ns, name);
+                attr.setValue(value);
+                attr.setPrefix(prefix);
+
+                element.setAttributeNode(attr);
+            }
+            else {
+                element.setAttribute(name, value);
+            }
+
+        }
+    } // class ElementCreator
+
+    /**
+     * Creates a new XML document
+     * @return the new XML document ot null if something went wrong during
+     * creation.
+     */
+    public static final Document newDocument() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+
+        try {
+            return factory.newDocumentBuilder().newDocument();
+        }
+        catch (ParserConfigurationException pce) {
+            logger.error(pce.getLocalizedMessage(), pce);
+        }
+        return null;
+    }
+
+    /**
+     * Loads a XML document namespace aware from a file
+     * @param file The file to load.
+     * @return the XML document or null if something went wrong
+     * during loading.
+     */
+    public static final Document parseDocument(File file) {
+        InputStream inputStream = null;
+        try {
+            inputStream = new BufferedInputStream(new FileInputStream(file));
+            return parseDocument(inputStream);
+        }
+        catch (IOException ioe) {
+            logger.error(ioe.getLocalizedMessage(), ioe);
+        }
+        finally {
+            if (inputStream != null) {
+                try { inputStream.close(); }
+                catch (IOException ioe) {}
+            }
+        }
+        return null;
+    }
+
+    public static final Document parseDocument(InputStream inputStream) {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+
+        try {
+            return factory.newDocumentBuilder().parse(inputStream);
+        }
+        catch (ParserConfigurationException pce) {
+            logger.error(pce.getLocalizedMessage(), pce);
+        }
+        catch (SAXException se) {
+            logger.error(se.getLocalizedMessage(), se);
+        }
+        catch (IOException ioe) {
+            logger.error(ioe.getLocalizedMessage(), ioe);
+        }
+        return null;
+    }
+
+    /**
+     * Creates a new XPath without a namespace context.
+     * @return the new XPath.
+     */
+    public static final XPath newXPath() {
+        return newXPath(null);
+    }
+
+    /**
+     * Creates a new XPath with a given namespace context.
+     * @param namespaceContext The namespace context to be used or null
+     * if none should be used.
+     * @return The new XPath
+     */
+    public static final XPath newXPath(NamespaceContext namespaceContext) {
+        XPathFactory factory = XPathFactory.newInstance();
+        XPath        xpath   = factory.newXPath();
+        if (namespaceContext != null) {
+            xpath.setNamespaceContext(namespaceContext);
+        }
+        return xpath;
+    }
+
+    /**
+     * Evaluates an XPath query on a given object and returns the result
+     * as a given type. No namespace context is used.
+     * @param root  The object which is used as the root of the tree to
+     * be searched in.
+     * @param query The XPath query
+     * @param returnTyp The type of the result.
+     * @return The result of type 'returnTyp' or null if something
+     * went wrong during XPath evaluation.
+     */
+    public static final Object xpath(
+        Object root,
+        String query,
+        QName  returnTyp
+    ) {
+        return xpath(root, query, returnTyp, null);
+    }
+
+    /**
+     * Evaluates an XPath query on a given object and returns the result
+     * as a string. A given namespace context is used.
+     * @param root  The object which is used as the root of the tree to
+     * be searched in.
+     * @param query The XPath query
+     * @param namespaceContext The namespace context to be used or null
+     * if none should be used.
+     * @return The result of the query or null if something went wrong
+     * during XPath evaluation.
+     */
+    public static final String xpathString(
+        Object root, String query, NamespaceContext namespaceContext
+    ) {
+        return (String)xpath(
+            root, query, XPathConstants.STRING, namespaceContext);
+    }
+
+    /**
+     * Evaluates an XPath query on a given object and returns the result
+     * as a given type. Optionally a namespace context is used.
+     * @param root The object which is used as the root of the tree to
+     * be searched in.
+     * @param query The XPath query
+     * @param returnType The type of the result.
+     * @param namespaceContext The namespace context to be used or null
+     * if none should be used.
+     * @return The result of type 'returnTyp' or null if something
+     * went wrong during XPath evaluation.
+     */
+    public static final Object xpath(
+        Object           root,
+        String           query,
+        QName            returnType,
+        NamespaceContext namespaceContext
+    ) {
+        if (root == null) {
+            return null;
+        }
+
+        try {
+            XPath xpath = newXPath(namespaceContext);
+            if (xpath != null) {
+                return xpath.evaluate(query, root, returnType);
+            }
+        }
+        catch (XPathExpressionException xpee) {
+            logger.error(xpee.getLocalizedMessage(), xpee);
+        }
+
+        return null;
+    }
+
+    /**
+     * Streams out an XML document to a given output stream.
+     * @param document The document to be streamed out.
+     * @param out      The output stream to be used.
+     * @return true if operation succeeded else false.
+     */
+    public static boolean toStream(Document document, OutputStream out) {
+        try {
+            Transformer transformer =
+                TransformerFactory.newInstance().newTransformer();
+            DOMSource    source = new DOMSource(document);
+            StreamResult result = new StreamResult(out);
+            transformer.transform(source, result);
+            return true;
+        }
+        catch (TransformerConfigurationException tce) {
+            logger.error(tce.getLocalizedMessage(), tce);
+        }
+        catch (TransformerFactoryConfigurationError tfce) {
+            logger.error(tfce.getLocalizedMessage(), tfce);
+        }
+        catch (TransformerException te) {
+            logger.error(te.getLocalizedMessage(), te);
+        }
+
+        return false;
+    }
+
+    /**
+     * Transforms an XML document into a byte array.
+     * @param document The document to be streamed out.
+     * @return the byte array or null if operation failed or
+     * document is null.
+     */
+    public static byte [] toByteArray(Document document) {
+        if (document == null) {
+            return null;
+        }
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        return toStream(document, baos)
+            ? baos.toByteArray()
+            : null;
+    }
+
+    public static Document fromByteArray(byte [] data) {
+        if (data == null) {
+            return null;
+        }
+        return parseDocument(new ByteArrayInputStream(data));
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/FillStyleWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,324 @@
+package de.intevation.mxd.writer;
+
+import java.io.IOException;
+import java.awt.Color;
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import edu.umn.gis.mapscript.mapObj;
+import edu.umn.gis.mapscript.layerObj;
+import edu.umn.gis.mapscript.classObj;
+import edu.umn.gis.mapscript.styleObj;
+import edu.umn.gis.mapscript.colorObj;
+import edu.umn.gis.mapscript.symbolObj;
+import edu.umn.gis.mapscript.symbolSetObj;
+import edu.umn.gis.mapscript.lineObj;
+import edu.umn.gis.mapscript.pointObj;
+
+
+/**
+ * The interface to the mapfile writer.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class FillStyleWriter {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(FillStyleWriter.class);
+
+    private mapObj map;
+    private classObj cl;
+    private styleObj style;
+
+    public FillStyleWriter (mapObj map, classObj cl) {
+        logger.debug("contructor(mapObj, classObj)");
+        this.map = map;
+        this.cl = cl;
+        this.style = new styleObj(cl);
+    }
+
+    /**
+     * Write the content.
+     */
+    public boolean write(Element symbolElement) {
+        logger.debug("write()Element");
+        symbolSetObj symbolSet = map.getSymbolset();
+
+        if(symbolElement.hasChildNodes()) {
+            NodeList symbols = symbolElement.getChildNodes();
+            for (int i = 0; i < symbols.getLength(); i++) {
+                Element nextSym = (Element)symbols.item(i);
+                String type = nextSym.getAttribute("type");
+
+                if(((symbols.getLength() > 1 && i == 0) ||
+                    (symbols.getLength() == 1 &&
+                     !symbolElement.hasAttribute("hatch"))) &&
+                   type.equals("line")) {
+                    writeOutline(nextSym);
+                    if (symbols.getLength() == 1) {
+                        writeSimple(symbolElement);
+                    }
+                }
+                else if(nextSym.getTagName().equals("symbol") &&
+                   !symbolElement.hasAttribute("hatch") ||
+                   (i == 1 && type.equals("marker"))) {
+                    double gap = 0;
+                    if(symbolElement.hasAttribute("xseparation")) {
+                        try {
+                            gap = Double.parseDouble(
+                                symbolElement.getAttribute("xseparation"));
+                        }
+                        catch(NumberFormatException nfe) {
+                            gap = 0;
+                        }
+                    }
+                    writeMarker(nextSym, gap);
+                }
+                else if (nextSym.getTagName().equals("symbol") &&
+                         symbolElement.hasAttribute("hatch")) {
+                    if(symbolElement.hasAttribute("angle")) {
+                        nextSym.setAttribute(
+                            "angle",
+                            symbolElement.getAttribute("angle"));
+                    }
+                    if(symbolElement.hasAttribute("separation")) {
+                        nextSym.setAttribute(
+                            "size",
+                            symbolElement.getAttribute("separation"));
+                    }
+                    writeMarker(nextSym, -1);
+                }
+                else {
+                    writeSimple(symbolElement);
+                }
+            }
+        }
+        else {
+            writeSimple(symbolElement);
+            if(symbolElement.hasAttribute("outline_color")) {
+                Color oCol = Color.decode(
+                    symbolElement.getAttribute("outline_color"));
+                colorObj outlineColor = new colorObj(
+                    oCol.getRed(),
+                    oCol.getGreen(),
+                    oCol.getBlue(),
+                    -4);
+                style.setOutlinecolor(outlineColor);
+                try {
+                    style.setOutlinewidth(Double.parseDouble(
+                        symbolElement.getAttribute("outline_size")));
+                }
+                catch(NumberFormatException nfe) {
+                    logger.warn("Error setting outline width.");
+                    style.setOutlinewidth(0.0);
+                }
+            }
+
+        }
+
+        return true;
+    }
+
+    /**
+     * Write the outline for a polygon.
+     */
+    private void writeOutline(Element symbolElement) {
+        logger.debug("writeOutline()");
+        //write transparent outline
+        colorObj color = new colorObj(-1, -1, -1, -4);
+        if(symbolElement.hasAttribute("width")) {
+            double w = 0;
+            try {
+                w = Double.parseDouble(symbolElement.getAttribute("width"));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting outline width.");
+                w = 0;
+            }
+            if (w < 1.0) {
+                return;
+            }
+        }
+        //write new style for the outline
+        //TODO write further attribute like pattern etc.
+        Color oCol = Color.decode(
+            symbolElement.getAttribute("color"));
+
+        styleObj outline = new styleObj (cl);
+
+        colorObj outlinecolor = new colorObj(
+            oCol.getRed(),
+            oCol.getGreen(),
+            oCol.getBlue(),
+            -4);
+        outline.setOutlinecolor(outlinecolor);
+        try {
+            outline.setOutlinewidth(Double.parseDouble(
+                symbolElement.getAttribute("width")));
+        }
+        catch(NumberFormatException nfe) {
+            logger.warn("Error setting outline width.");
+            outline.setOutlinewidth(0.0);
+        }
+        if(symbolElement.hasAttribute("linestyle")) {
+            String ls = symbolElement.getAttribute("linestyle");
+            double[] vals;
+            if(ls.equals("dash")) {
+                outline.setPatternlength(2);
+                vals = new double[] {4.0, 4.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                outline.setPattern(vals);
+            }
+            else if(ls.equals("dot")) {
+                outline.setPatternlength(2);
+                vals = new double[] {1.0, 3.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                outline.setPattern(vals);
+            }
+            else if(ls.equals("dashdot")) {
+                outline.setPatternlength(4);
+                vals = new double[] {4.0, 3.0, 1.0, 3.0, 0, 0, 0, 0, 0, 0, 0};
+                outline.setPattern(vals);
+            }
+            else if (ls.equals("dashdotdot")) {
+                outline.setPatternlength(6);
+                vals = new double[] {5.0, 3.0, 1.0, 3.0, 1.0, 4.0, 0, 0, 0, 0};
+                outline.setPattern(vals);
+            }
+        }
+
+
+    }
+
+    /**
+     * Write marker attributes and a symbol for the polygon fill.
+     */
+    private void writeMarker(Element symbolElement, double gap) {
+        logger.debug("writeMarker()");
+        String name = symbolElement.getAttribute("name");
+        String type = symbolElement.getAttribute("type");
+        if (symbolElement.hasAttribute("angle")) {
+            try {
+               style.setAngle(
+                   Double.parseDouble(symbolElement.getAttribute("angle")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting angle.");
+                style.setAngle(0.0);
+            }
+        }
+        if(symbolElement.hasAttribute("color")) {
+            String c = symbolElement.getAttribute("color");
+            Color col = Color.decode(c);
+            colorObj color = new colorObj(
+                col.getRed(),
+                col.getGreen(),
+                col.getBlue(),
+                -4);
+            style.setColor(color);
+        }
+        if (symbolElement.hasAttribute ("size")) {
+            double size = 1;
+            try {
+                size = Double.parseDouble(symbolElement.getAttribute("size"));
+            }
+            catch(NumberFormatException nfe) {
+                size = 1.0;
+            }
+            style.setSize(size);
+            //In arcgis the separation goes from center to center, so the gap is
+            //the separation - size
+            if (gap > 0) {
+                style.setGap(gap - size);
+            }
+        }
+        if(symbolElement.hasAttribute("outline_color")) {
+            Color oCol = Color.decode(
+                symbolElement.getAttribute("outline_color"));
+            colorObj outlineColor = new colorObj(
+                oCol.getRed(),
+                oCol.getGreen(),
+                oCol.getBlue(),
+                -4);
+            style.setOutlinecolor(outlineColor);
+            try {
+                style.setOutlinewidth(Double.parseDouble(
+                    symbolElement.getAttribute("outline_size")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting angle.");
+                style.setOutlinewidth(0.0);
+            }
+        }
+        if(type.equals("marker")) {
+            style.setSymbolByName(map, name);
+            SymbolWriter sw = new SymbolWriter(this.map, this.cl);
+            sw.write(symbolElement);
+        }
+        else if(type.equals("line")) {
+            style.setSymbolByName(map, "hatch");
+            SymbolWriter sw = new SymbolWriter(this.map, this.cl);
+            symbolElement.setAttribute("name", "hatch");
+            sw.write(symbolElement);
+            if(symbolElement.hasAttribute("linestyle")) {
+                String ls = symbolElement.getAttribute("linestyle");
+                double[] vals;
+                if(ls.equals("dash")) {
+                    style.setPatternlength(2);
+                    vals = new double[] {4.0, 4.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                    style.setPattern(vals);
+                }
+                else if(ls.equals("dot")) {
+                    style.setPatternlength(2);
+                    vals = new double[] {1.0, 3.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                    style.setPattern(vals);
+                }
+                else if(ls.equals("dashdot")) {
+                    style.setPatternlength(4);
+                    vals = new double[] {4.0, 3.0, 1.0, 3.0, 0, 0, 0, 0, 0, 0, 0};
+                    style.setPattern(vals);
+                }
+                else if (ls.equals("dashdotdot")) {
+                    style.setPatternlength(6);
+                    vals = new double[] {5.0, 3.0, 1.0, 3.0, 1.0, 4.0, 0, 0, 0, 0};
+                    style.setPattern(vals);
+                }
+            }
+        }
+    }
+
+    /**
+     * Write simple fill attributes.
+     */
+    private void writeSimple(Element symbolElement) {
+        logger.debug("writeSimple(Element)");
+        if(symbolElement.hasAttribute("transparency")) {
+            double value = 0;
+            try {
+                value = Double.parseDouble(
+                    symbolElement.getAttribute("transparency"));
+            }
+            catch(NumberFormatException nfe) {
+                value = 0;
+            }
+            int opacity = (int)(value/255) * 100;
+            if(value >= 0) {
+                style.setOpacity(opacity);
+            }
+        }
+        if(symbolElement.hasAttribute("color")) {
+            String c = symbolElement.getAttribute("color");
+            Color col = Color.decode(c);
+            colorObj color = new colorObj(
+                col.getRed(),
+                col.getGreen(),
+                col.getBlue(),
+                -4);
+            style.setColor(color);
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/IWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,16 @@
+package de.intevation.mxd.writer;
+
+import org.w3c.dom.Document;
+
+/**
+ * The interface to the mapfile writer.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public interface IWriter {
+    /**
+     * Write the content.
+     */
+    boolean write(Document doc);
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/LineStyleWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,168 @@
+package de.intevation.mxd.writer;
+
+import java.awt.Color;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+
+import edu.umn.gis.mapscript.mapObj;
+import edu.umn.gis.mapscript.classObj;
+import edu.umn.gis.mapscript.styleObj;
+import edu.umn.gis.mapscript.colorObj;
+import edu.umn.gis.mapscript.symbolObj;
+import edu.umn.gis.mapscript.symbolSetObj;
+
+
+/**
+ * The interface to the mapfile writer.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class LineStyleWriter {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(LineStyleWriter.class);
+
+    private mapObj map;
+    private classObj cl;
+    private styleObj style;
+
+    public LineStyleWriter (mapObj map, classObj cl) {
+        this.map = map;
+        this.cl = cl;
+        this.style = new styleObj(cl);
+    }
+
+    /**
+     * Write the content.
+     */
+    public boolean write(Element symbolElement) {
+        logger.debug("write(Element)");
+        symbolSetObj symbolSet = map.getSymbolset();
+        if(symbolElement.hasAttribute("width")) {
+            double w = 0;
+            try {
+                w = Double.parseDouble(symbolElement.getAttribute("width"));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting width. No line width set.");
+                w = 0;
+            }
+            if(w < 1.0) {
+                return false;
+            }
+            style.setWidth((int)w);
+        }
+        if(symbolElement.hasAttribute("angle")) {
+            try {
+                style.setAngle(
+                    Double.parseDouble(symbolElement.getAttribute("angle")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.info("Error setting angle. Could not get value.");
+            }
+        }
+        if(symbolElement.hasAttribute("color")) {
+            String c = symbolElement.getAttribute("color");
+            Color col = Color.decode(c);
+            colorObj color = new colorObj(
+                col.getRed(),
+                col.getGreen(),
+                col.getBlue(),
+                -4);
+            style.setColor(color);
+        }
+
+        if(symbolElement.hasAttribute("size")) {
+            try {
+                style.setSize((int)Double.parseDouble(
+                    symbolElement.getAttribute("size")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting size. Setting size to 1.");
+                style.setSize (1);
+            }
+        }
+        String type = symbolElement.getAttribute("type");
+        if(type.equals("marker")) {
+            SymbolWriter sw = new SymbolWriter(this.map, this.cl);
+            sw.write(symbolElement);
+        }
+        String name = symbolElement.getAttribute("name");
+        style.setSymbolByName(map, name);
+        symbolObj sym = symbolSet.getSymbolByName(name);
+
+        //The following lines are for dashed and/or dotted lines.
+        if(symbolElement.hasAttribute("linestyle")) {
+            String ls = symbolElement.getAttribute("linestyle");
+            double[] vals;
+            if(ls.equals("dash")) {
+                style.setPatternlength(2);
+                vals = new double[] {4.0, 4.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                style.setPattern(vals);
+            }
+            else if(ls.equals("dot")) {
+                style.setPatternlength(2);
+                vals = new double[] {1.0, 4.0, 0, 0, 0, 0, 0, 0, 0, 0};
+                style.setPattern(vals);
+            }
+            else if(ls.equals("dashdot")) {
+                style.setPatternlength(4);
+                vals = new double[] {5.0, 4.0, 1.0, 4.0, 0, 0, 0, 0, 0, 0};
+                style.setPattern(vals);
+            }
+            else if (ls.equals("dashdotdot")) {
+                style.setPatternlength(6);
+                vals = new double[] {5.0, 4.0, 1.0, 3.0, 1.0, 4.0, 0, 0, 0, 0};
+                style.setPattern(vals);
+            }
+        }
+        else if(symbolElement.hasAttribute("pattern_count")) {
+            int count = 0;
+            try {
+                count = Integer.parseInt(
+                            symbolElement.getAttribute("pattern_count"));
+                double[] vals = new double[10];
+                double move = 0.0;
+                int pos = 0;
+                for(int i = 0; i < count; i++) {
+                    double mark =
+                        Double.parseDouble(symbolElement.getAttribute("mark_" + i));
+                    double gap =
+                        Double.parseDouble(symbolElement.getAttribute("gap_" + i));
+                    if(i == 0 && mark == 0.0) {
+                        move = gap;
+                    }
+                    else if(i == count - 1 && move > 0.0) {
+                       vals[pos++] = mark;
+                       vals[pos++] = gap + move;
+                    }
+                    else {
+                        vals[pos++] = mark;
+                        vals[pos++] = gap;
+                    }
+                }
+                if(move > 0.0) {
+                    style.setPatternlength((count*2) -2);
+                }
+                else {
+                    style.setPatternlength(count*2);
+                }
+                style.setPattern(vals);
+
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Could not write PATTERN.");
+            }
+        }
+
+
+
+
+        return false;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/MapScriptWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,382 @@
+package de.intevation.mxd.writer;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.io.File;
+
+import javax.xml.xpath.XPathConstants;
+
+import edu.umn.gis.mapscript.mapObj;
+import edu.umn.gis.mapscript.layerObj;
+import edu.umn.gis.mapscript.classObj;
+
+import edu.umn.gis.mapscript.MS_UNITS;
+import edu.umn.gis.mapscript.MS_LAYER_TYPE;
+import edu.umn.gis.mapscript.MS_CONNECTION_TYPE;
+
+import de.intevation.mxd.utils.XMLUtils;
+
+/**
+ * The Mapfile Writer.
+ * This Writer uses the MapScript Java API to create Mapfiles from a DOM.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MapScriptWriter
+implements IWriter
+{
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(MapScriptWriter.class);
+
+    /**
+     * Private member.
+     */
+    private Document root;
+    private mapObj map;
+    private String mapFilename;
+    private String MS_BINDIR = "c:/ms_6.1-dev/bin";
+    private String prefix = "";
+
+    public MapScriptWriter() {
+        map = new mapObj("");
+        mapFilename = "";
+    }
+
+    public MapScriptWriter(String templ, String filename) {
+        map = new mapObj(templ);
+        mapFilename = filename;
+    }
+
+    /**
+     * Write the mapfile.
+     * @param doc The root document containin the map attributes.
+     *
+     * @return Currently always true.
+     */
+    public boolean write(Document doc) {
+        logger.debug("write()");
+        this.root = doc;
+
+        //Get the filename.
+        Element fileNode = (Element)XMLUtils.xpath(
+            root,
+            "/mxd/file",
+            XPathConstants.NODE);
+        //Write the map attributes.
+        writeMap();
+        //Write the layers.
+        writeLayer();
+        //Save the map.
+        mapObj cloneMap = map.cloneMap();
+        cloneMap.save(mapFilename);
+        logger.info("Mapfile successfully created.");
+        return true;
+    }
+
+    /**
+     * Create the map object and set the attributes.
+     */
+    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"));
+        map.setMetaData("wms_title", 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_METERS;
+        }
+        map.setUnits(msu);
+
+        //TODO: Find out whats the correct scale value.
+        //map.setScaledenom(Double.parseDouble(mapNode.getAttribute("scale")));
+    }
+
+    /**
+     * Create layer objects and set the attributes.
+     */
+    private void writeLayer() {
+        logger.debug("writeLayer()");
+        Element mapNode = (Element)XMLUtils.xpath(
+            root,
+            "/mxd/map",
+            XPathConstants.NODE);
+        NodeList list = mapNode.getElementsByTagName("layer");
+        for(int i = 0; i < list.getLength(); i++) {
+            Element layerElement = (Element)list.item(i);
+            layerObj layer = new layerObj(map);
+
+            //The layer name.
+            String lname = layerElement.getAttribute("name");
+            lname = lname.replaceAll(" ", "");
+            layer.setName(lname);
+            layer.setMetaData("wms_title", layerElement.getAttribute("name"));
+
+            //The layer status.
+            String stat = layerElement.getAttribute("status");
+            if (stat.equals("on")) {
+                layer.setStatus(1);
+            }
+            else {
+                layer.setStatus(0);
+            }
+
+            //The scale.
+            double maxScale = 0;
+            double minScale = 0;
+            try {
+                maxScale =
+                    Double.parseDouble(layerElement.getAttribute("max_scale"));
+                minScale =
+                    Double.parseDouble(layerElement.getAttribute("min_scale"));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting scale.");
+                maxScale = 0;
+                minScale = 0;
+            }
+            layer.setMaxscaledenom(maxScale);
+            layer.setMinscaledenom(minScale);
+
+            //The layer type.
+            String type = layerElement.getAttribute("type");
+            if(type.equals("point")) {
+                layer.setType(MS_LAYER_TYPE.MS_LAYER_POINT);
+            }
+            else if (type.equals("line")) {
+                layer.setType(MS_LAYER_TYPE.MS_LAYER_LINE);
+            }
+            else if (type.equals("polygon")) {
+                layer.setType(MS_LAYER_TYPE.MS_LAYER_POLYGON);
+            }
+            layer.setTileitem("");
+
+            //The layer datasource.
+            String con_type = layerElement.getAttribute("connection_type");
+            if(con_type.equals("local")) {
+                String datasource = "";
+                if(layerElement.hasAttribute("workspace")) {
+                    datasource = layerElement.getAttribute("workspace");
+                    datasource += File.separator;
+                }
+                datasource += layerElement.getAttribute("data_source");
+                layer.setData(datasource);
+            }
+            else if(con_type.equals("SDE")) {
+                logger.info(
+                    "SDE datasource found." +
+                    " Please edit password in mapfile.");
+                layer.setConnectionType(
+                MS_CONNECTION_TYPE.MS_PLUGIN.swigValue(),
+                MS_BINDIR + "/ms/plugins/msplugin_sde_93.dll");
+                layer.setConnection(
+                layerElement.getAttribute("server") + "," +
+                    "port:" + layerElement.getAttribute("instance") + "," +
+                layerElement.getAttribute("database") + "," +
+                layerElement.getAttribute("user") + ",<PASSWORD>");
+                layer.setData(
+                    layerElement.getAttribute("data_source") +
+                    ",SHAPE," +
+                    layerElement.getAttribute("version"));
+                layer.setProcessing("CLOSE_CONNECTION=defer");
+                layer.setProcessing("ATTRIBUTE_QUALIFIED=TRUE");
+                if(layerElement.hasAttribute("join_table")) {
+                    layer.setProcessing(
+                        "JOINTABLE=" +
+                    layerElement.getAttribute("join_table"));
+                    layer.setFilter(
+                        "where " + 
+                        layerElement.getAttribute("definition_query") +
+                        " AND " +
+                        layerElement.getAttribute("join_table_target") + "." +
+                        layerElement.getAttribute("join_field_target") + "=" +
+                        layerElement.getAttribute("join_table") + "." +
+                        layerElement.getAttribute("join_field"));
+                }
+                else {
+                    prefix = layerElement.getAttribute("data_source");
+                }
+            }
+            layer.setTemplate("PleaseInsertAValidTemplateForGFI");
+            //Write classes.
+            writeClass(layer, layerElement);
+        }
+
+    }
+
+    /**
+     * Adds the classes to the layer.
+     * @param layer        Mapscript layer object.
+     * @param layerElement Dom element containing the class attributes.
+     */
+    private void writeClass(layerObj layer, Element layerElement) {
+        logger.debug("writeClass(layerObj, Element)");
+        //Get all renderer elements (renderer in arcgis equals class in the
+        //mapfile.)
+        NodeList list = layerElement.getElementsByTagName("renderer");
+
+        //Create all found class objects and write the symbols and styles for
+        //each class.
+        for(int i = 0; i < list.getLength(); i++) {
+            Element classElement = (Element)list.item(i);
+            classObj co = new classObj(layer);
+            String name = classElement.getAttribute("label");
+            if (name.equals("")) {
+                name = layerElement.getAttribute("name");
+                if (list.getLength() > 1) {
+                    name += "-" + i;
+                }
+            }
+            co.setName (name);
+            if(classElement.hasAttribute("field_count")) {
+                co.setExpression(createExpression(classElement));
+            }
+            //Write symbols and styles.
+            NodeList l = classElement.getChildNodes();
+            for (int j = l.getLength() - 1; j >= 0; j--) {
+                Element elem = (Element)l.item(j);
+
+                String type = layerElement.getAttribute("type");
+                if(type.equals("point") && elem.getTagName().equals("symbol")) {
+                    MarkerStyleWriter swriter = new MarkerStyleWriter (this.map, co);
+                    swriter.write (elem);
+                }
+                else if(type.equals("line") && elem.getTagName().equals("symbol")) {
+                    LineStyleWriter swriter = new LineStyleWriter (this.map, co);
+                    swriter.write (elem);
+                }
+                else if(type.equals("polygon") && elem.getTagName().equals("symbol")) {
+                    FillStyleWriter swriter = new FillStyleWriter (this.map, co);
+                    swriter.write (elem);
+                }
+            }
+        }
+    }
+
+
+    private String createExpression(Element ce) {
+        String expression = "(";
+        int count = 0;
+        try {
+            count = Integer.parseInt(ce.getAttribute("field_count"));
+        }
+        catch(NumberFormatException nfe) {
+            return "";
+        }
+        if(count == 1) {
+            try {
+                Double.parseDouble(ce.getAttribute("value"));
+                String exp = ce.getAttribute("expression_field_0");
+                String pre = "";
+                if (!prefix.equals("") && !exp.startsWith(prefix)) {
+                    pre = prefix + ".";
+                }
+                expression += "[" + pre;
+                expression += ce.getAttribute("expression_field_0") + "]";
+                if(ce.hasAttribute("min_value")) {
+                    expression += " > " + ce.getAttribute("min_value");
+                    expression += " AND [";
+                    expression += ce.getAttribute("expression_field_0")+ "]";
+                }
+                expression += " " + ce.getAttribute("expression_operator");
+                expression += " " + ce.getAttribute("value") + ")";
+            }
+            catch(NumberFormatException nfe) {
+                String exp = ce.getAttribute("expression_field_0");
+                String pre = "";
+                if (!prefix.equals("") && !exp.startsWith(prefix)) {
+                    pre = prefix + ".";
+                }
+                expression += "\"[" + pre;
+                expression += ce.getAttribute("expression_field_0") + "]\"";
+                expression += " " + ce.getAttribute("expression_operator");
+                expression += " \"" + ce.getAttribute("value") + "\")";	
+            }
+            catch(Exception e) {
+                e.printStackTrace();
+            }
+        }
+        else {
+            for (int i = 0; i < count; i++) {
+                try {
+                    Double.parseDouble(ce.getAttribute("value_" + i));
+                    String exp = ce.getAttribute("expression_field_" + i);
+                    String pre = "";
+                    if (!prefix.equals("") && !exp.startsWith(prefix)) {
+                       pre = prefix + ".";
+                    }
+                    expression += "[" + pre;
+                    expression += ce.getAttribute("expression_field_" + i) + "]";
+                    expression += " " + ce.getAttribute("expression_operator");
+                    expression += " " + ce.getAttribute("value_" + i);
+                    if (i < count - 1) {
+                        expression += " AND ";
+                    }
+                    else {
+                        expression += ")";
+                    }
+                }
+                catch (NumberFormatException nfe) {
+                    String exp = ce.getAttribute("expression_field_" + i);
+                    String pre = "";
+                    if (!prefix.equals("") && !exp.startsWith(prefix)) {
+                       pre = prefix + ".";
+                    }
+                    expression += "\"[" + pre;
+                    expression += ce.getAttribute("expression_field_" + i) + "]\"";
+                    expression += " " + ce.getAttribute("expression_operator");
+                    expression += " " + ce.getAttribute("value_" + i);
+                    if (i < count - 1) {
+                        expression += " AND ";
+                    }
+                    else {
+                        expression += ")";
+                    }
+                }
+            }
+        }
+        return expression;
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/MarkerStyleWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,108 @@
+package de.intevation.mxd.writer;
+
+import java.awt.Color;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+
+import edu.umn.gis.mapscript.mapObj;
+import edu.umn.gis.mapscript.classObj;
+import edu.umn.gis.mapscript.styleObj;
+import edu.umn.gis.mapscript.colorObj;
+import edu.umn.gis.mapscript.symbolSetObj;
+
+
+/**
+ * The interface to the mapfile writer.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class MarkerStyleWriter {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(MarkerStyleWriter.class);
+
+    private mapObj map;
+    private classObj cl;
+    private styleObj style;
+
+    public MarkerStyleWriter (mapObj map, classObj cl) {
+        this.map = map;
+        this.cl = cl;
+        this.style = new styleObj(cl);
+    }
+
+    /**
+     * Write the content.
+     */
+    public boolean write(Element symbolElement) {
+        logger.debug("write(Element)");
+        symbolSetObj symbolSet = map.getSymbolset();
+
+        if (symbolElement.hasAttribute("angle")) {
+            try {
+                style.setAngle(
+                    Double.parseDouble(symbolElement.getAttribute("angle")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting angle.");
+                style.setAngle(0.0);
+            }
+        }
+        if(symbolElement.hasAttribute("color")) {
+            String c = symbolElement.getAttribute("color");
+            Color col = Color.decode(c);
+            colorObj color = new colorObj(
+                col.getRed(),
+                col.getGreen(),
+                col.getBlue(),
+                -4);
+            style.setColor(color);
+        }
+        if (symbolElement.hasAttribute ("size")) {
+            try {
+                style.setSize(Double.parseDouble(
+                    symbolElement.getAttribute("size")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting size. Setting to deafult: 1.");
+                style.setSize(1);
+            }
+        }
+        if(symbolElement.hasAttribute("outline_color")) {
+            Color oCol = Color.decode(
+                symbolElement.getAttribute("outline_color"));
+            colorObj outlineColor = new colorObj(
+                oCol.getRed(),
+                oCol.getGreen(),
+                oCol.getBlue(),
+                -4);
+            style.setOutlinecolor(outlineColor);
+            try {
+                style.setOutlinewidth(Double.parseDouble(
+                    symbolElement.getAttribute("outline_size")));
+            }
+            catch(NumberFormatException nfe) {
+                logger.warn("Error setting outline width.");
+            }
+        }
+        String symType = symbolElement.getAttribute("style");
+        if(symType.equals("point") ||
+           symType.equals("arrow") ||
+           symType.equals("char")) {
+           SymbolWriter sw = new SymbolWriter(this.map, this.cl);
+           sw.write(symbolElement);
+        }
+        else {
+            return false;
+        }
+        String name = symbolElement.getAttribute("name");
+        style.setSymbolByName(map, name);
+
+        return true;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/writer/SymbolWriter.java	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,200 @@
+package de.intevation.mxd.writer;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Element;
+
+import edu.umn.gis.mapscript.mapObj;
+import edu.umn.gis.mapscript.classObj;
+import edu.umn.gis.mapscript.styleObj;
+import edu.umn.gis.mapscript.symbolObj;
+import edu.umn.gis.mapscript.symbolSetObj;
+import edu.umn.gis.mapscript.lineObj;
+import edu.umn.gis.mapscript.pointObj;
+import edu.umn.gis.mapscript.MS_SYMBOL_TYPE;
+
+
+/**
+ * The interface to the mapfile writer.
+ *
+ * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
+ */
+public class SymbolWriter {
+
+    /**
+     * The Logger.
+     */
+    private static final Logger logger = Logger.getLogger(SymbolWriter.class);
+
+    private mapObj map;
+    private classObj cl;
+    private styleObj style;
+
+    public SymbolWriter (mapObj map, classObj cl) {
+        this.map = map;
+        this.cl = cl;
+        this.style = new styleObj(cl);
+    }
+
+    /**
+     * Write the content.
+     */
+    public boolean write(Element symbolElement) {
+        logger.debug("write(Element)");
+        symbolSetObj symbolSet = map.getSymbolset();
+
+        String name = symbolElement.getAttribute("name");
+        symbolObj sym = symbolSet.getSymbolByName(name);
+        String symType = symbolElement.getAttribute("style");
+        String type = symbolElement.getAttribute("type");
+        if(symType.equals("point")) {
+            writeSimple(sym);
+        }
+        else if (symType.equals("arrow")) {
+            writeArrow(sym, symbolElement);
+        }
+        else if (symType.equals("char")) {
+            int exists = symbolExists(symbolElement);
+            if(exists == -1) {
+                String old = symbolElement.getAttribute("name");
+                symbolElement.setAttribute(
+                    "name",
+                    old + symbolSet.getNumsymbols() + 1);
+                writeCharacter(sym, symbolElement);
+            }
+            else {
+                symbolElement.setAttribute(
+                    "name",
+                    symbolSet.getSymbol(exists).getName());
+            }
+        }
+        else if (type.equals("line")) {
+            writeHatch(sym);
+        }
+        else {
+            return false;
+        }
+
+        try {
+            saveSymbolSet(symbolSet);
+        }
+        catch(Exception e) {
+            logger.error("Error saving symbol set.");
+            return false;
+        }
+
+        return true;
+    }
+
+    private void writeSimple(symbolObj symbol) {
+        logger.debug("writeSimple(symbolObj)");
+        lineObj points = new lineObj();
+        points.add(new pointObj(1,1,0));
+        symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_ELLIPSE.swigValue());
+        symbol.setPoints(points);
+        symbol.setFilled(1);
+    }
+
+    private void writeArrow(symbolObj symbol, Element symbolElement) {
+        logger.debug("writeArrow(symbolObj, Element)");
+        double len = 0;
+        double width = 1;
+        try {
+            len =
+                Double.parseDouble(symbolElement.getAttribute("length"));
+            width =
+                Double.parseDouble(symbolElement.getAttribute("width"));
+        }
+        catch(NumberFormatException nfe) {
+            logger.warn ("Error setting arrow symbol.");
+            return;
+        }
+        double ratio = len/width;
+        lineObj points = new lineObj();
+
+        points.add(new pointObj(0, 0, 0));
+        points.add(new pointObj((1*ratio), 0.5, 0));
+        points.add(new pointObj(0, 1, 0));
+        points.add(new pointObj(0, 0, 0));
+        symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_VECTOR.swigValue());
+        symbol.setPoints(points);
+        symbol.setFilled(1);
+    }
+
+    private void writeCharacter(symbolObj symbol, Element symbolElement) {
+        logger.debug("writeCharacter(symbolObj, Element)");
+        //TODO Write the symbol correctly. See Issue 3885 on trac.osgeo.org
+        String font = symbolElement.getAttribute("font");
+        //Remove all blank character to match the mapserver fonts.txt.
+        font = font.replaceAll(" ", "");
+        symbol.setName(symbolElement.getAttribute("name"));
+        symbol.setFont(font);
+        symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_TRUETYPE.swigValue());
+        symbol.setAntialias(1);
+        symbol.setCharacter("&#" + symbolElement.getAttribute("char") + ";");
+    }
+
+    private void writeHatch(symbolObj symbol) {
+        logger.debug("writeHatch(symbolObj)");
+        symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_HATCH.swigValue());
+    }
+
+    public boolean canWrite(String type) {
+        if (type.equals("point") ||
+            type.equals("arrow") ||
+            type.equals("char") ||
+            type.equals("line")) {
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    private void saveSymbolSet(symbolSetObj symbols)
+    throws Exception {
+        String path = this.map.getMappath();
+        if(path.equals("")) {
+            return;
+        }
+        else {
+            path += "symbols.sym";
+        }
+        symbols.save(path);
+    }
+
+    private int symbolExists (Element elem) {
+        symbolSetObj symbolSet = map.getSymbolset();
+        for (int i = 0; i < symbolSet.getNumsymbols(); i++) {
+            symbolObj sym = symbolSet.getSymbol(i);
+            int stype = sym.getType();
+            String etype = elem.getAttribute("style");
+            if(stype == MS_SYMBOL_TYPE.MS_SYMBOL_ELLIPSE.swigValue () &&
+                etype.equals("point")) {
+                return i;
+            }
+            else if(stype == MS_SYMBOL_TYPE.MS_SYMBOL_VECTOR.swigValue () &&
+                    etype.equals("arrow")) {
+                return i;
+            }
+            else if(stype == MS_SYMBOL_TYPE.MS_SYMBOL_TRUETYPE.swigValue () &&
+                    etype.equals("char")) {
+                String font = elem.getAttribute("font");
+                font = font.replaceAll(" ", "");
+                String c = elem.getAttribute("char");
+                c = "&#" + c + ";";
+                if (font.equals(sym.getFont()) &&
+                    c.equals(sym.getCharacter())) {
+                    return i;
+                }
+
+            }
+            else if(stype == MS_SYMBOL_TYPE.MS_SYMBOL_HATCH.swigValue () &&
+                    etype.equals("hatch")) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/COPYING	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,11 @@
+The Free Vector GeoData Osnabrück (Frida) is
+Copyright (C) by Intevation GmbH and licensed
+under the GNU General Public License (see COPYING.GPL).
+
+Additional license agreement:
+
+The GNU GPL has been chosen because no analog license
+for geographic data does yet exists.
+If in the future the Free Software Foundation Europe
+officially accepts a Geographic Data license as to be analog
+to the GNU GPL, Frida may be upgraded to this new license.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/COPYING.GPL	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/README	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,20 @@
+This archive contains the Shapefile-formatted version of the
+
+	Frida: Free Vector-Geodata Osnabrück
+
+Class attributes are in separate .dbf-files and can be joined to
+the .shp-files via corresponding IDs.
+
+Finally there is a .thuban-file for displaying all shapefiles
+quickly. You need to have Thuban installed on your system for this.
+
+
+The contents of this archive is not regarded as the sources,
+visit the homepage to get the actual source files.
+
+For the license see file COPYING.
+
+Read here for more:
+
+	frida.intevation.org
+	thuban.intevation.org
Binary file testdata-frida/gewaesserflaechen.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/gewaesserflaechen.prj	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+PROJCS["Transverse Mercator",GEOGCS["bessel",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["bessel",6377397.155,299.1528128],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.70]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0]]
Binary file testdata-frida/gewaesserflaechen.shp has changed
Binary file testdata-frida/gewaesserflaechen.shx has changed
Binary file testdata-frida/gewaesserlinien.dbf has changed
Binary file testdata-frida/gewaesserlinien.shp has changed
Binary file testdata-frida/gewaesserlinien.shx has changed
Binary file testdata-frida/gewaesserlinien_namen.dbf has changed
Binary file testdata-frida/gruenflaechen.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/gruenflaechen.prj	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+PROJCS["Transverse Mercator",GEOGCS["bessel",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["bessel",6377397.155,299.1528128],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.70]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0]]
Binary file testdata-frida/gruenflaechen.shp has changed
Binary file testdata-frida/gruenflaechen.shx has changed
Binary file testdata-frida/gruenflaechen_typen.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/overview.thuban	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE session SYSTEM "thuban.dtd">
+<session title="Frida: Free Vector Geodata Osnabrueck">
+	<map title="Osnabrueck">
+		<layer title="gruenflaechen" filename="gruenflaechen.shp" fill="#00ff7f" stroke="#000000" stroke_width="1"/>
+		<layer title="gewaesserflaechen" filename="gewaesserflaechen.shp" fill="#3232cc" stroke="#000000" stroke_width="1"/>
+		<layer title="gewaesserlinien" filename="gewaesserlinien.shp" fill="None" stroke="#3232cc" stroke_width="1"/>
+		<layer title="poi" filename="poi.shp" fill="None" stroke="#000000" stroke_width="1"/>
+		<layer title="strassen" filename="strassen.shp" fill="None" stroke="#000000" stroke_width="1"/>
+	</map>
+</session>
Binary file testdata-frida/poi.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/poi.prj	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+PROJCS["Transverse Mercator",GEOGCS["bessel",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["bessel",6377397.155,299.1528128],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.70]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0]]
Binary file testdata-frida/poi.shp has changed
Binary file testdata-frida/poi.shx has changed
Binary file testdata-frida/poi_typen.dbf has changed
Binary file testdata-frida/strassen.dbf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/testdata-frida/strassen.prj	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,1 @@
+PROJCS["Transverse Mercator",GEOGCS["bessel",DATUM["Deutsches_Hauptdreiecksnetz",SPHEROID["bessel",6377397.155,299.1528128],TOWGS84[598.1,73.7,418.2,0.202,0.045,-2.455,6.70]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],PARAMETER["false_easting",3500000],PARAMETER["false_northing",0]]
Binary file testdata-frida/strassen.shp has changed
Binary file testdata-frida/strassen.shx has changed
Binary file testdata-frida/strassen_namen.dbf has changed
Binary file testdata-frida/strassen_typen.dbf has changed
Binary file ttf-fonts/DejaVuSans.ttf has changed
Binary file ttf-fonts/esri_1.ttf has changed
Binary file ttf-fonts/esri_105.ttf has changed
Binary file ttf-fonts/esri_11.ttf has changed
Binary file ttf-fonts/esri_12.ttf has changed
Binary file ttf-fonts/esri_121.ttf has changed
Binary file ttf-fonts/esri_13.ttf has changed
Binary file ttf-fonts/esri_130.ttf has changed
Binary file ttf-fonts/esri_131.ttf has changed
Binary file ttf-fonts/esri_132.ttf has changed
Binary file ttf-fonts/esri_133.ttf has changed
Binary file ttf-fonts/esri_14.ttf has changed
Binary file ttf-fonts/esri_144.ttf has changed
Binary file ttf-fonts/esri_149.ttf has changed
Binary file ttf-fonts/esri_15.ttf has changed
Binary file ttf-fonts/esri_150.ttf has changed
Binary file ttf-fonts/esri_151.ttf has changed
Binary file ttf-fonts/esri_152.ttf has changed
Binary file ttf-fonts/esri_153.ttf has changed
Binary file ttf-fonts/esri_159.ttf has changed
Binary file ttf-fonts/esri_16.ttf has changed
Binary file ttf-fonts/esri_160.ttf has changed
Binary file ttf-fonts/esri_161.ttf has changed
Binary file ttf-fonts/esri_17.ttf has changed
Binary file ttf-fonts/esri_19.ttf has changed
Binary file ttf-fonts/esri_2.ttf has changed
Binary file ttf-fonts/esri_20.ttf has changed
Binary file ttf-fonts/esri_21.ttf has changed
Binary file ttf-fonts/esri_216.ttf has changed
Binary file ttf-fonts/esri_22.ttf has changed
Binary file ttf-fonts/esri_220.ttf has changed
Binary file ttf-fonts/esri_221.ttf has changed
Binary file ttf-fonts/esri_222.ttf has changed
Binary file ttf-fonts/esri_223.ttf has changed
Binary file ttf-fonts/esri_224.ttf has changed
Binary file ttf-fonts/esri_225.ttf has changed
Binary file ttf-fonts/esri_23.ttf has changed
Binary file ttf-fonts/esri_24.ttf has changed
Binary file ttf-fonts/esri_25.ttf has changed
Binary file ttf-fonts/esri_26.ttf has changed
Binary file ttf-fonts/esri_27Mcr_2.ttf has changed
Binary file ttf-fonts/esri_29.ttf has changed
Binary file ttf-fonts/esri_3.ttf has changed
Binary file ttf-fonts/esri_30s.ttf has changed
Binary file ttf-fonts/esri_33.ttf has changed
Binary file ttf-fonts/esri_34.ttf has changed
Binary file ttf-fonts/esri_375.ttf has changed
Binary file ttf-fonts/esri_376.ttf has changed
Binary file ttf-fonts/esri_377.ttf has changed
Binary file ttf-fonts/esri_39.ttf has changed
Binary file ttf-fonts/esri_4.ttf has changed
Binary file ttf-fonts/esri_40.ttf has changed
Binary file ttf-fonts/esri_400.ttf has changed
Binary file ttf-fonts/esri_405.ttf has changed
Binary file ttf-fonts/esri_406.ttf has changed
Binary file ttf-fonts/esri_44.ttf has changed
Binary file ttf-fonts/esri_47.ttf has changed
Binary file ttf-fonts/esri_48.ttf has changed
Binary file ttf-fonts/esri_49.ttf has changed
Binary file ttf-fonts/esri_5.ttf has changed
Binary file ttf-fonts/esri_500.ttf has changed
Binary file ttf-fonts/esri_651.ttf has changed
Binary file ttf-fonts/esri_652.ttf has changed
Binary file ttf-fonts/esri_7.ttf has changed
Binary file ttf-fonts/esri_730.ttf has changed
Binary file ttf-fonts/esri_8.ttf has changed
Binary file ttf-fonts/esri_800.ttf has changed
Binary file ttf-fonts/esri_801.ttf has changed
Binary file ttf-fonts/esri_802.ttf has changed
Binary file ttf-fonts/esri_803.ttf has changed
Binary file ttf-fonts/esri_804.ttf has changed
Binary file ttf-fonts/esri_832.ttf has changed
Binary file ttf-fonts/esri_837.ttf has changed
Binary file ttf-fonts/esri_9.ttf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ttf-fonts/fonts.txt	Thu Jun 30 12:40:27 2011 +0200
@@ -0,0 +1,77 @@
+# Make sure that your alias-names do _not_ contain spaces since the 
+# parser dies not handle that correctly.
+# FreeSans is a default fallback-font.
+FreeSans DejaVuSans.ttf
+ESRIMeteorological01 esri_105.ttf
+ESRIDefaultMarker esri_11.ttf
+ESRIOrdnanceSurvey esri_121.ttf
+ESRINIMADNCPT esri_12.ttf
+ESRISDS1.951 esri_130.ttf
+ESRISDS1.952 esri_131.ttf
+ESRISDS2.001 esri_132.ttf
+ESRISDS2.002 esri_133.ttf
+ESRINIMADNCLN esri_13.ttf
+ESRIArrowhead esri_144.ttf
+ESRISurveyor esri_149.ttf
+ESRINIMAVMAP1&2PT esri_14.ttf
+ESRIAMFMElectric esri_150.ttf
+ESRIAMFMGas esri_151.ttf
+ESRIAMFMSewer esri_152.ttf
+ESRIAMFMWater esri_153.ttf
+ESRIHydrants esri_159.ttf
+ESRINIMAVMAP1&2LN esri_15.ttf
+ESRITelecom esri_160.ttf
+ESRIPipelineUS1 esri_161.ttf
+ESRINIMACityGraphicPT esri_16.ttf
+ESRINIMACityGraphicLN esri_17.ttf
+ESRIMilMod02 esri_19.ttf
+ESRICartography esri_1.ttf
+ESRIMilRed01 esri_20.ttf
+ESRIIGLFont16 esri_216.ttf
+ESRIMilSym01 esri_21.ttf
+ESRIIGLFont20 esri_220.ttf
+ESRIIGLFont21 esri_221.ttf
+ESRIIGLFont22 esri_222.ttf
+ESRIIGLFont23 esri_223.ttf
+ESRIIGLFont24 esri_224.ttf
+ESRIIGLFont25 esri_225.ttf
+ESRIMilSym02 esri_22.ttf
+ESRIMilSym03 esri_23.ttf
+ESRIMilSym04 esri_24.ttf
+ESRIMilSym05 esri_25.ttf
+ESRIMilMod01 esri_26.ttf
+ESRIMil2525CModifiers esri_27Mcr_2.ttf
+ESRIPublic1 esri_29.ttf
+ESRIEnvironmental&Icons esri_2.ttf
+ESRIArcPad esri_30s.ttf
+ESRIClimate&Precipitation esri_33.ttf
+ESRIBusiness esri_34.ttf
+ESRICaves1 esri_375.ttf
+ESRICaves2 esri_376.ttf
+ESRICaves3 esri_377.ttf
+ESRIDimensioning esri_39.ttf
+ESRIGeometricSymbols esri_3.ttf
+ESRIGeologyUSGS95-525 esri_400.ttf
+ESRIElements esri_405.ttf
+ESRICommodities esri_406.ttf
+ESRINorth esri_40.ttf
+ESRIShields esri_44.ttf
+ESRIUSMUTCD1 esri_47.ttf
+ESRIUSMUTCD2 esri_48.ttf
+ESRIUSMUTCD3 esri_49.ttf
+ESRIOilGasWater esri_4.ttf
+ESRIGeologyAGSO1 esri_500.ttf
+ESRIWeather esri_5.ttf
+ESRIUSForestry1 esri_651.ttf
+ESRIUSForestry2 esri_652.ttf
+ESRIConservation esri_730.ttf
+ESRIGeology esri_7.ttf
+ESRIEnviroHazardIncident esri_800.ttf
+ESRIEnviroHazardAnalysis esri_801.ttf
+ESRIEnviroHazardSites esri_802.ttf
+ESRIHazardousMaterials esri_803.ttf
+ESRIFireIncidentNFPA esri_804.ttf
+ESRIERSInfrastructuresS1 esri_832.ttf
+ESRIERSOperationsS1 esri_837.ttf
+ESRICrimeAnalysis esri_8.ttf
+ESRITransportationCivic esri_9.ttf
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)