changeset 6250:267119b38779

Added container and facet for bed diameter measurements.
author Raimund Renkert <rrenkert@intevation.de>
date Mon, 10 Jun 2013 16:22:23 +0200
parents 8eb0e5c8db3f
children 68071f205c0e
files artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterData.java artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java
diffstat 2 files changed, 124 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/BedDiameterData.java	Mon Jun 10 16:22:23 2013 +0200
@@ -0,0 +1,27 @@
+package org.dive4elements.river.artifacts.model.minfo;
+
+import gnu.trove.TDoubleArrayList;
+
+
+public class BedDiameterData
+extends BedQualityDiameterResult
+{
+
+    private TDoubleArrayList data;
+
+    public BedDiameterData() {
+        super();
+    }
+
+    public BedDiameterData (
+        String type,
+        TDoubleArrayList kms,
+        TDoubleArrayList data) {
+        super(type, kms);
+        this.data = data;
+    }
+
+    public double[][] getDiameterData() {
+        return new double[][]{kms.toNativeArray(), data.toNativeArray()};
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiameterDataFacet.java	Mon Jun 10 16:22:23 2013 +0200
@@ -0,0 +1,97 @@
+package org.dive4elements.river.artifacts.model.minfo;
+
+import gnu.trove.TDoubleArrayList;
+
+import org.apache.log4j.Logger;
+import org.dive4elements.artifactdatabase.state.Facet;
+import org.dive4elements.artifacts.Artifact;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.access.BedQualityAccess;
+import org.dive4elements.river.artifacts.model.DataFacet;
+import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
+
+public class BedDiameterDataFacet
+extends DataFacet
+{
+    private static final Logger logger = Logger.getLogger(BedDiameterDataFacet.class);
+
+    private String diameter;
+    private boolean subCap;
+
+    public BedDiameterDataFacet() {
+    }
+
+    public BedDiameterDataFacet(
+        int ndx,
+        String name,
+        String description,
+        ComputeType type,
+        String stateId,
+        String hash
+    ) {
+        super(ndx, name, description, type, hash, stateId);
+    }
+
+    public Object getData(Artifact artifact, CallContext context) {
+        D4EArtifact d4e = (D4EArtifact) artifact;
+        BedQualityAccess access = new BedQualityAccess(d4e, context);
+        int ndx = getIndex() & 7;
+        int top = (getIndex() >> 3) & 1;
+        int diam = (getIndex() >> 4);
+        String diameter = "";
+        switch (diam) {
+            case 1: diameter = "d10"; break;
+            case 2: diameter = "d16"; break;
+            case 3: diameter = "d20"; break;
+            case 4: diameter = "d25"; break;
+            case 5: diameter = "d30"; break;
+            case 6: diameter = "d40"; break;
+            case 7: diameter = "d50"; break;
+            case 8: diameter = "d60"; break;
+            case 9: diameter = "d70"; break;
+            case 10: diameter = "d75"; break;
+            case 11: diameter = "d80"; break;
+            case 12: diameter = "d84"; break;
+            case 13: diameter = "d90"; break;
+            case 14: diameter = "dmin"; break;
+            case 15: diameter = "dmax"; break;
+            case 16: diameter = "dm"; break;
+            default: return null;
+        }
+
+        QualityMeasurements measurements =
+            QualityMeasurementFactory.getBedMeasurements(
+                access.getRiver(),
+                access.getFrom(),
+                access.getTo(),
+                access.getDateRanges().get(ndx).getFrom(),
+                access.getDateRanges().get(ndx).getTo());
+        TDoubleArrayList kms = new TDoubleArrayList();
+        TDoubleArrayList data = new TDoubleArrayList();
+        for (QualityMeasurement m : measurements.getMeasurements()) {
+            if (top == 1 && m.getDepth1() == 0d && m.getDepth2() <= 0.3) {
+                kms.add(m.getKm());
+                data.add(m.getDiameter(diameter)*1000);
+            }
+            else if (top == 0 && m.getDepth1() > 0d && m.getDepth2() <= 0.5){
+                kms.add(m.getKm());
+                data.add(m.getDiameter(diameter)* 1000);
+            }
+        }
+        BedDiameterData bdd = new BedDiameterData(diameter, kms, data);
+        return bdd;
+    }
+
+    /** Copy deeply. */
+    @Override
+    public Facet deepCopy() {
+        BedDiameterDataFacet copy = new BedDiameterDataFacet();
+        copy.set(this);
+        copy.type = type;
+        copy.hash = hash;
+        copy.stateId = stateId;
+        copy.diameter = diameter;
+        return copy;
+    }
+}

http://dive4elements.wald.intevation.org