changeset 9480:7228bd10a8cc

Fixed bundu bzws bedheightfinder todos, added types for excavation volume and costs total
author mschaefer
date Mon, 10 Sep 2018 17:06:23 +0200
parents 2b83d3a96703
children 787fc085459b
files artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMainCalculationResult.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties
diffstat 6 files changed, 80 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java	Mon Sep 10 17:06:23 2018 +0200
@@ -112,6 +112,8 @@
             throw new UnsupportedOperationException();
         }
     };
+
+    // TODO missVolumeTotal und missMassTotal differenzieren in Gesamtsumme und Feld1-10-Summe
     public static final BunduResultType missVolumeTotal = new BunduResultType(I18NStrings.UNIT_CUBIC_M, "bundu.export.bezugswst.csv.meta.miss.volume.total") {
         private static final long serialVersionUID = 1L;
 
@@ -174,6 +176,38 @@
         }
     };
 
+    public static final BunduResultType excavationVolumeTotal = new BunduResultType(I18NStrings.UNIT_CUBIC_M,
+            "bundu.export.bezugswst.csv.meta.miss.excavationtotal", "bundu.export.bezugswst.pdf.meta.miss.excavationtotal") {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
+
+        @Override
+        protected NumberFormat createFormatter(final CallContext context) {
+            return Formatter.getIntegerFormatter(context);
+        }
+    };
+
+    public static final BunduResultType excavationCostsTotal = new BunduResultType(I18NStrings.UNIT_EURO, "bundu.export.bezugswst.csv.meta.miss.coststotal",
+            "bundu.export.bezugswst.pdf.meta.miss.coststotal") {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
+
+        @Override
+        protected NumberFormat createFormatter(final CallContext context) {
+            return Formatter.getCurrencyFormat(context);
+        }
+    };
+
     public static final BunduResultType channelWidth = new BunduResultType(I18NStrings.UNIT_M, "bundu.export.bezugswst.csv.meta.miss.channel.width",
             "bundu.export.bezugswst.pdf.meta.miss.channel.width") {
         private static final long serialVersionUID = 1L;
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java	Mon Sep 10 17:06:23 2018 +0200
@@ -102,8 +102,9 @@
         final WstInfo wstInfo = new WstInfo(wqkms.getName(), 0, riverInfoProvider.getReferenceGauge(), true);
 
         // Fetch the bed heights of the selected sounding
-        final Integer bedHeightId = access.getBedHeightID(); // TODO: REMOVE BEDHEIGHTFINDER FROM CALCULATION - HOW?
-        final BedHeightsFinder bedHeightsFinder = bedHeightId == null ? null : BedHeightsFinder.forId(problems, bedHeightId, access.getRange());
+        final Integer bedHeightId = access.getBedHeightID();
+        final BedHeightsFinder bedHeightsFinder = (bedHeightId != null) ? BedHeightsFinder.forId(problems, bedHeightId, access.getRange())
+                : BedHeightsFinder.NullFinder();
 
         // Fetch the river channel data
         final ChannelFinder channelFinder = ChannelFinder.loadValues(problems, river, access.getBezugsJahr());
@@ -112,13 +113,12 @@
 
         // Compute the result rows
         for (int i = 0; i <= wqkms.size() - 1; i++) {
-            // TODO: REMOVE BEDHEIGHTFINDER FROM CALCULATION - HOW?
             this.rows.add(createRow(wqkms.getKm(i), wqkms.getW(i), wqkms.getQ(i), bedHeightsFinder, channelFinder, riverInfoProvider, wstInfo));
         }
 
         // Compute the missing volumes
         if (access.isCalculateMissingValue()) {
-            if (bedHeightsFinder == null)
+            if ((bedHeightsFinder == null) || bedHeightsFinder.isNull())
                 return new CalculationResult(results, problems);
             computeMissingVolumes(problems);
             final BedQualityCalculator bqCalculator = computeDensities(problems, bunduartifact, access, river);
@@ -188,11 +188,12 @@
         row.putValue(GeneralResultType.waterlevelLabel, wstInfo.getLabel());
         row.putValue(GeneralResultType.gaugeLabel, riverInfoProv.findGauge(station));
         row.putValue(GeneralResultType.location, riverInfoProv.getLocation(station));
-        row.putValue(BunduResultType.sounding, bedHeightsFinder.getInfo().getDescription());
+        if (bedHeightsFinder.getInfo() != null)
+            row.putValue(BunduResultType.sounding, bedHeightsFinder.getInfo().getDescription());
+        else
+            row.putValue(BunduResultType.sounding, "");
 
         // Set bed and channel bottom height
-
-        // TODO: REMOVE BEDHEIGHTFINDER FROM CALCULATION - HOW?
         final double msh = bedHeightsFinder.getMeanBedHeight(station);
         row.putValue(SInfoResultType.meanBedHeight, msh);
         if (!Double.isNaN(w) && !Double.isNaN(msh))
@@ -467,8 +468,8 @@
         sumRow.putValue(BunduResultType.missStationRangeTo, Double.valueOf(this.missKmTo));
         sumRow.putValue(BunduResultType.missVolumeTotal, vTotal);
         sumRow.putValue(BunduResultType.missMassTotal, mTotal);
-        // TODO sumRow.putValue(BunduResultType.excavationVolumeTotal, eTotal);
-        // TODO sumRow.putValue(BunduResultType.excavationCostsTotal, cTotal);
+        sumRow.putValue(BunduResultType.excavationVolumeTotal, eTotal);
+        sumRow.putValue(BunduResultType.excavationCostsTotal, cTotal);
         return sumRow;
     }
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMainCalculationResult.java	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMainCalculationResult.java	Mon Sep 10 17:06:23 2018 +0200
@@ -94,7 +94,8 @@
 
         exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
         exportContextCSV.writeBlankLine();
-        exportContextCSV.writeCSVSoundingMetadata(this.sounding, "common.export.csv.meta.header.sounding");
+        if (this.sounding != null)
+            exportContextCSV.writeCSVSoundingMetadata(this.sounding, "common.export.csv.meta.header.sounding");
 
         // Reihenfolge in der LV anders; ich finde sie aber so sinnvoller
         exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.function", this.function);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedHeightsFinder.java	Mon Sep 10 17:06:23 2018 +0200
@@ -42,6 +42,8 @@
 
     private Calculation problems;
 
+    private final boolean isNull;
+
     /**
      * Create bed height finders from a collection of bed heights.
      */
@@ -112,6 +114,14 @@
     }
 
     /**
+     * Creates a {@link BedHeightsFinder} that returns always NaN heights
+     */
+    public static BedHeightsFinder NullFinder() {
+        final NavigableMap<Double, BedHeightValue> values = new TreeMap<>();
+        return new BedHeightsFinder(null, null, values, true);
+    }
+
+    /**
      * Create a finder for a given bed height.
      *
      */
@@ -132,13 +142,23 @@
 
         final BedHeightInfo info = BedHeightInfo.from(bedHeight);
 
-        return new BedHeightsFinder(problems, info, values);
+        return new BedHeightsFinder(problems, info, values, false);
     }
 
-    private BedHeightsFinder(final Calculation problems, final BedHeightInfo info, final NavigableMap<Double, BedHeightValue> values) {
+    private BedHeightsFinder(final Calculation problems, final BedHeightInfo info, final NavigableMap<Double, BedHeightValue> values, final boolean isNull) {
         this.info = info;
         this.values = values;
         this.problems = problems;
+        this.isNull = isNull;
+    }
+
+    /**
+     * Whether this is a null (always NaN) finder.
+     * 
+     * @return
+     */
+    public boolean isNull() {
+        return this.isNull;
     }
 
     public boolean isEmpty() {
--- a/artifacts/src/main/resources/messages.properties	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties	Mon Sep 10 17:06:23 2018 +0200
@@ -923,8 +923,12 @@
 bundu.export.bezugswst.pdf.meta.miss.costs = Excavation Costs [\u20ac]
 bundu.export.bezugswst.csv.meta.miss.excavation = Excavation Volume [m\u00b3]
 bundu.export.bezugswst.pdf.meta.miss.excavation = Excavation Volume [m\u00b3]
-bundu.export.bezugswst.csv.meta.miss.mass.total = Missing Depth Total Mass [t]
-bundu.export.bezugswst.csv.meta.miss.volume.total = Missing Depth Total Volume [m\u00b3]
+bundu.export.bezugswst.csv.meta.miss.mass.total = Total Missing Mass [t]
+bundu.export.bezugswst.csv.meta.miss.volume.total = Total Missing Volume [m\u00b3]
+bundu.export.bezugswst.csv.meta.miss.coststotal = Total Excavation Costs [\u20ac]
+bundu.export.bezugswst.pdf.meta.miss.coststotal = Total Excavation Costs [\u20ac]
+bundu.export.bezugswst.csv.meta.miss.excavationtotal = Total Excavation Volume [m\u00b3]
+bundu.export.bezugswst.pdf.meta.miss.excavationtotal = Total Excavation Volume [m\u00b3]
 bundu.export.bezugswst.csv.meta.miss.exists = Missing Depths Available?
 bundu.export.bezugswst.pdf.meta.miss.exists = Missing Depths Avail-able?
 bundu.export.bezugswst.csv.meta.miss.channel.min_depth = Channel Depths to be Provided [m]
--- a/artifacts/src/main/resources/messages_de.properties	Mon Sep 10 15:31:55 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties	Mon Sep 10 17:06:23 2018 +0200
@@ -923,8 +923,12 @@
 bundu.export.bezugswst.pdf.meta.miss.costs = Bagger-kosten [\u20ac]
 bundu.export.bezugswst.csv.meta.miss.excavation = Baggervolumen [m\u00b3]
 bundu.export.bezugswst.pdf.meta.miss.excavation = Bagger-volumen [m\u00b3]
-bundu.export.bezugswst.csv.meta.miss.mass.total = Masse Fehltiefe ges. [t]
-bundu.export.bezugswst.csv.meta.miss.volume.total = Volumen Fehltiefe ges. [m\u00b3]
+bundu.export.bezugswst.csv.meta.miss.mass.total = Fehlmasse gesamt [t]
+bundu.export.bezugswst.csv.meta.miss.volume.total = Fehlvolumen gesamt [m\u00b3]
+bundu.export.bezugswst.csv.meta.miss.coststotal = Baggerkosten gesamt [\u20ac]
+bundu.export.bezugswst.pdf.meta.miss.coststotal = Bagger-kosten gesamt [\u20ac]
+bundu.export.bezugswst.csv.meta.miss.excavationtotal = Baggervolumen gesamt [m\u00b3]
+bundu.export.bezugswst.pdf.meta.miss.excavationtotal = Bagger-volumen gesamt [m\u00b3]
 bundu.export.bezugswst.csv.meta.miss.exists = Fehltiefe vorhanden?
 bundu.export.bezugswst.pdf.meta.miss.exists = Fehl-tiefe vor-handen?
 bundu.export.bezugswst.csv.meta.miss.channel.min_depth = Zu gew\u00e4hrleistende Fahrrinnentiefe [m]

http://dive4elements.wald.intevation.org