view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java @ 9005:460fcc128794

jasper multiple
author gernotbelger
date Tue, 17 Apr 2018 13:19:56 +0200
parents 50cc99579a46
children
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.sinfo.common;

import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;

import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.river.FLYS;
import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
import org.dive4elements.river.artifacts.common.GeneralResultType;
import org.dive4elements.river.artifacts.common.I18NStrings;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
import org.dive4elements.river.artifacts.resources.Resources;
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 Gernot Belger
 */
public abstract class AbstractSInfoExporter<RESULT extends AbstractSInfoCalculationResult, RESULTS extends AbstractSInfoCalculationResults<RESULT>> extends AbstractCommonExporter<RESULT, RESULTS> {

    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";

    protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding) {
        writeCSVSoundingMetadata(writer, sounding, CSV_META_HEADER_SOUNDING);
    }

    protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding, final String mainLabel) {
        // "##METADATEN PEILUNG"
        writeCSVMetaEntry(writer, mainLabel);

        // "# Jahr der Peilung: "
        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
        // "# Aufnahmeart: "
        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
        // "# Auswerter: "
        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
        // "# Lagesystem: "
        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
        // "# Höhensystem: "
        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
        // "# ursprüngliches Höhensystem: "
        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
    }

    protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst) {
        writeCSVWaterlevelMetadata(writer, wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL);
    }

    protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst, final String mainLabel) {
        // "##METADATEN WASSERSPIEGELLAGE"
        writeCSVMetaEntry(writer, mainLabel);

        // "# Bezeichnung der Wasserspiegellage: "
        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());

        // "# Bezugspegel: "
        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());

        // "# Jahr/Zeitraum der Wasserspiegellage: "
        final int year = wst.getYear();
        if (year > 0)
            writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
    }

    @Override
    protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {

        final String calcModeLabel = results.getCalcModeLabel();
        final RiverInfo river = results.getRiver();
        final DoubleRange calcRange = results.getCalcRange();

        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);

        // "# FLYS-Version: "
        writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);

        // "# Bearbeiter: "
        writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());

        // "# Datum der Erstellung: "
        final Locale locale = Resources.getLocale(this.context.getMeta());
        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
        writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));

        // "# Gewässer: "
        writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());

        // "# Höhensystem des Flusses: "
        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());

        if (calcRange != null) {
            // "# Ort/Bereich (km): "
            writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
                    getKmFormatter().format(calcRange.getMaximumDouble()));
        }
    }

    @Override
    protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {

        /* general metadata */
        this.addJRMetaDataDefaults(source, results);

        final RiverInfo river = results.getRiver();
        final String wstUnitName = river.getWstUnit();

        source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
        source.addMetaData("river", river.getName());
        source.addMetaData("river_unit", wstUnitName);

        final DoubleRange calcRange = results.getCalcRange();
        final NumberFormat kmFormatter = getKmFormatter();
        final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
        source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
        source.addMetaData("range", rangeValue);

        /* column headings */
        // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
        // super

        // TODO: move to subs
        /* column headings */
        source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
        source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
        source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
        source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
        source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
    }

    @Override
    protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {

        source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
        source.addMetaData("calcMode", results.getCalcModeLabel());

        source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
        source.addMetaData("version", FLYS.VERSION);

        source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
        source.addMetaData("user", results.getUser());

        final Locale locale = Resources.getLocale(this.context.getMeta());
        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
        source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
        source.addMetaData("date", df.format(new Date()));

        /* column headings */
        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
    }

}

http://dive4elements.wald.intevation.org