changeset 8103:54d35418141e

Add SedimentLoadLSFacet TODO: correct handling of the facet name with regards to grain fraction and unit
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 20 Aug 2014 12:09:41 +0200
parents 28816abe7d5c
children 9ff5fd9bccfa
files artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadLSFacet.java
diffstat 1 files changed, 150 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadLSFacet.java	Wed Aug 20 12:09:41 2014 +0200
@@ -0,0 +1,150 @@
+/* Copyright (C) 2011, 2012, 2013 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.model.minfo;
+
+import gnu.trove.TDoubleArrayList;
+
+import org.dive4elements.artifactdatabase.state.Facet;
+import org.dive4elements.artifactdatabase.state.StaticFacet;
+
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.resources.Resources;
+
+import org.dive4elements.river.artifacts.model.DataFacet;
+import org.dive4elements.river.artifacts.model.FacetTypes;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataFactory;
+import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData;
+
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+
+import org.dive4elements.river.model.SedimentLoadLS;
+import org.dive4elements.river.model.SedimentLoadLSValue;
+
+import org.dive4elements.river.utils.RiverUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+import java.util.TreeMap;
+
+import org.apache.log4j.Logger;
+
+import org.w3c.dom.Document;
+
+
+/** Facet to access sediment loads for longitudinal sections.
+ * This facet differs from the sedimentloadfacet in that it
+ * handles values from the sedimentload_ls table in the backend db.
+ *
+ * The sedimentload facet uses the internal sedimentload data model
+ * to work with measurement stations instead.
+ */
+public class SedimentLoadLSFacet
+extends DataFacet
+implements   FacetTypes, StaticFacet
+{
+    private static Logger logger = Logger.getLogger(SedimentLoadLSFacet.class);
+
+    /* Aheinecke we probably need to get the kind and split this up here
+     * in some way */
+    private static final String NAME = SEDIMENT_LOAD_TA_STATIC;
+
+    public SedimentLoadLSFacet() {
+    }
+
+    public SedimentLoadLSFacet(int idx, String name, String description,
+        ComputeType type, String stateId, String hash) {
+        super(idx, name, description, type, hash, stateId);
+        this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
+        this.metaData.put("Y", "");
+    }
+
+    @Override
+    public Object getData(Artifact artifact, CallContext context) {
+        logger.debug("get Data");
+        D4EArtifact arti = (D4EArtifact) artifact;
+
+        String idStr = arti.getDataAsString("load_id");
+        int id = Integer.valueOf(idStr);
+
+        SedimentLoadLS theLoad = SedimentLoadLS.getSedimentLoadById(id);
+
+        if (theLoad == null) {
+            logger.error("No load found for id: " + idStr);
+            return null;
+        }
+
+        /* Now lets get what we want */
+        TDoubleArrayList xPos = new TDoubleArrayList();
+        TDoubleArrayList yPos = new TDoubleArrayList();
+
+        for (SedimentLoadLSValue val: theLoad.getSedimentLoadLSValues()) {
+            double value = val.getValue();
+            if (Double.isNaN(value)) {
+                continue;
+            }
+            xPos.add(val.getStation());
+            yPos.add(value);
+        }
+
+        return new double[][] {xPos.toNativeArray(), yPos.toNativeArray()};
+    }
+
+    @Override
+    public void setup(Artifact artifact, Document data, CallMeta callMeta) {
+        logger.debug("setup");
+        String code = D4EArtifact.getDatacageIDValue(data);
+        String[] split = code.split(";");
+        String idStr = split[0];
+        String desc = "";
+        if (split.length >= 2) {
+            desc = split[1];
+        }
+
+        int id = Integer.valueOf(idStr);
+        SedimentLoadLS theLoad = SedimentLoadLS.getSedimentLoadById(id);
+        if (theLoad == null) {
+            logger.error("No load found for id: " + idStr);
+            return;
+        }
+        logger.debug("Setting up SedimentLoadLSFacet for id: " + id);
+        logger.debug("GrainFraction: " + theLoad.getGrainFraction().getName());
+        logger.debug("Kind: " + theLoad.getKind());
+        logger.debug("Unit: " + theLoad.getUnit().getName());
+
+        /* TODO: Name is important. We have to add the Grain Fraction and the
+         * unit in here so that theming is done correctly and unit is correct.*/
+        name = NAME;
+        description = Resources.getMsg(
+                callMeta,
+                "facet.sedimentload",
+                "Sedimentload",
+                new Object[] { desc });
+        ((D4EArtifact)artifact).addStringData("load_id", idStr);
+    }
+
+
+    /** Copy deeply. */
+    @Override
+    public Facet deepCopy() {
+        SedimentLoadLSFacet copy = new SedimentLoadLSFacet();
+        copy.set(this);
+        copy.type = type;
+        copy.hash = hash;
+        copy.stateId = stateId;
+        return copy;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org