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;
+    }
+}

http://dive4elements.wald.intevation.org