rrenkert@33: package de.intevation.mxd.reader; rrenkert@25: rrenkert@25: import java.io.IOException; rrenkert@25: rrenkert@25: import org.apache.log4j.Logger; rrenkert@25: rrenkert@25: import com.esri.arcgis.carto.ILayer; rrenkert@25: import com.esri.arcgis.carto.IMap; rrenkert@25: import com.esri.arcgis.carto.MapDocument; rrenkert@25: import com.esri.arcgis.carto.FeatureLayer; rrenkert@36: import com.esri.arcgis.carto.GdbRasterCatalogLayer; rrenkert@25: import com.esri.arcgis.carto.IFeatureRenderer; rrenkert@25: import com.esri.arcgis.carto.SimpleRenderer; rrenkert@25: import com.esri.arcgis.carto.ClassBreaksRenderer; rrenkert@25: import com.esri.arcgis.carto.UniqueValueRenderer; rrenkert@25: rrenkert@27: import org.w3c.dom.Document; rrenkert@27: import org.w3c.dom.Element; rrenkert@27: rrenkert@33: import de.intevation.mxd.ArcGISInitializer; rrenkert@33: import de.intevation.mxd.utils.MapToXMLUtils; rrenkert@33: rrenkert@25: /** rrenkert@25: * The MXD file reader. rrenkert@25: * rrenkert@25: * @author Raimund Renkert rrenkert@25: */ rrenkert@43: public class MXDReader rrenkert@43: implements IReader { rrenkert@43: /** rrenkert@43: * The Logger. rrenkert@43: */ rrenkert@43: private static final Logger logger = Logger.getLogger(MXDReader.class); rrenkert@25: rrenkert@43: /** rrenkert@43: * Private member. rrenkert@43: */ rrenkert@25: private String filename = ""; rrenkert@25: private ArcGISInitializer initializer = null; rrenkert@40: private MapToXMLUtils util; rrenkert@25: private IMap map; rrenkert@25: rrenkert@25: rrenkert@43: public MXDReader() rrenkert@43: throws IOException { rrenkert@25: logger.debug("constructor()"); rrenkert@25: initializer = new ArcGISInitializer(); rrenkert@40: util = new MapToXMLUtils(); rrenkert@25: } rrenkert@25: rrenkert@25: rrenkert@25: /** rrenkert@25: * Initialize the ArcGIS Objects. rrenkert@25: */ rrenkert@43: public boolean init() rrenkert@43: throws IOException { rrenkert@25: logger.debug("init()"); rrenkert@25: initializer.initArcGIS(); rrenkert@25: initializer.initArcGISLicenses(); rrenkert@25: return true; rrenkert@25: } rrenkert@25: rrenkert@25: /** rrenkert@25: * Shutdown the ArcGIS Objects. rrenkert@25: */ rrenkert@43: public boolean shutdown() rrenkert@43: throws IOException { rrenkert@25: logger.debug("shutdown()"); rrenkert@43: if(initializer == null) { rrenkert@25: throw new IOException("Faild to shutdown!"); rrenkert@25: } rrenkert@43: else { rrenkert@25: initializer.shutdownArcGIS(); rrenkert@25: return true; rrenkert@25: } rrenkert@25: } rrenkert@25: rrenkert@25: /** rrenkert@25: * Set the path and filename to the MXD-File. rrenkert@25: */ rrenkert@43: public void setFilename(String name) { rrenkert@25: logger.debug("setFilename()"); rrenkert@25: filename = name; rrenkert@25: } rrenkert@25: rrenkert@27: rrenkert@43: private void openMapDocument() rrenkert@43: throws IOException { rrenkert@27: MapDocument m = new MapDocument(); rrenkert@43: if(!m.isMapDocument(filename)) { rrenkert@27: throw new IOException(filename + " is not a map!"); rrenkert@27: } rrenkert@27: m.open(filename, null); rrenkert@27: map = m.getMap(0); rrenkert@27: } rrenkert@43: rrenkert@25: /** rrenkert@25: * Read the MXD file content. rrenkert@25: */ rrenkert@43: public boolean read() rrenkert@43: throws IOException { rrenkert@25: logger.debug("read()"); rrenkert@43: if(filename == "") { rrenkert@25: throw new IOException("Please set filename!"); rrenkert@25: } rrenkert@43: else { rrenkert@40: util.addFilename(filename); rrenkert@27: openMapDocument(); rrenkert@40: MapReader mreader; rrenkert@40: try { rrenkert@40: mreader = new MapReader (map); rrenkert@40: mreader.setUtil(util); rrenkert@40: mreader.read(); rrenkert@40: rrenkert@40: } rrenkert@40: catch(Exception e) { rrenkert@40: e.printStackTrace(); rrenkert@40: } rrenkert@27: rrenkert@43: for(int i = 0; i < map.getLayerCount();i++) { rrenkert@27: ILayer layer = map.getLayer(i); rrenkert@43: try { rrenkert@43: if (layer instanceof FeatureLayer) { rrenkert@36: FeatureLayerReader lr = new FeatureLayerReader(layer); rrenkert@36: lr.setUtil(util); rrenkert@36: Element layerElement = lr.read(); rrenkert@43: IFeatureRenderer renderer = rrenkert@43: ((FeatureLayer)layer).getRenderer(); rrenkert@27: IRendererReader rreader; rrenkert@43: if(renderer instanceof SimpleRenderer) { rrenkert@25: rreader = new SimpleRendererReader(renderer); rrenkert@31: rreader.setParent(layerElement); rrenkert@31: rreader.setUtil(util); rrenkert@25: rreader.read(); rrenkert@25: } rrenkert@43: else if(renderer instanceof ClassBreaksRenderer) { rrenkert@25: rreader = new ClassBreakRendererReader(renderer); rrenkert@31: rreader.setParent(layerElement); rrenkert@31: rreader.setUtil(util); rrenkert@25: rreader.read(); rrenkert@25: } rrenkert@43: else if(renderer instanceof UniqueValueRenderer) { rrenkert@25: rreader = new UniqueValueRendererReader(renderer); rrenkert@31: rreader.setParent(layerElement); rrenkert@31: rreader.setUtil(util); rrenkert@25: rreader.read(); rrenkert@25: } rrenkert@25: else{ rrenkert@69: logger.debug("Not a known renderer type " + rrenkert@69: renderer.getClass().toString()); rrenkert@25: } rrenkert@25: } rrenkert@36: else if(layer instanceof GdbRasterCatalogLayer) { rrenkert@36: GdbRasterCatalogLayerReader gclr = rrenkert@36: new GdbRasterCatalogLayerReader(layer); rrenkert@36: gclr.setUtil(util); rrenkert@36: Element layerElement = gclr.read(); rrenkert@43: IFeatureRenderer renderer = rrenkert@43: ((GdbRasterCatalogLayer)layer).getRenderer(); rrenkert@36: IRendererReader rreader; rrenkert@43: if(renderer instanceof SimpleRenderer) { rrenkert@36: rreader = new SimpleRendererReader(renderer); rrenkert@36: rreader.setParent(layerElement); rrenkert@36: rreader.setUtil(util); rrenkert@36: rreader.read(); rrenkert@36: } rrenkert@43: else if(renderer instanceof ClassBreaksRenderer) { rrenkert@36: rreader = new ClassBreakRendererReader(renderer); rrenkert@36: rreader.setParent(layerElement); rrenkert@36: rreader.setUtil(util); rrenkert@36: rreader.read(); rrenkert@36: } rrenkert@43: else if(renderer instanceof UniqueValueRenderer) { rrenkert@36: rreader = new UniqueValueRendererReader(renderer); rrenkert@36: rreader.setParent(layerElement); rrenkert@36: rreader.setUtil(util); rrenkert@36: rreader.read(); rrenkert@36: } rrenkert@43: else { rrenkert@69: logger.debug("Not a known renderer type " + rrenkert@69: renderer.getClass().toString()); rrenkert@36: } rrenkert@36: } rrenkert@27: } rrenkert@43: catch(Exception e) { rrenkert@27: e.printStackTrace(); rrenkert@25: } rrenkert@25: } rrenkert@31: util.print(); rrenkert@25: } rrenkert@25: return true; rrenkert@25: } rrenkert@25: rrenkert@43: /** rrenkert@43: * Get the root DOM document. rrenkert@43: */ rrenkert@43: public Document getMapDocument() { rrenkert@27: logger.debug("getMapDocument()"); rrenkert@40: return util.getDocument(); rrenkert@25: } rrenkert@25: } rrenkert@25: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :