diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/services/RiverInfoService.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/artifacts/services/RiverInfoService.java@5da024c2af62
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/services/RiverInfoService.java	Thu Apr 25 12:06:39 2013 +0200
@@ -0,0 +1,85 @@
+package org.dive4elements.river.artifacts.services;
+
+import java.math.BigDecimal;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.artifacts.GlobalContext;
+import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+
+import org.dive4elements.river.artifacts.model.RiverFactory;
+import org.dive4elements.river.model.River;
+
+/**
+ * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a>
+ */
+public class RiverInfoService extends FLYSService {
+
+    private static final Logger logger = Logger.getLogger(
+            RiverInfoService.class);
+
+    protected static final String RIVER_XPATH = "/art:river/text()";
+
+    protected XMLUtils.ElementCreator ec;
+    protected River river;
+    protected Element riverele;
+
+    protected Document doProcess(
+        Document      data,
+        GlobalContext globalContext,
+        CallMeta      callMeta
+    ) {
+        String rivername = XMLUtils.xpathString(
+            data, RIVER_XPATH, ArtifactNamespaceContext.INSTANCE);
+
+        river = RiverFactory.getRiver(rivername);
+
+        Document result = XMLUtils.newDocument();
+
+        if (river == null) {
+            logger.warn("No river with name " + rivername + " found.");
+            return null;
+        }
+
+        ec = new XMLUtils.ElementCreator(
+            result,
+            ArtifactNamespaceContext.NAMESPACE_URI,
+            ArtifactNamespaceContext.NAMESPACE_PREFIX);
+
+        riverele = ec.create("river-info");
+
+        double[] minmax  = river.determineMinMaxDistance();
+        double[] minmaxq = river.determineMinMaxQ();
+
+        Element r = ec.create("river");
+        ec.addAttr(r, "name", river.getName(), true);
+        ec.addAttr(r, "start", Double.toString(minmax[0]), true);
+        ec.addAttr(r, "end", Double.toString(minmax[1]), true);
+        ec.addAttr(r, "wstunit", river.getWstUnit().getName(), true);
+        ec.addAttr(r, "kmup", Boolean.toString(river.getKmUp()), true);
+        ec.addAttr(r, "minq", Double.toString(minmaxq[0]), true);
+        ec.addAttr(r, "maxq", Double.toString(minmaxq[1]), true);
+        ec.addAttr(r, "official", Long.toString(river.getOfficialNumber()),
+                    true);
+
+        riverele.appendChild(r);
+        result.appendChild(riverele);
+
+        return result;
+    }
+
+    /**
+     * Returns a Double as String from a BigDecimal value.
+     *
+     * If value is null an empty String is returned.
+     */
+    protected static String getStringValue(BigDecimal value) {
+        return value != null
+            ? Double.toString(value.doubleValue()) : "";
+    }
+}

http://dive4elements.wald.intevation.org