# HG changeset patch # User Ingo Weinzierl # Date 1314086021 0 # Node ID c37084f31c84bab60b197f8e4f1f6fd9dc3a0567 # Parent d4a5d3941cc095f6b7b50563ced868c4ba146572 Implemented a MapInfo service that returns some basic information to create maps for specific rivers. flys-artifacts/trunk@2528 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r d4a5d3941cc0 -r c37084f31c84 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Mon Aug 22 16:37:12 2011 +0000 +++ b/flys-artifacts/ChangeLog Tue Aug 23 07:53:41 2011 +0000 @@ -1,3 +1,18 @@ +2011-08-23 Ingo Weinzierl + + * doc/conf/conf.xml: Added the MapInfoService and adapted the floodmap + configuration. Now, each river can have its own background wms layer + defined. + + * src/main/java/de/intevation/flys/artifacts/services/MapInfoService.java: + New. This service returns some basic information used to create maps for + a specific river. The name of the desired river needs to be defined at + "/mapinfo/river/text()". + + * src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java: + Adapted an xpath expression that points to the srid of a river in the + floodmap configuration (which changed). + 2011-08-22 Sascha L. Teichmann * src/main/java/de/intevation/flys/artifacts/FLYSArtifact.java: diff -r d4a5d3941cc0 -r c37084f31c84 flys-artifacts/doc/conf/conf.xml --- a/flys-artifacts/doc/conf/conf.xml Mon Aug 22 16:37:12 2011 +0000 +++ b/flys-artifacts/doc/conf/conf.xml Tue Aug 23 07:53:41 2011 +0000 @@ -44,6 +44,10 @@ name="metadata" service="de.intevation.flys.artifacts.services.MetaDataService" description="The service provides some introspection into the database content.">de.intevation.artifactdatabase.DefaultServiceFactory + de.intevation.artifactdatabase.DefaultServiceFactory @@ -106,12 +110,25 @@ - + - - - - + + + + + + + + + + + + + + + diff -r d4a5d3941cc0 -r c37084f31c84 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MapInfoService.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/MapInfoService.java Tue Aug 23 07:53:41 2011 +0000 @@ -0,0 +1,129 @@ +package de.intevation.flys.artifacts.services; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.vividsolutions.jts.geom.Geometry; + +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.artifactdatabase.DefaultService; + +import de.intevation.flys.backend.SessionHolder; +import de.intevation.flys.model.River; + +import de.intevation.flys.model.RiverAxis; +import de.intevation.flys.artifacts.model.RiverFactory; +import de.intevation.flys.utils.GeometryUtils; + +import org.hibernate.Session; + +/** + * This service provides information about the supported rivers by this + * application. + * + * @author Ingo Weinzierl + */ +public class MapInfoService extends DefaultService { + + /** 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/@url"; + + + /** The logger used in this service.*/ + private static Logger logger = Logger.getLogger(MapInfoService.class); + + + /** + * The default constructor. + */ + public MapInfoService() { + } + + + public Document process( + 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); + + RiverAxis axis = RiverAxis.getRiverAxis(river); + if (axis != null) { + Geometry geom = axis.getGeom().getBoundary(); + String bounds = GeometryUtils.jtsBoundsToOLBounds(geom); + + logger.debug("River '" + river + "' bounds: " + bounds); + Element bbox = cr.create("bbox"); + cr.addAttr(bbox, "value", bounds); + root.appendChild(bbox); + } + + String xpathS = XPATH_RIVER_PROJECTION.replace("%RIVER%", river); + String sridStr = Config.getStringXPath(xpathS); + if (sridStr != null && sridStr.length() > 0) { + Element srid = cr.create("srid"); + cr.addAttr(srid, "value", sridStr); + root.appendChild(srid); + } + + String xpathB = XPATH_RIVER_BACKGROUND.replace("%RIVER%", river); + Element back = (Element) Config.getNodeXPath(xpathB); + if (back != null) { + Element background = cr.create("background-wms"); + cr.addAttr(background, "url", back.getAttribute("url")); + cr.addAttr(background, "layers", back.getAttribute("layers")); + root.appendChild(background); + } + + String xpathWMS = XPATH_RIVER_WMS.replace("%RIVER%", river); + String wmsStr = Config.getStringXPath(xpathWMS); + if (wmsStr != null && wmsStr.length() > 0) { + Element wms = cr.create("river-wms"); + cr.addAttr(wms, "url", wmsStr); + root.appendChild(wms); + } + + return result; + } + + + 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 : diff -r d4a5d3941cc0 -r c37084f31c84 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java Mon Aug 22 16:37:12 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RiverAxisState.java Tue Aug 23 07:53:41 2011 +0000 @@ -31,7 +31,7 @@ public static final String WMS_LAYER_NAME = "riveraxis"; public static final String XPATH_RIVER_PROJECTION = - "/artifact-database/floodmap/river-wms[@river='%RIVER%']/@srid"; + "/artifact-database/floodmap/river[@name='%RIVER%']/srid/@value"; private static final Logger logger = Logger.getLogger(RiverAxisState.class);