comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java @ 8946:5d5d482da3e9

Implementing SINFO - FlowDepthMinMax calculation
author gernotbelger
date Tue, 13 Mar 2018 18:49:33 +0100
parents 9c02733a1b3c
children a4f1ac81f26d
comparison
equal deleted inserted replaced
8945:4a6b6a3c279c 8946:5d5d482da3e9
8 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
9 */ 9 */
10 package org.dive4elements.river.artifacts.sinfo.common; 10 package org.dive4elements.river.artifacts.sinfo.common;
11 11
12 import java.io.OutputStream; 12 import java.io.OutputStream;
13 import java.text.DateFormat;
14 import java.text.NumberFormat;
13 import java.util.Collection; 15 import java.util.Collection;
16 import java.util.Date;
14 import java.util.HashMap; 17 import java.util.HashMap;
18 import java.util.Locale;
15 import java.util.Map; 19 import java.util.Map;
16 20
21 import org.apache.commons.lang.math.DoubleRange;
17 import org.apache.log4j.Logger; 22 import org.apache.log4j.Logger;
18 import org.dive4elements.artifacts.CallMeta; 23 import org.dive4elements.artifacts.CallMeta;
19 import org.dive4elements.artifacts.common.utils.Config; 24 import org.dive4elements.artifacts.common.utils.Config;
25 import org.dive4elements.river.FLYS;
20 import org.dive4elements.river.artifacts.model.CalculationResult; 26 import org.dive4elements.river.artifacts.model.CalculationResult;
21 import org.dive4elements.river.artifacts.resources.Resources; 27 import org.dive4elements.river.artifacts.resources.Resources;
28 import org.dive4elements.river.artifacts.sinfo.SInfoI18NStrings;
29 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
22 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource; 30 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource;
23 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; 31 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
32 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
24 import org.dive4elements.river.exports.AbstractExporter; 33 import org.dive4elements.river.exports.AbstractExporter;
25 34
26 import au.com.bytecode.opencsv.CSVWriter; 35 import au.com.bytecode.opencsv.CSVWriter;
27 import net.sf.jasperreports.engine.JRDataSource; 36 import net.sf.jasperreports.engine.JRDataSource;
28 import net.sf.jasperreports.engine.JRException; 37 import net.sf.jasperreports.engine.JRException;
33 /** 42 /**
34 * @author Gernot Belger 43 * @author Gernot Belger
35 */ 44 */
36 public abstract class AbstractSInfoExporter<ROW extends AbstractSInfoResultRow, RESULT extends AbstractSInfoCalculationResult<ROW>, RESULTS extends AbstractSInfoCalculationResults<ROW, RESULT>> extends AbstractExporter { 45 public abstract class AbstractSInfoExporter<ROW extends AbstractSInfoResultRow, RESULT extends AbstractSInfoCalculationResult<ROW>, RESULTS extends AbstractSInfoCalculationResults<ROW, RESULT>> extends AbstractExporter {
37 46
47 private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
48
49 private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
50
51 private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
52
53 private static final String CSV_META_HEADER_SOUNDING_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
54
55 private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
56
57 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
58
59 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
60
38 /** The storage that contains the current calculation result. */ 61 /** The storage that contains the current calculation result. */
39 private RESULTS data = null; 62 private RESULTS data = null;
40 63
41 protected abstract Logger getLog(); 64 protected abstract Logger getLog();
42 65
171 source.addData(formattedRow); 194 source.addData(formattedRow);
172 } 195 }
173 } 196 }
174 197
175 protected abstract String[] formatPDFRow(RESULTS results, final ROW row); 198 protected abstract String[] formatPDFRow(RESULTS results, final ROW row);
199
200 protected final void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final AbstractSInfoCalculationResults<?, ?> results) {
201
202 final String calcModeLabel = results.getCalcModeLabel();
203 final RiverInfo river = results.getRiver();
204 final DoubleRange calcRange = results.getCalcRange();
205
206 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_RESULT, msg(SInfoI18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
207
208 // "# FLYS-Version: "
209 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_VERSION, msg(SInfoI18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
210
211 // "# Bearbeiter: "
212 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_USER, msg(SInfoI18NStrings.CSV_META_USER_LABEL), results.getUser());
213
214 // "# Datum der Erstellung: "
215 final Locale locale = Resources.getLocale(this.context.getMeta());
216 final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
217 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_CREATION, msg(SInfoI18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
218
219 // "# Gewässer: "
220 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_RIVER, msg(SInfoI18NStrings.CSV_META_RIVER_LABEL), river.getName());
221
222 // "# Höhensystem des Flusses: "
223 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
224
225 // "# Ort/Bereich (km): "
226 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_RANGE, msg(SInfoI18NStrings.CSV_META_RANGE_LABEL),
227 getKmFormatter().format(calcRange.getMinimumDouble()), getKmFormatter().format(calcRange.getMaximumDouble()));
228 }
229
230 protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding) {
231 // "##METADATEN PEILUNG"
232 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING);
233
234 // "# Jahr der Peilung: "
235 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
236 // "# Aufnahmeart: "
237 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
238 // "# Auswerter: "
239 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_EVALUATOR, sounding.getEvaluationBy());
240 // "# Lagesystem: "
241 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
242 // "# Höhensystem: "
243 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
244 // "# ursprüngliches Höhensystem: "
245 writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
246 }
247
248 protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst) {
249 // "##METADATEN WASSERSPIEGELLAGE"
250 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL);
251
252 // "# Bezeichnung der Wasserspiegellage: "
253 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
254
255 // "# Bezugspegel: "
256 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
257
258 // "# Jahr/Zeitraum der Wasserspiegellage: "
259 final int year = wst.getYear();
260 if (year > 0)
261 writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
262 }
263
264 protected final void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final AbstractSInfoCalculationResults<?, ?> results) {
265
266 final RiverInfo river = results.getRiver();
267 final String wstUnitName = river.getWstUnit();
268
269 source.addMetaData("header", msg(SInfoI18NStrings.CSV_META_HEADER_RESULT_LABEL));
270 source.addMetaData("calcMode", results.getCalcModeLabel());
271
272 source.addMetaData("version_label", msg(SInfoI18NStrings.CSV_META_VERSION_LABEL));
273 source.addMetaData("version", FLYS.VERSION);
274
275 source.addMetaData("user_label", msg(SInfoI18NStrings.CSV_META_USER_LABEL));
276 source.addMetaData("user", results.getUser());
277
278 final Locale locale = Resources.getLocale(this.context.getMeta());
279 final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
280 source.addMetaData("date_label", msg(SInfoI18NStrings.CSV_META_CREATION_LABEL));
281 source.addMetaData("date", df.format(new Date()));
282
283 source.addMetaData("river_label", msg(SInfoI18NStrings.CSV_META_RIVER_LABEL));
284 source.addMetaData("river", river.getName());
285 source.addMetaData("river_unit", wstUnitName);
286
287 final DoubleRange calcRange = results.getCalcRange();
288 final NumberFormat kmFormatter = getKmFormatter();
289 final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
290 source.addMetaData("range_label", msg(SInfoI18NStrings.CSV_META_RANGE_LABEL));
291 source.addMetaData("range", rangeValue);
292 }
176 } 293 }

http://dive4elements.wald.intevation.org