aheinecke@303: /* aheinecke@303: * Copyright (c) 2011 by Intevation GmbH, Germany aheinecke@303: * aheinecke@303: * This file is part of MXD2map. aheinecke@303: * aheinecke@303: * This program is free software under the LGPL (>=v2.1) aheinecke@303: * Read the file LICENCE.txt coming with the software for details aheinecke@303: * or visit http://www.gnu.org/licenses/ if it does not exist. aheinecke@303: * aheinecke@303: * MXD2map has been developed on behalf of the aheinecke@303: * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg aheinecke@303: * by Intevation GmbH. aheinecke@303: * aheinecke@303: * Authors: aheinecke@303: * Raimund Renkert aheinecke@303: * Bjoern Schilberg aheinecke@303: * Stephan Holl aheinecke@303: */ aheinecke@303: aheinecke@303: package de.intevation.mxd.reader; aheinecke@303: aheinecke@303: import org.apache.log4j.Logger; aheinecke@303: aheinecke@303: import com.esri.arcgis.carto.ILayer; aheinecke@303: import com.esri.arcgis.carto.RasterLayer; aheinecke@303: import com.esri.arcgis.carto.AnnotateLayerPropertiesCollection; aheinecke@303: import com.esri.arcgis.carto.IAnnotateLayerProperties; aheinecke@303: import com.esri.arcgis.carto.LabelEngineLayerProperties; aheinecke@303: import com.esri.arcgis.geodatabase.RasterDatasetName; aheinecke@303: import com.esri.arcgis.system.IName; aheinecke@303: import com.esri.arcgis.system.IPropertySet; aheinecke@303: import com.esri.arcgis.geometry.Envelope; aheinecke@303: aheinecke@303: import org.w3c.dom.Element; aheinecke@303: aheinecke@303: import de.intevation.mxd.utils.MapToXMLUtils; aheinecke@303: import java.io.IOException; aheinecke@303: import com.esri.arcgis.interop.AutomationException; aheinecke@303: /** aheinecke@303: * Reads Layer information. aheinecke@303: * aheinecke@303: * @author Andre Heinecke aheinecke@303: */ aheinecke@303: public class RasterLayerReader aheinecke@303: implements ILayerReader { aheinecke@303: aheinecke@303: /** aheinecke@303: * The logger. aheinecke@303: */ aheinecke@303: private static final Logger logger = aheinecke@303: Logger.getLogger(RasterLayerReader.class); aheinecke@303: aheinecke@303: /** aheinecke@303: * Privte member. aheinecke@303: */ aheinecke@303: private RasterLayer layer; aheinecke@303: private MapToXMLUtils util; aheinecke@303: aheinecke@303: /** aheinecke@303: * Constructor with layer. aheinecke@303: * aheinecke@303: * @param layer The ArcGIS layer object. aheinecke@303: */ aheinecke@303: public RasterLayerReader(ILayer layer) aheinecke@303: throws Exception { aheinecke@303: if(layer instanceof RasterLayer) { aheinecke@303: this.layer = (RasterLayer)layer; aheinecke@303: } aheinecke@303: else { aheinecke@303: throw new Exception("Not an instance of RasterLayer: " + aheinecke@303: layer.getClass().toString()); aheinecke@303: } aheinecke@303: } aheinecke@303: aheinecke@303: /** aheinecke@303: * Setter for XML document helper. aheinecke@303: * aheinecke@303: * @param util The helper for storing map information. aheinecke@303: */ aheinecke@303: public void setUtil(MapToXMLUtils util) { aheinecke@303: this.util = util; aheinecke@303: } aheinecke@303: aheinecke@303: /** aheinecke@303: * Reads the Layer content. aheinecke@303: * aheinecke@303: * @return The layer XML element. aheinecke@303: */ aheinecke@303: public Element read() aheinecke@303: throws IOException{ aheinecke@303: logger.debug("read()"); aheinecke@303: Element layerElement; aheinecke@303: try { aheinecke@303: layerElement = util.addLayer(); aheinecke@303: } aheinecke@303: catch(Exception e) { aheinecke@303: logger.error("Failed to create DOM-Element for Layer."); aheinecke@303: return null; aheinecke@303: } aheinecke@303: aheinecke@303: try { aheinecke@303: layerElement.setAttribute("name", layer.getName()); aheinecke@303: } aheinecke@303: catch(IOException ioe) { aheinecke@303: logger.warn( aheinecke@303: "Could not read layer name." + aheinecke@303: " Stopped reading layer."); aheinecke@303: throw new IOException("Error reading layer name."); aheinecke@303: } aheinecke@303: aheinecke@303: try { aheinecke@303: layerElement.setAttribute("min_scale", aheinecke@303: String.valueOf(layer.getMinimumScale())); aheinecke@303: } aheinecke@303: catch(IOException ioe) { aheinecke@303: logger.warn("Could not read minimum scale."); aheinecke@303: } aheinecke@303: aheinecke@303: try { aheinecke@303: layerElement.setAttribute("max_scale", aheinecke@303: String.valueOf(layer.getMaximumScale())); aheinecke@303: } aheinecke@303: catch(IOException ioe) { aheinecke@303: logger.warn( aheinecke@303: "Could not read maximum scale."); aheinecke@303: } aheinecke@303: aheinecke@303: try { aheinecke@303: if(layer.isVisible()) { aheinecke@303: layerElement.setAttribute("status", "on"); aheinecke@303: } aheinecke@303: else { aheinecke@303: layerElement.setAttribute("status", "off"); aheinecke@303: } aheinecke@303: } aheinecke@303: catch(IOException ioe) { aheinecke@303: logger.warn( aheinecke@303: "Could not read layer status." + aheinecke@303: " Setting layer status to \"on\"."); aheinecke@303: layerElement.setAttribute("status", "on"); aheinecke@303: } aheinecke@303: try { aheinecke@303: layerElement.setAttribute("data_source", layer.getFilePath()); aheinecke@303: } aheinecke@303: catch(IOException ioe) { aheinecke@303: logger.warn( aheinecke@303: "Could not read datasource." + aheinecke@303: " Stopped reading layer " + layer.getName() + "."); aheinecke@303: util.removeLayer(layerElement); aheinecke@303: return null; aheinecke@303: } aheinecke@303: aheinecke@303: // Static Attributes for Raster: aheinecke@303: layerElement.setAttribute("type", "raster"); aheinecke@303: layerElement.setAttribute("connection_type", "local"); aheinecke@303: aheinecke@303: return layerElement; aheinecke@303: } aheinecke@303: } aheinecke@303: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :