Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java @ 8948:a4f1ac81f26d
Work on SINFO-FlowDepthMinMax.
Also rework of result row stuff, in order to reduce abstraction, using result type concept
author | gernotbelger |
---|---|
date | Wed, 14 Mar 2018 14:10:32 +0100 |
parents | 5d5d482da3e9 |
children | 09e4a4909814 |
comparison
equal
deleted
inserted
replaced
8947:86650594f051 | 8948:a4f1ac81f26d |
---|---|
9 package org.dive4elements.river.artifacts.sinfo.flowdepthminmax; | 9 package org.dive4elements.river.artifacts.sinfo.flowdepthminmax; |
10 | 10 |
11 import java.util.ArrayList; | 11 import java.util.ArrayList; |
12 import java.util.Collection; | 12 import java.util.Collection; |
13 | 13 |
14 import org.apache.commons.lang.StringUtils; | |
15 import org.apache.log4j.Logger; | 14 import org.apache.log4j.Logger; |
16 import org.dive4elements.river.artifacts.sinfo.SInfoI18NStrings; | |
17 import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter; | 15 import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter; |
16 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultRow; | |
17 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; | |
18 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; | 18 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; |
19 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource; | 19 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource; |
20 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; | 20 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; |
21 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; | 21 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; |
22 import org.dive4elements.river.utils.RiverUtils; | |
23 | 22 |
24 import au.com.bytecode.opencsv.CSVWriter; | 23 import au.com.bytecode.opencsv.CSVWriter; |
25 | 24 |
26 /** | 25 /** |
27 * Generates different output formats (csv, pdf) of data that resulted from a flow depths computation. | 26 * Generates different output formats (csv, pdf) of data that resulted from a flow depths computation. |
28 * | 27 * |
29 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 28 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
30 * @author Gernot Belger | 29 * @author Gernot Belger |
31 */ | 30 */ |
32 // REMARK: must be public because its registered in generators.xml | 31 // REMARK: must be public because its registered in generators.xml |
33 public class FlowDepthMinMaxExporter extends AbstractSInfoExporter<FlowDepthMinMaxRow, FlowDepthMinMaxCalculationResult, FlowDepthMinMaxCalculationResults> { | 32 public class FlowDepthMinMaxExporter extends AbstractSInfoExporter<FlowDepthMinMaxCalculationResult, FlowDepthMinMaxCalculationResults> { |
34 | 33 |
35 /** The log used in this exporter. */ | 34 /** The log used in this exporter. */ |
36 private static Logger log = Logger.getLogger(FlowDepthMinMaxExporter.class); | 35 private static Logger log = Logger.getLogger(FlowDepthMinMaxExporter.class); |
37 | 36 |
38 private static final String CSV_FLOWDEPTH_MIN_HEADER = "sinfo.export.flow_depth_minmax.csv.header.min"; | 37 private static final String JASPER_FILE = "/jasper/sinfo.flowdepthminmax.jasper"; |
39 | |
40 private static final String CSV_FLOWDEPTH_MAX_HEADER = "sinfo.export.flow_depth_minmax.csv.header.max"; | |
41 | |
42 private static final String JASPER_FILE = "/jasper/sinfo.flowdepth.jasper"; | |
43 | 38 |
44 @Override | 39 @Override |
45 protected Logger getLog() { | 40 protected Logger getLog() { |
46 return log; | 41 return log; |
47 } | 42 } |
76 protected void writeCSVHeader(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) { | 71 protected void writeCSVHeader(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) { |
77 log.info("FlowDepthExporter.writeCSVHeader"); | 72 log.info("FlowDepthExporter.writeCSVHeader"); |
78 | 73 |
79 final Collection<String> header = new ArrayList<>(11); | 74 final Collection<String> header = new ArrayList<>(11); |
80 | 75 |
81 header.add(msg(SInfoI18NStrings.CSV_KM_HEADER)); | 76 header.add(msg(SInfoResultType.station.getCsvHeader())); |
82 | 77 header.add(msgUnit(SInfoResultType.flowdepthmin.getCsvHeader(), SInfoResultType.flowdepthmin.getUnit())); |
83 header.add(msgUnit(CSV_FLOWDEPTH_MIN_HEADER, SInfoI18NStrings.UNIT_M)); | 78 header.add(msgUnit(SInfoResultType.flowdepthmax.getCsvHeader(), SInfoResultType.flowdepthmax.getUnit())); |
84 header.add(msgUnit(CSV_FLOWDEPTH_MAX_HEADER, SInfoI18NStrings.UNIT_M)); | 79 header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit())); |
85 | 80 header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit())); |
86 header.add(msgUnit(SInfoI18NStrings.CSV_WATERLEVEL_HEADER, river.getWstUnit())); | 81 header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader())); |
87 header.add(msgUnit(SInfoI18NStrings.CSV_DISCHARGE_HEADER, SInfoI18NStrings.UNIT_CUBIC_M)); | 82 header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader())); |
88 header.add(msg(SInfoI18NStrings.CSV_LABEL_HEADER)); | 83 header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit())); |
89 header.add(msg(SInfoI18NStrings.CSV_GAUGE_HEADER)); | 84 header.add(msg(SInfoResultType.soundingLabel.getCsvHeader())); |
90 header.add(msgUnit(SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER, river.getWstUnit())); | 85 header.add(msg(SInfoResultType.location.getCsvHeader())); |
91 header.add(msg(SInfoI18NStrings.CSV_SOUNDING_HEADER)); | |
92 header.add(msg(SInfoI18NStrings.CSV_LOCATION_HEADER)); | |
93 | 86 |
94 writer.writeNext(header.toArray(new String[header.size()])); | 87 writer.writeNext(header.toArray(new String[header.size()])); |
95 } | 88 } |
96 | 89 |
97 @Override | 90 @Override |
98 protected String[] formatCSVRow(final FlowDepthMinMaxCalculationResults results, final FlowDepthMinMaxRow row) { | 91 protected String[] formatCSVRow(final FlowDepthMinMaxCalculationResults results, final FlowDepthMinMaxCalculationResult result, final SInfoResultRow row) { |
99 return formatFlowDepthRow(row); | 92 return formatRow(result, row); |
100 } | 93 } |
101 | 94 |
102 /** | 95 /** |
103 * Format a row of a flow depth result into an array of string, both used by csv and pdf | 96 * Format a row of a flow depth result into an array of string, both used by csv and pdf |
104 * | 97 * |
98 * @param result | |
99 * | |
105 * @param useTkh | 100 * @param useTkh |
106 */ | 101 */ |
107 private String[] formatFlowDepthRow(final FlowDepthMinMaxRow row) { | 102 private String[] formatRow(final FlowDepthMinMaxCalculationResult result, final SInfoResultRow row) { |
108 | 103 |
109 final Collection<String> lines = new ArrayList<>(11); | 104 final Collection<String> lines = new ArrayList<>(10); |
110 | 105 |
111 // Fluss-km | 106 lines.add(row.exportValue(this.context, SInfoResultType.station)); |
112 lines.add(getKmFormatter().format(row.getStation())); | |
113 | 107 |
114 // FIXME: spalten weglassen, wenn min oder max fehlt | 108 // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper |
109 // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them? | |
110 // templates) | |
111 // if (result == null || result.getMinSounding() != null) | |
112 lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmin)); | |
113 // if (result == null || result.getMaxSounding() != null) | |
114 lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmax)); | |
115 | 115 |
116 // Minimale Fließtiefe [m] | 116 lines.add(row.exportValue(this.context, SInfoResultType.waterlevel)); |
117 lines.add(getFlowDepthFormatter().format(row.getMinFlowDepth())); | 117 lines.add(row.exportValue(this.context, SInfoResultType.discharge)); |
118 // Maximale Fließtiefe [m] | 118 lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel)); |
119 lines.add(getFlowDepthFormatter().format(row.getMaxFlowDepth())); | 119 lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel)); |
120 | 120 lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight)); |
121 // Wasserstand [NN + m] | 121 lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel)); |
122 lines.add(getW2Formatter().format(row.getWaterlevel())); | 122 lines.add(row.exportValue(this.context, SInfoResultType.location)); |
123 | |
124 // Q [m³/s] | |
125 final double discharge = row.getDischarge(); | |
126 if (Double.isNaN(discharge)) | |
127 lines.add(StringUtils.EMPTY); | |
128 else { | |
129 final double roundedDischarge = RiverUtils.roundQ(discharge); | |
130 lines.add(getQFormatter().format(roundedDischarge)); | |
131 } | |
132 | |
133 // Bezeichnung | |
134 lines.add(row.getWaterlevelLabel()); | |
135 | |
136 // Bezugspegel | |
137 lines.add(row.getGauge()); | |
138 | |
139 // Mittlere Sohlhöhe [NN + m] | |
140 lines.add(getMeanBedHeighFormatter().format(row.getMeanBedHeight())); | |
141 | |
142 // Peilung/Epoche | |
143 lines.add(row.getSoundageLabel()); | |
144 | |
145 // Lage | |
146 lines.add(row.getLocation()); | |
147 | 123 |
148 return lines.toArray(new String[lines.size()]); | 124 return lines.toArray(new String[lines.size()]); |
149 } | 125 } |
150 | 126 |
151 @Override | 127 @Override |
158 | 134 |
159 /* general metadata */ | 135 /* general metadata */ |
160 super.addJRMetaDataDefaults(source, results); | 136 super.addJRMetaDataDefaults(source, results); |
161 | 137 |
162 /* column headings */ | 138 /* column headings */ |
163 source.addMetaData("station_header", msg(SInfoI18NStrings.CSV_KM_HEADER)); | 139 source.addMetaData("station_header", msg(SInfoResultType.station.getCsvHeader())); |
164 source.addMetaData("flowdepthmin_header", msg(CSV_FLOWDEPTH_MIN_HEADER)); | 140 source.addMetaData("flowdepthmin_header", msg(SInfoResultType.flowdepthmin.getCsvHeader())); |
165 source.addMetaData("flowdepthmax_header", msg(CSV_FLOWDEPTH_MAX_HEADER)); | 141 source.addMetaData("flowdepthmax_header", msg(SInfoResultType.flowdepthmax.getCsvHeader())); |
166 source.addMetaData("waterlevel_header", msg(SInfoI18NStrings.CSV_WATERLEVEL_HEADER)); | 142 source.addMetaData("waterlevel_header", msg(SInfoResultType.waterlevel.getCsvHeader())); |
167 source.addMetaData("discharge_header", msg(SInfoI18NStrings.CSV_DISCHARGE_HEADER)); | 143 source.addMetaData("discharge_header", msg(SInfoResultType.discharge.getCsvHeader())); |
168 source.addMetaData("waterlevel_name_header", msg(SInfoI18NStrings.CSV_LABEL_HEADER)); | 144 source.addMetaData("waterlevel_name_header", msg(SInfoResultType.waterlevelLabel.getCsvHeader())); |
169 source.addMetaData("gauge_header", msg(SInfoI18NStrings.CSV_GAUGE_HEADER)); | 145 source.addMetaData("gauge_header", msg(SInfoResultType.gaugeLabel.getCsvHeader())); |
170 source.addMetaData("bedheight_header", msg(SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT)); | 146 source.addMetaData("bedheight_header", msg(SInfoResultType.meanBedHeight.getCsvHeader())); |
171 source.addMetaData("sounding_name_header", msg(SInfoI18NStrings.CSV_SOUNDING_HEADER)); | 147 source.addMetaData("sounding_name_header", msg(SInfoResultType.soundingLabel.getCsvHeader())); |
172 source.addMetaData("location_header", msg(SInfoI18NStrings.CSV_LOCATION_HEADER)); | 148 source.addMetaData("location_header", msg(SInfoResultType.location.getCsvHeader())); |
173 } | 149 } |
174 | 150 |
175 @Override | 151 @Override |
176 protected String[] formatPDFRow(final FlowDepthMinMaxCalculationResults results, final FlowDepthMinMaxRow row) { | 152 protected String[] formatPDFRow(final FlowDepthMinMaxCalculationResults results, final SInfoResultRow row) { |
177 return formatFlowDepthRow(row); | 153 return formatRow(null, row); |
178 } | 154 } |
179 } | 155 } |