Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java @ 9215:0fc9c82e744e
work on collison, flood_duration
author | gernotbelger |
---|---|
date | Tue, 03 Jul 2018 17:00:48 +0200 |
parents | a4121ec450d6 |
children | 740d65e4aa14 |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.common; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Locale; import org.apache.commons.lang.math.DoubleRange; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.FLYS; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings; import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; import org.dive4elements.river.artifacts.sinfo.util.WstInfo; import au.com.bytecode.opencsv.CSVWriter; /** * @author Domenico Nardi Tironi * */ public final class ExportContextCSV extends AbstractExportContext { private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator"; private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding"; private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year"; private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type"; private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj"; private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel"; private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original"; private final CSVWriter writer; private final AbstractCalculationResults<?> results; public ExportContextCSV(final CallContext context, final CSVWriter writer, final AbstractCalculationResults<?> results) { super(context, results); this.writer = writer; this.results = results; } public final void writeCSVMetaEntry(final String message, final Object... messageArgs) { final CallMeta meta = getContext().getMeta(); this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) }); } public void writeBlankLine() { writeCSVLine(new String[] { "" }); } // *** CUSTOM STUFF that is used multiple times ***/// public final void writeCSVSoundingMetadata(final BedHeightInfo sounding) { // "##METADATEN PEILUNG" writeCSVSoundingMetadata(sounding, CSV_META_HEADER_SOUNDING); } public void writeCSVLine(final String[] line) { this.writer.writeNext(line); } public String formatCsvHeader(final IResultType type) { return msg(type.getCsvHeader()); } public final void writeCSVGlobalMetadataDefaults() { // TODO: results as member final String calcModeLabel = this.results.getCalcModeLabel(); final RiverInfo river = this.results.getRiver(); final DoubleRange calcRange = this.results.getCalcRange(); writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel); // "# FLYS-Version: " writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION); // "# Bearbeiter: " writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), this.results.getUser()); // "# Datum der Erstellung: " final Locale locale = Resources.getLocale(getContext().getMeta()); final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date())); // "# Gewässer: " writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName()); // "# Höhensystem des Flusses: " writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit()); if (calcRange != null) { // "# Ort/Bereich (km): " writeCSVMetaEntry(I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()), getKmFormatter().format(calcRange.getMaximumDouble())); } } public final void writeCSVWaterlevelMetadata(final WstInfo wst) { writeCSVWaterlevelMetadata(wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL); // default Label; used in 99% } public final void writeCSVWaterlevelMetadata(final WstInfo wst, final String mainLabel) { // "##METADATEN WASSERSPIEGELLAGE" writeCSVMetaEntry(mainLabel); // "# Bezeichnung der Wasserspiegellage: " writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel()); // "# Bezugspegel: " writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge()); // "# Jahr/Zeitraum der Wasserspiegellage: " final int year = wst.getYear(); if (year > 0) writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year)); } /** * Formats header with unit: msg [unit] */ public String msgUnitCSV(final IResultType typeWithUnit) { // TODO: use generic Type! final String unit = msg(typeWithUnit.getUnit()); return msgUnitCSV(typeWithUnit, unit); } public String msgUnitCSV(final IResultType type, final String unit) { final String msg = msg(type.getCsvHeader()); return String.format("%s [%s]", msg, unit); } public void writeCSVSoundingMetadata(final BedHeightInfo sounding, final String label) { // "##METADATEN PEILUNG" writeCSVMetaEntry(label); // "# Jahr der Peilung: " writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear())); // "# Aufnahmeart: " writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_TYPE, sounding.getType()); // "# Auswerter: " writeCSVMetaEntry(CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy()); // "# Lagesystem: " writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem()); // "# Höhensystem: " writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit()); // "# ursprüngliches Höhensystem: " writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit()); } public final String msgUnitLabel(final IResultType typeWithUnit, final String label) { final String msg = msg(typeWithUnit.getCsvHeader()); final String unit = msg(typeWithUnit.getUnit()); return String.format("%s [%s] (%s)", msg, unit, label); } public void writeTitleForTabs(final String tabTitleMsg, final int colSize) { final Collection<String> title = new ArrayList<>(colSize); title.add(msg("export_csv_title") + msg(tabTitleMsg)); writeCSVLine(title.toArray(new String[colSize])); } }