diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java @ 8169:856701739443

Handle missing years in bed height differences without assuming an unknown year to be BC 1.
author "Tom Gottfried <tom@intevation.de>"
date Mon, 01 Sep 2014 09:43:55 +0200
parents a709e6334c4a
children e4606eae8ea5
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java	Fri Aug 29 17:00:26 2014 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedDiffCalculation.java	Mon Sep 01 09:43:55 2014 +0200
@@ -35,45 +35,35 @@
     public CalculationResult calculate(BedDifferencesAccess access, CallContext context) {
         logger.info("BedDiffCalculation.calculate");
 
-        String river       = access.getRiverName();
-        int [][] heightIds = access.extractHeightIds(context);
+        this.river     = access.getRiverName();
+        this.heightIds = access.extractHeightIds(context);
 
-        if (river == null) {
-            // TODO: i18n
-            addProblem("minfo.missing.river");
+        BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length];
+        for (int i = 0; i < heightIds.length; i++) {
+            BedHeightSingleData [] pair = getHeightPair(heightIds[i]);
+            if (pair[0].getYear() == null || pair[1].getYear() == null) {
+                addProblem("beddiff.missing.year");
+            }
+            results[i] = calculateYearDifference(pair);
         }
 
-        if (!hasProblems()) {
-            this.river     = river;
-            this.heightIds = heightIds;
-            return internalCalculate();
-        }
-
-        return new CalculationResult();
-    }
-
-    private CalculationResult internalCalculate() {
-        BedDiffYearResult [] results = new BedDiffYearResult[heightIds.length];
-
-        for (int i = 0; i < heightIds.length; i++) {
-            BedHeightData [] pair = getHeightPair(heightIds[i], "single");
-            results[i] = calculateYearDifference(pair);
-        }
         return new CalculationResult(results, this);
     }
 
     /** Get two BedHeights from factory. */
-    private static BedHeightData [] getHeightPair(int [] ids, String type) {
-        return new BedHeightData [] {
-            BedHeightFactory.getHeight(type, ids[0]),
-            BedHeightFactory.getHeight(type, ids[1])
+    private static BedHeightSingleData [] getHeightPair(int [] ids) {
+        return new BedHeightSingleData [] {
+            (BedHeightSingleData)BedHeightFactory.getHeight("single", ids[0]),
+            (BedHeightSingleData)BedHeightFactory.getHeight("single", ids[1])
         };
     }
 
-    private BedDiffYearResult calculateYearDifference(BedHeightData[] pair) {
+    private BedDiffYearResult calculateYearDifference(
+            BedHeightSingleData[] pair
+        ) {
         logger.debug("BedDiffCalculation.calculateYearDifference");
-        BedHeightSingleData s1 = (BedHeightSingleData) pair[0];
-        BedHeightSingleData s2 = (BedHeightSingleData) pair[1];
+        BedHeightSingleData s1 = pair[0];
+        BedHeightSingleData s2 = pair[1];
 
         TDoubleArrayList stations = s1.getStations();
         int size = stations.size();
@@ -88,7 +78,10 @@
         TDoubleArrayList morphs1   = new TDoubleArrayList(size);
         TDoubleArrayList morphs2   = new TDoubleArrayList(size);
 
-        int range = Math.abs(s1.getYear() - s2.getYear());
+        Integer range = null;
+        if (s1.getYear() != null && s2.getYear() != null) {
+            range = Math.abs(s1.getYear() - s2.getYear());
+        }
 
         for (int i = 0; i < size; i++) {
             double station = stations.getQuick(i);
@@ -110,7 +103,9 @@
                     s1.getDataGap(station),
                     s2.getDataGap(station)));
 
-                absolute.add((hDiff / range) * 100d);
+                if (range != null) {
+                    absolute.add((hDiff / range) * 100d);
+                }
                 heights1.add(h1);
                 heights2.add(h2);
                 morphs1.add(m1);

http://dive4elements.wald.intevation.org