annotate artifacts/src/main/java/org/dive4elements/river/exports/FixWaterlevelExporter.java @ 9457:65f28328c9a3

ausgelagerte Wasserspiegellage AWSPL neue Spalte
author gernotbelger
date Tue, 28 Aug 2018 14:02:23 +0200
parents
children f06e3766997f
rev   line source
9457
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
3 *
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
7 */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
8
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.exports;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
10
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
11 import java.io.OutputStream;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
12 import java.text.NumberFormat;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
13 import java.util.ArrayList;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
14 import java.util.HashMap;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
15 import java.util.List;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
16 import java.util.Map;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
17
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
18 import org.apache.log4j.Logger;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.D4EArtifact;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.access.RangeAccess;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.common.DefaultCalculationResults;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.artifacts.common.ExportContextPDF;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.common.GeneralResultType;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.artifacts.common.JasperReporter;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
26 import org.dive4elements.river.artifacts.model.ConstantWQKms;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
27 import org.dive4elements.river.artifacts.model.DischargeTables;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.artifacts.model.WQKms;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
30 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
31 import org.dive4elements.river.model.Gauge;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
32 import org.dive4elements.river.utils.Formatter;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
33 import org.dive4elements.river.utils.RiverUtils;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
34 import org.dive4elements.river.utils.RiverUtils.WQ_MODE;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
35
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
36 import au.com.bytecode.opencsv.CSVWriter;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
37 import net.sf.jasperreports.engine.JRException;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
38
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
39 /**
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
40 * Generates different output formats (wst, csv, pdf) of data that resulted from
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
41 * a waterlevel computation.
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
42 *
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
43 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
44 */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
45 public class FixWaterlevelExporter extends WaterlevelExporter {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
46
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
47 /** The log used in this exporter. */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
48 private static Logger log = Logger.getLogger(FixWaterlevelExporter.class);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
49
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
50 private final Map<String, Double> gaugeQ_W_Map = new HashMap<>();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
51
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
52 @Override
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
53 protected void writeRow4(final CSVWriter writer, final double wqkm[], final D4EArtifact flys, final Gauge gauge) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
54 final NumberFormat kmf = getKmFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
55 final NumberFormat wf = getWFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
56 final NumberFormat qf = getQFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
57
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
58 final String waterlevel = getWaterlevel(wqkm[1], gauge);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
59
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
60 writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])),
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
61 RiverUtils.getLocationDescription(flys, wqkm[2]) });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
62 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
63
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
64 /** Write an csv-row at gauge location. */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
65 @Override
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
66 protected void writeRow6(final CSVWriter writer, final double wqkm[], final String wOrQDesc, final D4EArtifact flys, final Gauge gauge) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
67 final NumberFormat kmf = getKmFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
68 final NumberFormat wf = getWFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
69 final NumberFormat qf = getQFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
70
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
71 final String waterlevel = getWaterlevel(wqkm[1], gauge);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
72
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
73 writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])), wOrQDesc,
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
74 RiverUtils.getLocationDescription(flys, wqkm[2]), gauge.getName() });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
75 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
76
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
77 private String getWaterlevel(final double discharge, final Gauge gauge) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
78 final NumberFormat formatter = Formatter.getWaterlevelW(this.context);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
79 final Double waterlevel = this.getWforGaugeAndQ(gauge, discharge);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
80 return formatter.format(waterlevel);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
81 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
82
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
83 private Double getWforGaugeAndQ(final Gauge gauge, final double q) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
84
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
85 final String key = gauge.getName() + String.valueOf(q);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
86 if (!this.gaugeQ_W_Map.containsKey(key)) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
87
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
88 final DischargeTables dct = new DischargeTables(gauge.getRiver().getName(), gauge.getName());
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
89 final double[] qs = DischargeTables.getWsForQ(dct.getFirstTable(), q); // TODO: KLÄREN, welche Abflusstabelle genommen werden soll!
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
90 if (qs != null && qs.length > 0) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
91 this.gaugeQ_W_Map.put(key, qs[0]);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
92 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
93 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
94 return this.gaugeQ_W_Map.get(key);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
95 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
96
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
97 /**
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
98 * Write the header, with different headings depending on whether at a
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
99 * gauge or at a location.
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
100 */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
101
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
102 @Override
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
103 protected void writeCSVHeader(final CSVWriter writer, final boolean atGauge, final boolean isQ) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
104 log.info("WaterlevelExporter.writeCSVHeader");
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
105
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
106 final String unit = RiverUtils.getRiver((D4EArtifact) this.master).getWstUnit().getName();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
107
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
108 final String headerWamPegelNeu = msg("fix.export.csv.w_at_gauge");
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
109
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
110 if (atGauge) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
111 writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
112 headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
113
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
114 // FIXME: use WaterlevelDescriptionBuilder instead and also remove all this duplicate code.
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
115 (isQ ? msg(CSV_Q_DESC_HEADER, DEFAULT_CSV_Q_DESC_HEADER) : msg(CSV_W_DESC_HEADER, DEFAULT_CSV_W_DESC_HEADER)),
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
116 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), msg(CSV_GAUGE_HEADER, DEFAULT_CSV_GAUGE_HEADER) });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
117 } else {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
118 writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
119 headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER) });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
120 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
121 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
122
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
123 @Override
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
124 protected void writePDF(final OutputStream out) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
125
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
126 log.debug("write PDF");
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
127
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
128 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
129 final String jasperFile = "/jasper/templates/fix_waterlevel.jrxml"; // "/jasper/fix_waterlevel_en.jasper");
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
130
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
131 addMetaData(source);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
132 try {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
133 final List<String[]> sorted = getRows(); // Custom Result could be nice, too...
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
134 for (final String[] list : sorted) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
135 source.addData(list);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
136 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
137
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
138 final JasperReporter reporter = new JasperReporter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
139 reporter.addReport(jasperFile, source);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
140 reporter.exportPDF(out);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
141 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
142 catch (final JRException je) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
143 log.warn("Error generating PDF Report!", je);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
144 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
145 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
146
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
147 private void addMetaData(final MetaAndTableJRDataSource source) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
148 final D4EArtifact flys = (D4EArtifact) this.master;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
149 final String user = CalculationUtils.findArtifactUser(this.context, flys);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
150 final RangeAccess ra = new RangeAccess(flys);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
151 final RiverInfo ri = new RiverInfo(ra.getRiver());
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
152
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
153 final DefaultCalculationResults results = new DefaultCalculationResults(msg("calculation.analysis"), user, ri, ra.getRange());
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
154 final ExportContextPDF contextPdf = new ExportContextPDF(this.context, results);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
155 contextPdf.addJRMetaDataDefaults(source);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
156 contextPdf.addJRMetaDataForModules(source);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
157
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
158 /* column headings */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
159 contextPdf.addJRMetadata(source, "station_header", GeneralResultType.station);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
160 contextPdf.addJRMetadata(source, "fix_w", msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { ri.getWstUnit() }));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
161 contextPdf.addJRMetadata(source, "w_at_gauge_header", msg("fix.export.csv.w_at_gauge"));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
162 contextPdf.addJRMetadata(source, "fix_q", msg(CSV_Q_HEADER));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
163 contextPdf.addJRMetadata(source, "waterlevel_name_header", msg("common.export.csv.header.mainvalue_label"));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
164 contextPdf.addJRMetadata(source, "location_header", msg("common.export.csv.header.location"));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
165 contextPdf.addJRMetadata(source, "gauge_header", msg("common.export.csv.header.gauge"));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
166
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
167 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
168
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
169 private List<String[]> getRows() {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
170 final List<String[]> list = new ArrayList<>();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
171 final WQ_MODE mode = RiverUtils.getWQMode((D4EArtifact) this.master);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
172 final boolean atGauge = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.WGAUGE;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
173 final boolean isQ = mode == WQ_MODE.QGAUGE || mode == WQ_MODE.QFREE;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
174
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
175 Double first = Double.NaN;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
176 Double last = Double.NaN;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
177
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
178 for (final WQKms[] tmp : this.data) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
179 for (final WQKms wqkms : tmp) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
180 list.addAll(getRows2(wqkms, atGauge, isQ));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
181 final double[] firstLast = wqkms.getFirstLastKM();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
182 if (first.isNaN()) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
183 /* Initialize */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
184 first = firstLast[0];
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
185 last = firstLast[1];
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
186 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
187 if (firstLast[0] > firstLast[1]) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
188 /*
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
189 * Calculating upstream we assert that it is
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
190 * impossible that the direction changes during this
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
191 * loop
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
192 */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
193 first = Math.max(first, firstLast[0]);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
194 last = Math.min(last, firstLast[1]);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
195 } else if (firstLast[0] < firstLast[1]) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
196 first = Math.min(first, firstLast[0]);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
197 last = Math.max(last, firstLast[1]);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
198 } else {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
199 first = last = firstLast[0];
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
200 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
201 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
202 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
203
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
204 /* Append the official fixing at the bottom */
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
205 for (final WQKms wqkms : this.officalFixings) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
206 list.addAll(getRows2(filterWQKms(wqkms, first, last), atGauge, isQ));
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
207 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
208 return list;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
209 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
210
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
211 protected List<String[]> getRows2(final WQKms wqkms, final boolean atGauge, final boolean isQ) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
212 log.debug("WaterlevelExporter.addWKmsData"); // OLD CODE :-/
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
213
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
214 final List<String[]> list = new ArrayList<>();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
215 // Skip constant data.
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
216 if (wqkms instanceof ConstantWQKms) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
217 return null;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
218 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
219
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
220 final NumberFormat kmf = getKmFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
221 final NumberFormat wf = getWFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
222 final NumberFormat qf = getQFormatter();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
223
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
224 final int size = wqkms.size();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
225 double[] result = new double[3];
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
226
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
227 final D4EArtifact flys = (D4EArtifact) this.master;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
228 final RangeAccess rangeAccess = new RangeAccess(flys);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
229
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
230 final Gauge gauge = rangeAccess.getRiver().determineRefGauge(rangeAccess.getKmRange(), rangeAccess.isRange());
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
231
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
232 final String gaugeName = gauge.getName();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
233 String desc = "";
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
234 final String notinrange = msg(CSV_NOT_IN_GAUGE_RANGE, DEFAULT_CSV_NOT_IN_GAUGE_RANGE);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
235
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
236 final double a = gauge.getRange().getA().doubleValue();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
237 final double b = gauge.getRange().getB().doubleValue();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
238
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
239 desc = getDesc(wqkms, isQ);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
240 final long startTime = System.currentTimeMillis();
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
241
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
242 for (int i = 0; i < size; i++) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
243 result = wqkms.get(i, result);
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
244 final double q = result[1];
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
245 final String waterlevel = this.getWaterlevel(q, gauge); // THIS IS NEW (and makes common super method
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
246 // difficult)
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
247 if (atGauge) {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
248 list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc,
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
249 RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
250 } else {
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
251 list.add(new String[] { kmf.format(result[2]), wf.format(result[0]), waterlevel, qf.format(RiverUtils.roundQ(result[1])), desc,
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
252 RiverUtils.getLocationDescription(flys, result[2]), result[2] >= a && result[2] <= b ? gaugeName : notinrange });
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
253 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
254
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
255 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
256
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
257 return list;
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
258 }
65f28328c9a3 ausgelagerte Wasserspiegellage AWSPL neue Spalte
gernotbelger
parents:
diff changeset
259 }

http://dive4elements.wald.intevation.org