changeset 9040:5294114b1df4

Fixed/changed some FIXMEs/TODOs
author gernotbelger
date Wed, 02 May 2018 12:19:31 +0200
parents 13b5b515c61f
children b10b49a749ff
files artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthPairSelectState.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculation.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingCurrentPairSelectState.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingHistoricalPairSelectState.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/BedQualityD50KmValueFinder.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/FlowVelocityModelKmValueFinder.java artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelDescriptionBuilder.java artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java
diffstat 13 files changed, 74 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java	Wed May 02 12:19:31 2018 +0200
@@ -65,7 +65,7 @@
         if (this.yAxisLabel != null && !this.yAxisLabel.isEmpty()) {
             // REMARK/UNINTENDED: yAxisLabel may also be a resolved message (side-effect of StyledXYSeries#putMetadata),
             // and cannot be resolved, so we need to give the resolved value as default
-            // FIXME: In other implementations (i.e. FlowVelocityProcessor), an explicit (German) default label is given here,
+            // TODO: In other implementations (i.e. FlowVelocityProcessor), an explicit (German) default label is given here,
             // probably the English version will also show German (CHECK)
             return generator.msg(this.yAxisLabel, this.yAxisLabel);
         }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/DatacagePairSelectState.java	Wed May 02 12:19:31 2018 +0200
@@ -92,7 +92,7 @@
     }
 
     /**
-     * Creats the data element used for the static part of DESCRIBE document.
+     * Creates the data element used for the static part of DESCRIBE document.
      */
     @Override
     protected final Element createStaticData(final D4EArtifact flys, final ElementCreator creator, final CallContext cc, final String name, final String value,
@@ -107,7 +107,6 @@
         final String[] labels = WaterlevelPairSelectState.getLabels(cc, value);
         final Object[] obj = new Object[] { labels[0] };
 
-        // TODO own i18n
         final String attrValue = Resources.getMsg(cc.getMeta(), "wsp.selected.string", "wsp.selected.string", obj);
 
         creator.addAttr(itemElement, "label", attrValue, true);
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthPairSelectState.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthPairSelectState.java	Wed May 02 12:19:31 2018 +0200
@@ -15,7 +15,7 @@
  * @author Gernot Belger
  *
  */
-// FIXME: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
+// REMARK: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
 // abstraction
 public final class FlowDepthPairSelectState extends DatacagePairSelectState {
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java	Wed May 02 12:19:31 2018 +0200
@@ -43,7 +43,6 @@
 
     @Override
     public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
-        // FIXME: why is this necessary?
         if (artifact instanceof ChartArtifact) {
             facets.add(new EmptyFacet());
             return null;
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculation.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculation.java	Wed May 02 12:19:31 2018 +0200
@@ -96,9 +96,6 @@
         if (historicalSounding == null)
             return null;
 
-        // FIXME: check current/hist wst have same discharge...
-        // FIXME: what means 'same discharge'
-
         final BedHeightInfo currentSoundingInfo = currentSounding.getInfo();
         final BedHeightInfo historicalSoundingInfo = historicalSounding.getInfo();
 
@@ -117,7 +114,6 @@
             return null;
         }
 
-        // FIXME: distinguish error messages
         FlowDepthUtils.checkYearDifference(Resources.getMsg(this.context.getMeta(), "flowdepthdevelopmentcalculation.yearDifferenceCurrent"), currentWstYear,
                 currentSoundingYear, problems);
         FlowDepthUtils.checkYearDifference(Resources.getMsg(this.context.getMeta(), "flowdepthdevelopmentcalculation.yearDifferenceHistorical"),
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java	Wed May 02 12:19:31 2018 +0200
@@ -35,7 +35,7 @@
 
     public FlowDepthDevelopmentCalculationResult(final String label, final WstInfo currentWst, final WstInfo historicalWst, final BedHeightInfo currentSounding,
             final BedHeightInfo historicalSounding, final Collection< ResultRow> rows) {
-        // FIXME: bad abstraction if we give null here...
+        // TODO: bad abstraction if we give null here...
         super(label, null, rows);
 
         this.currentWst = currentWst;
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingCurrentPairSelectState.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingCurrentPairSelectState.java	Wed May 02 12:19:31 2018 +0200
@@ -15,7 +15,7 @@
  * @author Gernot Belger
  *
  */
-// FIXME: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
+// REMARK: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
 // abstraction
 public final class WaterlevelSoundingCurrentPairSelectState extends DatacagePairSelectState {
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingHistoricalPairSelectState.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/WaterlevelSoundingHistoricalPairSelectState.java	Wed May 02 12:19:31 2018 +0200
@@ -13,9 +13,8 @@
 
 /**
  * @author Gernot Belger
- *
  */
-// FIXME: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
+// REAMRK: very ugly; but probably we will break the serialization of WaterlevelPairSelectState if we introduce an
 // abstraction
 public final class WaterlevelSoundingHistoricalPairSelectState extends DatacagePairSelectState {
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/BedQualityD50KmValueFinder.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/BedQualityD50KmValueFinder.java	Wed May 02 12:19:31 2018 +0200
@@ -79,7 +79,6 @@
     private BedQualityD50KmValueFinder(final Calculation problems, final double[] kms, final double[] values) {
         this.problems = problems;
 
-        // FIXME: check: max distance prüfen? dann D4E-LinearInterpolator verwenden
         this.interpolator = new LinearInterpolator().interpolate(kms, values);
     }
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/DischargeValuesFinder.java	Wed May 02 12:19:31 2018 +0200
@@ -77,8 +77,6 @@
     public double getDischarge(final double station) {
 
         try {
-            // FIXME: check: ich dachte wir interpolieren den abfluss nicht linear?
-
             // IMPORTANT: we first try to retrieve the exact value if it is present, to avoid rounding changes due to interpolation.
             // This is important because in the WaterlevelExporter code, these values are double-compared (with '==' ...) in order
             // to find the corresponding main-value.
@@ -90,7 +88,8 @@
 
             return this.qInterpolator.value(station);
         }
-        catch (final FunctionEvaluationException e) {
+        catch (@SuppressWarnings("unused") final FunctionEvaluationException e) {
+            // ignore exception because this can/will happen regularly
             return Double.NaN;
         }
     }
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/FlowVelocityModelKmValueFinder.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/FlowVelocityModelKmValueFinder.java	Wed May 02 12:19:31 2018 +0200
@@ -38,7 +38,6 @@
  *
  * @author Matthias Schäfer
  */
-// TODO: noch mal prüfen, ob wir eine interpolationsschranke brauchen (max. km-abstand)
 final class FlowVelocityModelKmValueFinder {
     /***** FIELDS *****/
 
--- a/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelDescriptionBuilder.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelDescriptionBuilder.java	Wed May 02 12:19:31 2018 +0200
@@ -29,6 +29,13 @@
  */
 public final class WaterlevelDescriptionBuilder {
 
+    private static final String CSV_META_Q = "export.waterlevel.csv.meta.q";
+
+    // FIXME: unit 'NN + m' is wrong:
+    // - use river-elevation system in case of absolute heights
+    // - use 'cm am Pegel' in other cases
+    private static final String CSV_META_W = "export.waterlevel.csv.meta.w";
+
     private static final String CSV_Q_DESC_HEADER = "export.waterlevel.csv.header.q.desc";
 
     // FIXME: missing in resource-files! hence always the default is used...
@@ -63,6 +70,64 @@
         return this.atGauge;
     }
 
+    public String getMetadata() {
+
+        switch (this.mode) {
+        case QFREE:
+        case QGAUGE: {
+            final String data = getMetadataQ();
+            if (data == null)
+                return null;
+
+            return Resources.getMsg(this.context.getMeta(), CSV_META_Q, CSV_META_Q, data);
+        }
+
+        // TODO: probably none, default is wrong here, but this how it was implemented in WaterlevelExporter.
+        case WFREE:
+        case WGAUGE:
+        case NONE:
+        default:
+            final double[] ws = RiverUtils.getWs(this.artifact);
+
+            if (ws == null || ws.length <= 0)
+                return null;
+
+            // FIXME: we also have here a case single?!
+
+            // FIXME: use correct wst unit!
+
+            // FIXME: bad formatting ofd values. Use the correct Formatter!
+            final String lower = String.valueOf(ws[0]);
+            final String upper = String.valueOf(ws[ws.length - 1]);
+
+            return Resources.getMsg(this.context.getMeta(), CSV_META_W, CSV_META_W, lower, upper);
+        }
+    }
+
+    private String getMetadataQ() {
+
+        final double[] qs = RiverUtils.getQs(this.artifact);
+        if (qs == null || qs.length == 0)
+            return null;
+
+        final RiverUtils.WQ_INPUT input = RiverUtils.getWQInputMode(this.artifact);
+
+        switch (input) {
+        case ADAPTED:
+        case RANGE:
+            return String.valueOf(qs[0]) + " - " + String.valueOf(qs[qs.length - 1]);
+
+        case SINGLE:
+            String data = String.valueOf(qs[0]);
+            for (int i = 1; i < qs.length; i++)
+                data += ", " + String.valueOf(qs[i]);
+            return data;
+
+        default:
+            return null;
+        }
+    }
+
     public String getColumnHeader() {
 
         if (!this.atGauge)
--- a/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java	Wed May 02 12:16:47 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/WaterlevelExporter.java	Wed May 02 12:19:31 2018 +0200
@@ -493,6 +493,7 @@
                 new Object[] { RiverUtils.getGaugename(flys) })
         });
 
+        // TODO: code extracted into WaterlevelDescriptionBuilder, should be used instead.
         RiverUtils.WQ_MODE wq = RiverUtils.getWQMode(flys);
         if (wq == RiverUtils.WQ_MODE.QFREE || wq == RiverUtils.WQ_MODE.QGAUGE) {
             double[] qs  = RiverUtils.getQs(flys);

http://dive4elements.wald.intevation.org