[Dive4elements-commits] [PATCH 2 of 5] Added serverside service for sediment load info
Wald Commits
scm-commit at wald.intevation.org
Mon Oct 29 13:18:52 CET 2012
# HG changeset patch
# User Raimund Renkert <rrenkert at intevation.de>
# Date 1351512556 -3600
# Node ID 6d44914b2dd4ee80138d30fec0f48b9e29400333
# Parent 3051bc28ac43dbd6a653d68ec9ecb754a58758f7
Added serverside service for sediment load info.
The service presents an overview for sediment loads.
diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/doc/conf/artifacts/minfo.xml
--- 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">
diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/doc/conf/conf.xml
--- 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>
diff -r 3051bc28ac43 -r 6d44914b2dd4 flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/SedimentLoadInfoService.java
--- /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;
+ }
+}
More information about the Dive4elements-commits
mailing list