diff artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityDistanceSelect.java @ 8613:39ce099a6551

(issue1755) Add good defaults for bedquality distance selection
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 24 Mar 2015 18:17:23 +0100
parents
children 5102733c4567
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityDistanceSelect.java	Tue Mar 24 18:17:23 2015 +0100
@@ -0,0 +1,80 @@
+/* Copyright (C) 2011, 2012, 2013, 2015 by Bundesanstalt für Gewässerkunde
+ * Software engineering by Intevation GmbH
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+
+package org.dive4elements.river.artifacts.states.minfo;
+
+import java.util.Date;
+import java.util.List;
+
+import org.w3c.dom.Element;
+
+import org.apache.log4j.Logger;
+
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.states.DistanceSelect;
+import org.dive4elements.river.utils.KMIndex;
+
+import org.dive4elements.river.artifacts.model.minfo.BedOverview;
+import org.dive4elements.river.artifacts.model.minfo.BedOverviewFactory;
+
+import org.dive4elements.artifacts.common.utils.XMLUtils;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+
+import org.dive4elements.artifactdatabase.data.StateData;
+
+/** Extended Distance Select with default values appropiate for BedQuality */
+public class BedQualityDistanceSelect extends DistanceSelect {
+
+    private static Logger log = Logger.getLogger(BedQualityDistanceSelect.class);
+
+    /**
+     * The default constructor that initializes an empty State object.
+     */
+    public BedQualityDistanceSelect() {
+    }
+
+    @Override
+    protected Element createData(
+        XMLUtils.ElementCreator cr,
+        Artifact    artifact,
+        StateData   data,
+        CallContext context)
+    {
+        Element ele = super.createData(cr, artifact, data, context);
+        if (!data.getName().equals("ld_from") && !data.getName().equals("ld_to")) {
+            return ele;
+        }
+
+        D4EArtifact arti = (D4EArtifact) artifact;
+        RiverAccess access = new RiverAccess(arti);
+
+        /* Bit of an overkill here but it will be cached and accessed
+         * in the next state anyway. */
+        BedOverview overview = BedOverviewFactory.getOverview(access.getRiverName());
+
+        if (overview == null) {
+            log.warn("No overview found for river '" + access.getRiverName() + "'");
+            return ele;
+        }
+
+        KMIndex<List<Date>> entries = overview.filter(BedOverview.ACCEPT);
+        entries.sort();
+
+        if (data.getName().equals("ld_from")) {
+            cr.addAttr(ele, "defaultLabel", data.getName(), true);
+            cr.addAttr(ele, "defaultValue", Double.toString(entries.get(0).getKm()), true);
+        } else if (data.getName().equals("ld_to")) {
+            cr.addAttr(ele, "defaultLabel", data.getName(), true);
+            cr.addAttr(ele, "defaultValue", Double.toString(entries.get(entries.size()-1).getKm()), true);
+        }
+
+        return ele;
+    }
+}

http://dive4elements.wald.intevation.org