Mercurial > dive4elements > river
changeset 4297:6d44914b2dd4
Added serverside service for sediment load info.
The service presents an overview for sediment loads.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Mon, 29 Oct 2012 13:09:16 +0100 |
parents | 3051bc28ac43 |
children | 1f98a3a89e13 |
files | flys-artifacts/doc/conf/artifacts/minfo.xml flys-artifacts/doc/conf/conf.xml flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java |
diffstat | 3 files changed, 97 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/flys-artifacts/doc/conf/artifacts/minfo.xml Mon Oct 29 12:14:50 2012 +0100 +++ b/flys-artifacts/doc/conf/artifacts/minfo.xml Mon Oct 29 13:09:16 2012 +0100 @@ -364,7 +364,7 @@ </state> <state id="state.minfo.sediment.load.off_epochs" description="state.minfo.bed.off_epochs" state="de.intevation.flys.artifacts.states.minfo.SedimentLoadOffEpochSelect"> - <data name="off_epochs" type="String"/> + <data name="epochs" type="String"/> </state> <transition transition="de.intevation.flys.artifacts.transitions.DefaultTransition">
--- a/flys-artifacts/doc/conf/conf.xml Mon Oct 29 12:14:50 2012 +0100 +++ b/flys-artifacts/doc/conf/conf.xml Mon Oct 29 13:09:16 2012 +0100 @@ -210,6 +210,10 @@ name="measurementstationinfo" service="de.intevation.flys.artifacts.services.MeasurementStationInfoService" description="Returns an overview of the measurement stations of a given river.">de.intevation.artifactdatabase.DefaultServiceFactory</service-factory> + <service-factory + name="sedimentloadinfo" + service="de.intevation.flys.artifacts.services.SedimentLoadInfoService" + description="Returns sedimentloads.">de.intevation.artifactdatabase.DefaultServiceFactory</service-factory> </service-factories> </factories>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java Mon Oct 29 13:09:16 2012 +0100 @@ -0,0 +1,92 @@ +package de.intevation.flys.artifacts.services; + +import java.util.Calendar; + +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.artifacts.model.minfo.SedimentLoad; +import de.intevation.flys.artifacts.model.minfo.SedimentLoadFactory; + + +public class SedimentLoadInfoService +extends FLYSService +{ + /** The logger used in this service. */ + private static Logger logger = Logger.getLogger(SedimentLoadInfoService.class); + + public static final String RIVER_XPATH = "/art:river/text()"; + public static final String TYPE_XPATH = "/art:river/art:type/text()"; + public static final String FROM_XPATH = "/art:river/art:location/art:from/text()"; + public static final String TO_XPATH = "/art:river/art:location/art:to/text()"; + + @Override + protected Document doProcess( + Document data, + GlobalContext globalContext, + CallMeta callMeta) { + String river = XMLUtils.xpathString( + data, + RIVER_XPATH, + ArtifactNamespaceContext.INSTANCE); + String type = XMLUtils.xpathString( + data, + TYPE_XPATH, + ArtifactNamespaceContext.INSTANCE); + String from = XMLUtils.xpathString( + data, + FROM_XPATH, + ArtifactNamespaceContext.INSTANCE); + String to = XMLUtils.xpathString( + data, + TO_XPATH, + ArtifactNamespaceContext.INSTANCE); + double f, t; + try { + f = Double.parseDouble(from); + t = Double.parseDouble(to); + } + catch (NumberFormatException nfe) { + logger.warn("Invalid locations. Cannot return sediment loads."); + return XMLUtils.newDocument(); + } + + SedimentLoad[] loads = SedimentLoadFactory.getLoads(river, type, f, t); + return buildDocument(loads); + } + + protected Document buildDocument(SedimentLoad[] loads) { + Document result = XMLUtils.newDocument(); + Element all = result.createElement("sedimentloads"); + for (SedimentLoad sl : loads) { + Element load = result.createElement("sedimentload"); + load.setAttribute("description", sl.getDescription()); + if (sl.isEpoch()) { + Calendar calendarS = Calendar.getInstance(); + calendarS.setTime(sl.getStart()); + Calendar calendarE = Calendar.getInstance(); + calendarE.setTime(sl.getEnd()); + load.setAttribute( + "date", + calendarS.get(Calendar.YEAR) + + " - " + + calendarE.get(Calendar.YEAR)); + } + else { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(sl.getStart()); + load.setAttribute( + "date", + String.valueOf(calendar.get(Calendar.YEAR))); + } + all.appendChild(load); + } + result.appendChild(all); + return result; + } +}