Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MapInfoService.java @ 4805:722b4962e30e
Comment/doc.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 16 Jan 2013 11:38:06 +0100 |
parents | 6aa1b8abe2d3 |
children | 5ca2516ebef1 |
line wrap: on
line source
package de.intevation.flys.artifacts.services; import com.vividsolutions.jts.geom.Envelope; import de.intevation.artifactdatabase.XMLService; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.GlobalContext; import de.intevation.artifacts.common.ArtifactNamespaceContext; import de.intevation.artifacts.common.utils.Config; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; import de.intevation.flys.utils.GeometryUtils; import java.util.HashMap; import java.util.Map; import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * This service provides information about the supported rivers by this * application. * * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class MapInfoService extends XMLService { /** XPath that points to the river.*/ public static final String XPATH_RIVER = "/mapinfo/river/text()"; public static final String XPATH_RIVER_PROJECTION = "/artifact-database/floodmap/river[@name=$river]/srid/@value"; public static final String XPATH_RIVER_BACKGROUND = "/artifact-database/floodmap/river[@name=$river]/background-wms"; public static final String XPATH_RIVER_WMS = "/artifact-database/floodmap/river[@name=$river]/river-wms"; /** The logger used in this service.*/ private static Logger logger = Logger.getLogger(MapInfoService.class); /** * The default constructor. */ public MapInfoService() { } protected static String getStringXPath( String query, Map<String, String> variables ) { return (String)XMLUtils.xpath( Config.getConfig(), query, XPathConstants.STRING, null, variables); } protected static Node getNodeXPath( String query, Map<String, String> variables ) { return (Node)XMLUtils.xpath( Config.getConfig(), query, XPathConstants.NODE, null, variables); } @Override public Document processXML( Document data, GlobalContext globalContext, CallMeta callMeta ) { logger.debug("MapInfoService.process"); Document result = XMLUtils.newDocument(); ElementCreator cr = new ElementCreator(result, null, null); Element mapinfo = cr.create("mapinfo"); result.appendChild(mapinfo); String river = extractRiver(data); if (river == null || river.length() == 0) { logger.warn("Cannot generate information: river is empty!"); return result; } Element root = cr.create("river"); cr.addAttr(root, "name", river); mapinfo.appendChild(root); Envelope env = GeometryUtils.getRiverBoundary(river); if (env != null) { String bounds = GeometryUtils.jtsBoundsToOLBounds(env); logger.debug("River '" + river + "' bounds: " + bounds); Element bbox = cr.create("bbox"); cr.addAttr(bbox, "value", bounds); root.appendChild(bbox); } Map<String, String> vars = new HashMap<String, String>(); vars.put("river", river); String sridStr = getStringXPath(XPATH_RIVER_PROJECTION, vars); if (sridStr != null && sridStr.length() > 0) { Element srid = cr.create("srid"); cr.addAttr(srid, "value", sridStr); root.appendChild(srid); } logger.debug("processXML: " + XMLUtils.toString(root)); root.appendChild( createWMSElement("background-wms", XPATH_RIVER_BACKGROUND, vars, cr)); root.appendChild( createWMSElement("river-wms", XPATH_RIVER_WMS, vars, cr)); return result; } protected Element createWMSElement( String elementName, String xpath, Map<String, String> vars, ElementCreator cr) { logger.debug("createWMSElement()"); Element el = cr.create(elementName); Element wms = (Element)getNodeXPath(xpath, vars); if (wms != null) { cr.addAttr(el, "url", wms.getAttribute("url")); cr.addAttr(el, "layers", wms.getAttribute("layers")); logger.debug("createWMSElement: " + XMLUtils.toString(el)); } else { logger.debug("createWMSElement: wms == null"); } return el; } protected String extractRiver(Document data) { return XMLUtils.xpathString( data, XPATH_RIVER, ArtifactNamespaceContext.INSTANCE); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :