[PATCH 1 of 3] Add SedimentLoadLSFacet
Wald Commits
scm-commit at wald.intevation.org
Wed Aug 20 12:11:31 CEST 2014
# HG changeset patch
# User Andre Heinecke <andre.heinecke at intevation.de>
# Date 1408529381 -7200
# Node ID 54d35418141e3da0e44264581bb120380789ecf1
# Parent 28816abe7d5c5003933236a452624b8fea39372e
Add SedimentLoadLSFacet
TODO: correct handling of the facet name with regards to grain fraction and unit
diff -r 28816abe7d5c -r 54d35418141e artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadLSFacet.java
--- /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 :
More information about the Dive4Elements-commits
mailing list