changeset 4508:03b8d10a99c0

FixationArtifact: implement WaterLineArtifact, deliver lines for cross-sections.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 14 Nov 2012 13:46:50 +0100
parents 976ff4b74b96
children acd7437f66f0
files flys-artifacts/src/main/java/de/intevation/flys/artifacts/FixationArtifact.java
diffstat 1 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FixationArtifact.java	Wed Nov 14 12:26:45 2012 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/FixationArtifact.java	Wed Nov 14 13:46:50 2012 +0100
@@ -1,5 +1,18 @@
 package de.intevation.flys.artifacts;
 
+import de.intevation.artifacts.CallContext;
+
+import de.intevation.flys.artifacts.geom.Lines;
+import de.intevation.flys.artifacts.StaticWKmsArtifact;
+
+import de.intevation.flys.artifacts.model.CalculationResult;
+import de.intevation.flys.artifacts.model.WKms;
+import de.intevation.flys.artifacts.model.fixings.FixRealizingResult;
+
+import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
+
+import de.intevation.flys.model.FastCrossSectionLine;
+
 import org.apache.log4j.Logger;
 
 /**
@@ -9,6 +22,7 @@
  */
 public class FixationArtifact
 extends      FLYSArtifact
+implements   WaterLineArtifact
 {
     /** The logger for this class. */
     private static Logger logger = Logger.getLogger(FixationArtifact.class);
@@ -34,5 +48,34 @@
     public String getName() {
         return ARTIFACT_NAME;
     }
+
+    @Override
+    public Lines.LineData getWaterLines(
+        int                  facetIdx,
+        FastCrossSectionLine      csl,
+        double                      d,
+        double                      w,
+        CallContext           context
+    ) {
+        FixRealizingResult result = (FixRealizingResult)
+            ((CalculationResult)this.compute(context, ComputeType.ADVANCE, false)).getData();
+        
+        WKms wkms = result.getWQKms()[facetIdx];
+
+        double km = csl.getKm();
+
+        // Find W at km.
+        double wAtKm;
+
+        wAtKm = StaticWKmsArtifact.getWAtKm(wkms, km);
+
+        if (wAtKm == -1 || Double.isNaN(wAtKm)) {
+            logger.warn("Waterlevel at km " + km + " unknown.");
+            return new Lines.LineData(new double[][] {{}}, 0d, 0d);
+        }
+
+        // This should be FixRealizationResult, which can be getWQKms()ed
+        return Lines.createWaterLines(csl.getPoints(), wAtKm);
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org