Mercurial > mxd2map
diff src/java/de/intevation/mxd/reader/GroupLayerReader.java @ 165:87afe66f7d88
Merged with raimunds changes
author | Stephan Holl <stephan.holl@intevation.de> |
---|---|
date | Thu, 30 Jun 2011 14:59:44 +0200 |
parents | 2bf35f0babd0 |
children | f4eb506499f5 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java/de/intevation/mxd/reader/GroupLayerReader.java Thu Jun 30 14:59:44 2011 +0200 @@ -0,0 +1,157 @@ +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.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 com.esri.arcgis.carto.GroupLayer; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.mxd.ArcGISInitializer; +import de.intevation.mxd.utils.MapToXMLUtils; + + +/** + * Reads Layer information. + * + * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> + */ +public class GroupLayerReader +implements ILayerReader { + + /** + * The logger. + */ + private static final Logger logger = + Logger.getLogger(FeatureLayerReader.class); + + /** + * Privte member. + */ + private GroupLayer layer; + private MapToXMLUtils util; + private int invalidLayerCount; + + public GroupLayerReader(ILayer layer) + throws Exception { + if(layer instanceof GroupLayer) { + this.layer = (GroupLayer)layer; + invalidLayerCount = 0; + } + else { + throw new Exception("Not an instance of GroupLayer: " + + 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 = null; + for(int i = 0; i < layer.getCount();i++) { + ILayer lay = layer.getLayer(i); + try { + if (lay instanceof FeatureLayer) { + FeatureLayerReader lr = new FeatureLayerReader(lay); + lr.setUtil(util); + layerElement = lr.read(); + if (layerElement == null) { + continue; + } + layerElement.setAttribute("group", layer.getName()); + IFeatureRenderer renderer = + ((FeatureLayer)lay).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(lay instanceof GdbRasterCatalogLayer) { + GdbRasterCatalogLayerReader gclr = + new GdbRasterCatalogLayerReader(lay); + gclr.setUtil(util); + layerElement = gclr.read(); + layerElement.setAttribute("group", layer.getName()); + IFeatureRenderer renderer = + ((GdbRasterCatalogLayer)lay).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) == layer.getCount() || + invalidLayerCount == layer.getCount()) { + throw new IOException( + "No valid layer in MXD file." + + " Aborting."); + } + } + } + return layerElement; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :