Mercurial > dive4elements > river
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,