view artifacts/src/main/java/org/dive4elements/river/exports/FixWaterlevelExporter.java @ 9486:ce13a2f07290

pdf exports added for fixation+bundu (waterlevel)
author gernotbelger
date Mon, 17 Sep 2018 19:07:57 +0200
parents dd05a5eef210
children 33ce8eba9806
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * 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.exports;

import java.text.NumberFormat;

import org.apache.log4j.Logger;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.model.Gauge;
import org.dive4elements.river.utils.RiverUtils;

import au.com.bytecode.opencsv.CSVWriter;

/**
 * Generates different output formats (wst, csv, pdf) of data that resulted from
 * a waterlevel computation.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class FixWaterlevelExporter extends WaterlevelExporter {

    /** The log used in this exporter. */
    private static Logger log = Logger.getLogger(FixWaterlevelExporter.class);

    @Override
    protected void writeRow4(final CSVWriter writer, final double wqkm[], final D4EArtifact flys, final Gauge gauge, final boolean isQ) {
        if (!isQ) {
            super.writeRow4(writer, wqkm, flys, gauge, isQ);
        } else {
            final NumberFormat kmf = getKmFormatter();
            final NumberFormat wf = getWFormatter();
            final NumberFormat qf = getQFormatter();

            final String waterlevel = getWaterlevel(wqkm[1], gauge);

            writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])),
                    RiverUtils.getLocationDescription(flys, wqkm[2]) });
        }
    }

    /** Write an csv-row at gauge location. */
    @Override
    protected void writeRow6(final CSVWriter writer, final double wqkm[], final String wOrQDesc, final D4EArtifact flys, final String gaugeName,
            final Gauge gauge, final boolean isQ) {
        if (!isQ) {
            super.writeRow6(writer, wqkm, wOrQDesc, flys, gaugeName, gauge, isQ);
        } else {
            final NumberFormat kmf = getKmFormatter();
            final NumberFormat wf = getWFormatter();
            final NumberFormat qf = getQFormatter();

            final String waterlevel = getWaterlevel(wqkm[1], gauge);

            writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])), wOrQDesc,
                    RiverUtils.getLocationDescription(flys, wqkm[2]), gaugeName });
        }
    }

    /**
     * Write the header, with different headings depending on whether at a
     * gauge or at a location.
     */

    @Override
    protected void writeCSVHeader(final CSVWriter writer, final boolean atGauge, final boolean isQ) {
        if (!isQ) {
            super.writeCSVHeader(writer, atGauge, isQ);
        } else {
            log.info("WaterlevelExporter.writeCSVHeader");

            final String unit = RiverUtils.getRiver((D4EArtifact) this.master).getWstUnit().getName();

            final String headerWamPegelNeu = msg("fix.export.csv.w_at_gauge");

            if (atGauge) {
                writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
                        headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),

                        // FIXME: use WaterlevelDescriptionBuilder instead and also remove all this duplicate code.
                        (isQ ? msg(CSV_Q_DESC_HEADER, DEFAULT_CSV_Q_DESC_HEADER) : msg(CSV_W_DESC_HEADER, DEFAULT_CSV_W_DESC_HEADER)),
                        msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), msg(CSV_GAUGE_HEADER, DEFAULT_CSV_GAUGE_HEADER) });
            } else {
                writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }),
                        headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER) });
            }
        }
    }

}

http://dive4elements.wald.intevation.org