diff artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java @ 8657:4054c7fce43e

(issue1755) Add problem / report handling to BedQualityCalculation
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 02 Apr 2015 15:48:48 +0200
parents 36faef4f8acb
children 0c241f03ebcd
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java	Thu Apr 02 14:10:25 2015 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedQualityCalculation.java	Thu Apr 02 15:48:48 2015 +0200
@@ -88,6 +88,31 @@
         return new CalculationResult();
     }
 
+    /** Adds non empty values to a result and adds Problems for empty ones.*/
+    protected void addValuesToResult(BedQualityResult result,
+                                     BedQualityResultValue[] values) {
+        for (BedQualityResultValue value: values) {
+            if (value.isEmpty()) {
+                if (value.isDiameterResult()) {
+                    log.debug("Adding diameter problem");
+                    addProblem("bedquality.missing.diameter." +
+                            value.getType(), value.getName().toUpperCase(),
+                            result.getDateRange().getFrom(),
+                            result.getDateRange().getTo());
+                } else {
+                    log.debug("Adding diameter problem");
+                    addProblem("bedquality.missing." + value.getName() + "." +
+                            value.getType(), result.getDateRange().getFrom(),
+                            result.getDateRange().getTo());
+                }
+            } else {
+                log.debug("Adding unproblematic result");
+                result.add(value);
+            }
+        }
+    }
+
+
     protected CalculationResult internalCalculate() {
 
         List<BedQualityResult> results = new LinkedList<BedQualityResult>();
@@ -111,14 +136,14 @@
             result.setDateRange(dr);
             if (!bedDiameter.isEmpty()) {
                 log.debug("Bed diameter is not empty + " + bedDiameter);
-                result.add(calculateBedParameter(bedMeasurements));
+                addValuesToResult(result, calculateBedParameter(bedMeasurements));
                 for (String bd : bedDiameter) {
-                    result.add (calculateBed(bedMeasurements, bd));
+                    addValuesToResult(result, calculateBed(bedMeasurements, bd));
                 }
             }
             if (!bedloadDiameter.isEmpty()) {
                 for (String bld : bedloadDiameter) {
-                    result.add(calculateBedload(loadMeasurements, bld));
+                    addValuesToResult(result, calculateBedload(loadMeasurements, bld));
                 }
             }
             results.add(result);
@@ -240,7 +265,7 @@
         return results;
     }
 
-    protected BedQualityResultValue calculateBedload(
+    protected BedQualityResultValue[] calculateBedload(
         QualityMeasurements qm,
         String diameter
     ) {
@@ -253,9 +278,10 @@
             location.add(km);
             avDiameter.add(mid * 1000);
         }
-        return new BedQualityResultValue(diameter,
+        return new BedQualityResultValue[] {
+            new BedQualityResultValue(diameter,
                 new double[][] {location.toNativeArray(), avDiameter.toNativeArray()},
-                "bedload");
+                "bedload")};
     }
 
     protected double calculateAverage(

http://dive4elements.wald.intevation.org