diff artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java @ 6325:ee701de9c875

Add special case handling for Fixing AT export at a gauge
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 13 Jun 2013 11:43:02 +0200
parents 1642e08d14d2
children 65a5deaee769
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java	Thu Jun 13 10:01:01 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixATWriter.java	Thu Jun 13 11:43:02 2013 +0200
@@ -18,6 +18,9 @@
 
 import org.dive4elements.river.exports.ATWriter;
 
+import org.dive4elements.river.model.Gauge;
+import org.dive4elements.river.model.River;
+
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.Writer;
@@ -35,9 +38,15 @@
     public static final String I18N_HEADER_KEY =
         "fix.export.at.header";
 
+    public static final String I18N_GAUGE_HEADER_KEY =
+        "fix.export.at.gauge.header";
+
     public static final String I18N_HEADER_DEFAULT =
         "Exported fixings discharge curve for {0} {0}-km: {1}";
 
+    public static final String I18N_GAUGE_HEADER_DEFAULT =
+        "Exported fixings discharge curve for {0}, gauge: {1} datum[{3}] = {2}";
+
     public static final String [] Q_MAX_COLUMN = new String [] { "max_q" };
 
     private static final int    MAX_ITERATIONS = 10000;
@@ -58,12 +67,21 @@
     public void write(
         Writer   writer,
         CallMeta meta,
-        String   river,
+        River    river,
         double   km
     )
     throws IOException {
         PrintWriter out = new PrintWriter(writer);
-        printHeader(out, meta, river, km);
+
+        int subtractPNP = 0;
+        // Special case handling for at's at gauges
+        Gauge gauge = river.determineGaugeByPosition(km);
+        if (Math.abs(km - gauge.getStation().doubleValue()) < 1e-4) {
+            printGaugeHeader(out, meta, river, gauge);
+            subtractPNP = (int)Math.round(gauge.getDatum().doubleValue() * 100);
+        } else {
+            printHeader(out, meta, river.getName(), km);
+        }
 
         double [] coeffs = parameters.interpolate(
             "km", km, function.getParameterNames());
@@ -116,7 +134,7 @@
             log.debug("wcm: " + wcm);
         }
 
-        out.printf(Locale.US, "%8d", wRow);
+        out.printf(Locale.US, "%8d", wRow - subtractPNP);
 
         for (int i = 0; i < wcm; i++) {
             out.print(ATWriter.EMPTY);
@@ -140,7 +158,7 @@
             if (w > wMax) {
                 break;
             }
-            out.printf(Locale.US, "%8d", wRow += 10);
+            out.printf(Locale.US, "%8d", (wRow += 10) - subtractPNP);
             wcm = 0;
         }
 
@@ -160,6 +178,20 @@
             river, km));
     }
 
+    protected void printGaugeHeader(
+        PrintWriter out,
+        CallMeta    meta,
+        River       river,
+        Gauge       gauge
+    ) {
+        out.println("*" + Resources.format(
+            meta,
+            I18N_GAUGE_HEADER_KEY,
+            I18N_GAUGE_HEADER_DEFAULT,
+            new Object[] { river.getName(), gauge.getName(),
+                gauge.getDatum(), river.getWstUnit().getName() }));
+    }
+
     private static double minW(
         org.dive4elements.river.artifacts.math.Function function,
         double maxW,

http://dive4elements.wald.intevation.org