changeset 5112:ae25e23a1546

WaterlevelExporter: Unpolished fix for flys/issue1131: gaugename in csv.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 27 Feb 2013 11:56:11 +0100
parents 4898376c680b
children 842026a5a12c
files flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java
diffstat 1 files changed, 60 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java	Wed Feb 27 11:50:32 2013 +0100
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java	Wed Feb 27 11:56:11 2013 +0100
@@ -449,6 +449,50 @@
     }
 
 
+    /** Linearly search for gauge which is valid at km. */
+    private Gauge findGauge(double km, List<Gauge> gauges) {
+        for (Gauge gauge: gauges) {
+            if (km >= gauge.getRange().getA().doubleValue()
+                && km <= gauge.getRange().getB().doubleValue()) {
+                return gauge;
+            }
+        }
+        return null;
+    }
+
+
+    private void writeRow4(CSVWriter writer, double wqkm[], FLYSArtifact flys) {
+        NumberFormat kmf = getKmFormatter();
+        NumberFormat wf  = getWFormatter();
+        NumberFormat qf  = getQFormatter();
+
+       writer.writeNext(new String[] {
+           kmf.format(wqkm[2]),
+           wf.format(wqkm[0]),
+           qf.format(wqkm[1]),
+           FLYSUtils.getLocationDescription(flys, wqkm[2])
+       });
+    }
+
+
+    /** Write an csv-row at gauge location. */
+    private void writeRow6(CSVWriter writer, double wqkm[], String wOrQDesc,
+        FLYSArtifact flys, String gaugeName) {
+        NumberFormat kmf = getKmFormatter();
+        NumberFormat wf  = getWFormatter();
+        NumberFormat qf  = getQFormatter();
+
+        writer.writeNext(new String[] {
+            kmf.format(wqkm[2]),
+            wf.format(wqkm[0]),
+            qf.format(wqkm[1]),
+            wOrQDesc,
+            FLYSUtils.getLocationDescription(flys, wqkm[2]),
+            gaugeName
+        });
+    }
+
+
     /**
      * Write "rows" of csv data from wqkms with writer.
      */
@@ -473,6 +517,7 @@
         double[] result = new double[3];
 
         FLYSArtifact flys       = (FLYSArtifact) master;
+        List<Gauge>  gauges     = FLYSUtils.getGauges(flys);
         Gauge        gauge      = FLYSUtils.getGauge(flys);
         String       gaugeName  = gauge.getName();
         String       desc       = "";
@@ -496,6 +541,7 @@
 
         String colDesc = desc;
         List<Segment> segments = null;
+        boolean isFixRealize = false;
         if (flys instanceof WINFOArtifact) {
             if (wqkms != null && wqkms.getRawValue() != null) {
                 WINFOArtifact winfo = (WINFOArtifact) flys;
@@ -506,6 +552,9 @@
             // Get W/Q input per gauge for this case.
             FixRealizingAccess fixAccess = new FixRealizingAccess(flys, getCallContext());
             segments = fixAccess.getSegments();
+            if (segments != null && segments.size() > 0) {
+                isFixRealize = true;
+            }
         }
 
         for (int i = 0; i < size; i ++) {
@@ -521,25 +570,21 @@
             }
 
             if (atGauge) {
-                writer.writeNext(new String[] {
-                    kmf.format(result[2]),
-                    wf.format(result[0]),
-                    qf.format(result[1]),
-                    colDesc,
-                    FLYSUtils.getLocationDescription(flys, result[2]),
+                String gaugeN;
+                // TODO issue1131, name gauge
+                if (isFixRealize) {
+                    gaugeN = findGauge(result[2], gauges).getName();
+                }
+                else {
                     // TODO issue1114: Take correct gauge
-                    result[2] >= a && result[2] <= b
+                    gaugeN = result[2] >= a && result[2] <= b
                         ? gaugeName
-                        : notinrange
-                });
+                        : notinrange;
+                }
+                writeRow6(writer, result, colDesc, flys, gaugeN);
             }
             else {
-                writer.writeNext(new String[] {
-                    kmf.format(result[2]),
-                    wf.format(result[0]),
-                    qf.format(result[1]),
-                    FLYSUtils.getLocationDescription(flys, result[2])
-                });
+                writeRow4(writer, result, flys);
             }
         }
 

http://dive4elements.wald.intevation.org