diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java @ 6148:b12ec9f240bc

Bed height differences: DO NOT STORE ARTIFACTS IN CALCULATION RESULTS!!! This would lead to caching them which is _really_ wrong.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sat, 01 Jun 2013 20:08:21 +0200
parents 073268a137d5
children 0f5cacdd60a9
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java	Sat Jun 01 18:59:52 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java	Sat Jun 01 20:08:21 2013 +0200
@@ -5,18 +5,15 @@
  * 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 java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
 
 import org.apache.log4j.Logger;
 
-import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.access.BedDifferencesAccess;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
@@ -25,25 +22,23 @@
 public class BedDiffCalculation
 extends Calculation
 {
+    private static final Logger logger =
+        Logger.getLogger(BedDiffCalculation.class);
 
-    private static final Logger logger = Logger
-        .getLogger(BedDiffCalculation.class);
-
-    protected String river;
-    protected String yearEpoch;
-    protected D4EArtifact[][] artifacts;
+    protected String   river;
+    protected String   yearEpoch;
+    protected int [][] heightIds;
 
     public BedDiffCalculation() {
     }
 
-    public CalculationResult calculate(BedDifferencesAccess access) {
+    public CalculationResult calculate(BedDifferencesAccess access, CallContext context) {
         logger.info("BedDiffCalculation.calculate");
 
-        String river = access.getRiver();
-        String yearEpoch = access.getYearEpoch();
-        D4EArtifact[][] artifacts = access.getDifferenceArtifacts();
+        String river       = access.getRiver();
+        String yearEpoch   = access.getYearEpoch();
+        int [][] heightIds = access.extractHeightIds(context);
 
-        logger.debug("got artifacts: " + artifacts.length + "; " + artifacts[0].length);
         if (river == null) {
             // TODO: i18n
             addProblem("minfo.missing.river");
@@ -53,14 +48,10 @@
             addProblem("minfo.missing.year_epoch");
         }
 
-        if (artifacts == null) {
-            addProblem("minfo.missing.differences");
-        }
-
         if (!hasProblems()) {
-            this.river = river;
+            this.river     = river;
             this.yearEpoch = yearEpoch;
-            this.artifacts = artifacts;
+            this.heightIds = heightIds;
             return internalCalculate();
         }
 
@@ -70,46 +61,33 @@
     private CalculationResult internalCalculate() {
 
         if (yearEpoch.equals("year")) {
-            List<BedDiffYearResult> results =
-                new LinkedList<BedDiffYearResult>();
+            BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length];
 
-            for (int i = 0; i < artifacts.length; i++) {
-                BedHeight[] pair =
-                    getHeightPair(artifacts[i][0], artifacts[i][1], "single");
-                BedDiffYearResult res = calculateYearDifference(pair);
-                results.add(res);
+            for (int i = 0; i < heightIds.length; i++) {
+                BedHeight [] pair = getHeightPair(heightIds[i], "single");
+                results[i] = calculateYearDifference(pair);
             }
-            return new CalculationResult(
-                results.toArray(new BedDiffYearResult[results.size()]), this);
+            return new CalculationResult(results, this);
         }
+
         if (yearEpoch.equals("epoch")) {
-            List<BedDiffEpochResult> results =
-                new LinkedList<BedDiffEpochResult>();
-            for (int i = 0; i < artifacts.length; i++) {
-                BedHeight[] pair =
-                    getHeightPair(artifacts[i][0], artifacts[i][1], "epoch");
-                BedDiffEpochResult res = calculateEpochDifference(pair);
-                results.add(res);
+            BedDiffEpochResult [] results = new BedDiffEpochResult[heightIds.length];
+
+            for (int i = 0; i < heightIds.length; i++) {
+                BedHeight[] pair = getHeightPair(heightIds[i], "epoch");
+                results[i] = calculateEpochDifference(pair);
             }
-            return new CalculationResult(
-                results.toArray(new BedDiffEpochResult[results.size()]), this);
+            return new CalculationResult(results, this);
         }
 
        return new CalculationResult();
     }
 
-    private BedHeight[] getHeightPair(
-        D4EArtifact art1,
-        D4EArtifact art2,
-        String type
-    ) {
-        int id1 = BedDifferencesAccess.getHeightId(art1);
-        int id2 = BedDifferencesAccess.getHeightId(art2);
-
-        BedHeight[] heights = new BedHeight[2];
-        heights[0] = BedHeightFactory.getHeight(type, id1, 0);
-        heights[1] = BedHeightFactory.getHeight(type, id2, 0);
-        return heights;
+    private static BedHeight [] getHeightPair(int [] ids, String type) {
+        return new BedHeight [] {
+            BedHeightFactory.getHeight(type, ids[0], 0),
+            BedHeightFactory.getHeight(type, ids[1], 0)
+        };
     }
 
     private BedDiffEpochResult calculateEpochDifference(BedHeight[] pair) {

http://dive4elements.wald.intevation.org