rrenkert@243: /* rrenkert@243: * Copyright (c) 2011 by Intevation GmbH, Germany rrenkert@243: * rrenkert@243: * This file is part of MXD2map. rrenkert@243: * rrenkert@243: * This program is free software under the LGPL (>=v2.1) rrenkert@243: * Read the file LICENCE.txt coming with the software for details rrenkert@243: * or visit http://www.gnu.org/licenses/ if it does not exist. rrenkert@243: * rrenkert@243: * MXD2map has been developed on behalf of the rrenkert@243: * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg rrenkert@243: * by Intevation GmbH. rrenkert@243: * rrenkert@243: * Authors: rrenkert@243: * Raimund Renkert rrenkert@243: * Bjoern Schilberg rrenkert@243: * Stephan Holl rrenkert@243: */ rrenkert@243: rrenkert@36: package de.intevation.mxd.reader; rrenkert@36: rrenkert@36: import org.apache.log4j.Logger; rrenkert@36: rrenkert@36: import com.esri.arcgis.carto.ILayer; rrenkert@36: import com.esri.arcgis.carto.GdbRasterCatalogLayer; raimund@252: import com.esri.arcgis.system.IPropertySet; raimund@252: import com.esri.arcgis.geodatabase.IWorkspace; rrenkert@36: rrenkert@36: import org.w3c.dom.Element; rrenkert@117: import java.io.IOException; rrenkert@36: import de.intevation.mxd.utils.MapToXMLUtils; rrenkert@36: rrenkert@36: /** rrenkert@43: * Reads Layer information. rrenkert@36: * rrenkert@36: * @author Raimund Renkert rrenkert@36: */ rrenkert@43: public class GdbRasterCatalogLayerReader rrenkert@43: implements ILayerReader { rrenkert@36: rrenkert@36: /** rrenkert@36: * The logger. rrenkert@36: */ rrenkert@36: private static final Logger logger = rrenkert@36: Logger.getLogger(GdbRasterCatalogLayerReader.class); rrenkert@36: rrenkert@36: /** rrenkert@36: * Privte member. rrenkert@36: */ rrenkert@36: private GdbRasterCatalogLayer layer; rrenkert@36: private MapToXMLUtils util; rrenkert@36: rrenkert@181: /** rrenkert@181: * Constructor with layer. rrenkert@181: * rrenkert@181: * @param layer The ArcGIS layer object. rrenkert@181: */ rrenkert@36: public GdbRasterCatalogLayerReader(ILayer layer) rrenkert@36: throws Exception { rrenkert@43: if(layer instanceof GdbRasterCatalogLayer) { rrenkert@36: this.layer = (GdbRasterCatalogLayer)layer; rrenkert@43: } rrenkert@43: else { rrenkert@36: throw new Exception("Not an instance of GdbRastaCatalogLayer: " + rrenkert@36: layer.getClass().toString()); rrenkert@43: } rrenkert@36: } rrenkert@36: rrenkert@36: /** rrenkert@36: * Setter for XML document helper. rrenkert@36: * rrenkert@36: * @param util The helper for storing map information. rrenkert@36: */ rrenkert@43: public void setUtil(MapToXMLUtils util) { rrenkert@36: this.util = util; rrenkert@36: } rrenkert@36: rrenkert@36: /** rrenkert@36: * Reads the Layer content. rrenkert@36: * rrenkert@36: * @return The layer XML element. rrenkert@36: */ rrenkert@118: public Element read() rrenkert@118: throws IOException { rrenkert@36: logger.debug("read()"); rrenkert@36: rrenkert@117: Element layerElement; rrenkert@117: try { rrenkert@117: layerElement = util.addLayer(); rrenkert@117: } rrenkert@117: catch(Exception e) { rrenkert@117: logger.error( rrenkert@117: "Could not create DOM element for layer." + rrenkert@117: "Stopped reading layer."); rrenkert@118: throw new IOException( rrenkert@135: this.getClass().toString() + rrenkert@118: "Error creating dom element"); rrenkert@117: } rrenkert@117: rrenkert@117: try { rrenkert@117: layerElement.setAttribute("name", layer.getName()); rrenkert@117: } rrenkert@117: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read layer name. Stopped reading layer."); rrenkert@135: throw new IOException("Error reading layer name."); rrenkert@117: } rrenkert@117: rrenkert@117: try { rrenkert@117: layerElement.setAttribute("min_scale", rrenkert@117: String.valueOf(layer.getMinimumScale())); rrenkert@117: } rrenkert@117: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read minimum layer scale."); rrenkert@117: } rrenkert@117: rrenkert@117: try { rrenkert@117: layerElement.setAttribute("max_scale", rrenkert@117: String.valueOf(layer.getMaximumScale())); rrenkert@117: } rrenkert@117: catch(IOException ioe) { rrenkert@135: logger.warn("Could not read maximum layer scale."); rrenkert@117: } rrenkert@117: rrenkert@117: try { rrenkert@117: if(layer.isVisible()) { rrenkert@117: layerElement.setAttribute("status", "on"); rrenkert@117: } rrenkert@117: else { rrenkert@117: layerElement.setAttribute("status", "off"); rrenkert@117: } rrenkert@117: } rrenkert@117: catch(IOException ioe) { rrenkert@117: logger.warn( rrenkert@117: "Could not read layer status." + rrenkert@117: " Setting layer status to \"on\""); rrenkert@36: layerElement.setAttribute("status", "on"); rrenkert@36: } rrenkert@117: rrenkert@117: try { rrenkert@117: layerElement.setAttribute("definition_query", rrenkert@117: layer.getDefinitionExpression()); rrenkert@36: } rrenkert@117: catch(IOException ioe) { rrenkert@117: logger.warn( rrenkert@135: "Could not read layer definition query."); rrenkert@117: } raimund@252: raimund@252: try { raimund@252: layerElement.setAttribute("type", "raster"); raimund@252: IWorkspace rw = layer.getWorkspace(); raimund@252: layerElement.setAttribute( raimund@252: "dataset", raimund@252: rw.getDatasetNames(16).next().getName()); raimund@252: IPropertySet set = rw.getConnectionProperties(); raimund@252: Object names[] = new Object[set.getCount()]; raimund@252: Object prop[] = new Object[set.getCount()]; raimund@252: set.getAllProperties(names, prop); raimund@252: layerElement.setAttribute("connection_type", "SDE"); raimund@252: for(int i = 0; i < names.length; i++) { raimund@252: if(names[i] != null) { raimund@252: String[] prop_names = (String[])names[i]; raimund@252: for(int j = 0; j < prop_names.length; j++) { raimund@252: layerElement.setAttribute( raimund@252: prop_names[j].toLowerCase(), raimund@252: set.getProperty(prop_names[j]).toString()); raimund@252: } raimund@252: } raimund@252: } raimund@252: } raimund@252: catch(Exception e) { raimund@252: e.printStackTrace(); raimund@252: logger.error( raimund@252: "Could not read layer datasource." + raimund@252: " Stopped reading layer " + layer.getName() + "."); raimund@252: util.removeLayer(layerElement); raimund@252: return null; raimund@252: } raimund@252: rrenkert@36: return layerElement; rrenkert@36: } rrenkert@36: } rrenkert@36: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :