Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/MapGenerator.java @ 4488:5041105d2edd
Check if response code from GGInA is 200 OK
Only parse the GGInA response if the status code is 200 OK. This improves the
error message if GGInA is not available and shows the real reason instead of a
JDOM error while parsing the response.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Wed, 14 Nov 2012 10:36:21 +0100 |
parents | 2fdbe78a8fc2 |
children | 32a4651eef93 |
line wrap: on
line source
package de.intevation.flys.exports; import com.vividsolutions.jts.geom.Envelope; import de.intevation.artifactdatabase.state.ArtifactAndFacet; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Settings; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.common.ArtifactNamespaceContext; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.map.WMSDBLayerFacet; import de.intevation.flys.artifacts.model.map.WMSLayerFacet; import de.intevation.flys.artifacts.model.map.WSPLGENLayerFacet; import de.intevation.flys.collections.FLYSArtifactCollection; import de.intevation.flys.utils.GeometryUtils; import de.intevation.flys.utils.MapfileGenerator; import de.intevation.flys.utils.ThemeUtil; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; public class MapGenerator implements OutGenerator, FacetTypes { private static Logger logger = Logger.getLogger(MapGenerator.class); protected FLYSArtifactCollection collection; protected Artifact master; protected Settings settings; protected Document request; protected OutputStream out; protected CallContext context; protected List<WMSLayerFacet> layers; protected Envelope maxExtent; protected Envelope initialExtent; protected String srid; @Override public void init(Document request, OutputStream out, CallContext context) { logger.debug("MapGenerator.init"); this.request = request; this.out = out; this.context = context; this.layers = new ArrayList<WMSLayerFacet>(); this.maxExtent = null; this.initialExtent = null; } @Override public void setMasterArtifact(Artifact master) { logger.debug("MapGenerator.setMasterArtifact"); this.master = master; } @Override public void setCollection(FLYSArtifactCollection collection) { this.collection = collection; } @Override public void doOut( ArtifactAndFacet artifactFacet, Document attr, boolean visible) { String name = artifactFacet.getFacetName(); logger.debug("MapGenerator.doOut: " + artifactFacet.getArtifact().identifier() + " | " + name); FLYSArtifact flys = (FLYSArtifact) artifactFacet.getArtifact(); Facet nativeFacet = artifactFacet.getFacet(); if (nativeFacet instanceof WMSLayerFacet) { WMSLayerFacet wms = (WMSLayerFacet) nativeFacet; Envelope extent = wms.getOriginalExtent(); layers.add(wms); setMaxExtent(extent); setSrid(wms.getSrid()); if (FLOODMAP_WSPLGEN.equals(name)) { setInitialExtent(extent); createWSPLGENLayer(flys, wms, attr); } else if (FLOODMAP_BARRIERS.equals(name)) { createBarriersLayer(flys, wms); } else if (FLOODMAP_USERSHAPE.equals(name)) { createUserShapeLayer(flys, wms); } else { createDatabaseLayer(flys, wms, attr); } } else { logger.warn("Facet not supported: " + nativeFacet.getClass()); } } protected void createWSPLGENLayer( FLYSArtifact flys, WMSLayerFacet wms, Document attr ) { try { if(wms instanceof WSPLGENLayerFacet) { MapfileGenerator mfg = MapfileGenerator.getInstance(); mfg.createUeskLayer( flys, (WSPLGENLayerFacet) wms, ThemeUtil.createWSPLGENStyle(attr), context); } else { logger.warn("Cannot create WSPLGEN layer from: " + wms.getClass()); } } catch (IOException ioe) { logger.error(ioe, ioe); } } protected void createBarriersLayer(FLYSArtifact flys, WMSLayerFacet wms) { MapfileGenerator mfg = MapfileGenerator.getInstance(); try { mfg.createBarriersLayer(flys, wms); } catch (FileNotFoundException fnfe) { logger.error(fnfe, fnfe); } catch (IOException ioe) { logger.error(ioe, ioe); } } protected void createUserShapeLayer(FLYSArtifact flys, WMSLayerFacet wms) { MapfileGenerator mfg = MapfileGenerator.getInstance(); try { mfg.createUserShapeLayer(flys, wms); } catch (FileNotFoundException fnfe) { logger.error(fnfe, fnfe); } catch (IOException ioe) { logger.error(ioe, ioe); } } protected void createDatabaseLayer( FLYSArtifact flys, WMSLayerFacet wms, Document attr ) { logger.debug("createDatabaseLayer for facet: " + wms.getName()); MapfileGenerator mfg = MapfileGenerator.getInstance(); try { File baseDir = mfg.getShapefileBaseDir(); File artDir = new File(baseDir, flys.identifier()); if (artDir != null && !artDir.exists()) { logger.debug("Create new directory: " + artDir.getPath()); artDir.mkdir(); } if (wms instanceof WMSDBLayerFacet) { mfg.createDatabaseLayer( flys, (WMSDBLayerFacet) wms, ThemeUtil.createMapserverStyle(attr)); } else { logger.warn("Cannot create DB layer from: " + wms.getClass()); } } catch (FileNotFoundException fnfe) { logger.error(fnfe, fnfe); } catch (IOException ioe) { logger.error(ioe, ioe); } } @Override public void generate() throws IOException { logger.debug("MapGenerator.generate"); MapfileGenerator.getInstance().update(); Document response = XMLUtils.newDocument(); ElementCreator c = new ElementCreator( response, ArtifactNamespaceContext.NAMESPACE_URI, ArtifactNamespaceContext.NAMESPACE_PREFIX); Element root = c.create("floodmap"); Element layers = c.create("layers"); response.appendChild(root); root.appendChild(layers); appendLayers(layers); appendMapInformation(root, c); XMLUtils.toStream(response, out); } protected void appendLayers(Element parent) { for (WMSLayerFacet facet: layers) { parent.appendChild(facet.toXML(parent.getOwnerDocument())); } } protected void setMaxExtent(Envelope maxExtent) { if (maxExtent == null) { return; } if (this.maxExtent == null) { logger.debug("Set max extent to: " + maxExtent); this.maxExtent = new Envelope(maxExtent); return; } this.maxExtent.expandToInclude(maxExtent); } protected void setInitialExtent(Envelope initialExtent) { if (this.initialExtent == null && initialExtent != null) { logger.debug("Set initial extent to: " + initialExtent); this.initialExtent = new Envelope(initialExtent); } } protected void setSrid(String srid) { if (srid == null || srid.length() == 0) { return; } this.srid = srid; } protected void appendMapInformation(Element parent, ElementCreator c) { String mE = GeometryUtils.jtsBoundsToOLBounds(this.maxExtent); Element maxExtent = c.create("maxExtent"); maxExtent.setTextContent(mE); if(this.initialExtent != null) { String iE = GeometryUtils.jtsBoundsToOLBounds(this.initialExtent); Element initExtent = c.create("initialExtent"); initExtent.setTextContent(iE); parent.appendChild(initExtent); } Element srid = c.create("srid"); srid.setTextContent(this.srid); // TODO zoom levels // TODO resolutation parent.appendChild(maxExtent); parent.appendChild(srid); } /** * Returns an instance of <i>EmptySettings</i> currently! * * @return an instance of <i>EmptySettings</i>. */ @Override public Settings getSettings() { return new EmptySettings(); } @Override public void setSettings(Settings settings) { this.settings = settings; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :