gernotbelger@9457: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9457: * Software engineering by Intevation GmbH gernotbelger@9457: * gernotbelger@9457: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9457: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9457: * documentation coming with Dive4Elements River for details. gernotbelger@9457: */ gernotbelger@9457: gernotbelger@9457: package org.dive4elements.river.exports; gernotbelger@9457: gernotbelger@9457: import java.text.NumberFormat; gernotbelger@9457: gernotbelger@9457: import org.apache.log4j.Logger; gernotbelger@9457: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9457: import org.dive4elements.river.model.Gauge; gernotbelger@9457: import org.dive4elements.river.utils.RiverUtils; gernotbelger@9457: gernotbelger@9457: import au.com.bytecode.opencsv.CSVWriter; gernotbelger@9457: gernotbelger@9457: /** gernotbelger@9457: * Generates different output formats (wst, csv, pdf) of data that resulted from gernotbelger@9457: * a waterlevel computation. gernotbelger@9457: * gernotbelger@9457: * @author Ingo Weinzierl gernotbelger@9457: */ gernotbelger@9457: public class FixWaterlevelExporter extends WaterlevelExporter { gernotbelger@9457: gernotbelger@9457: /** The log used in this exporter. */ gernotbelger@9457: private static Logger log = Logger.getLogger(FixWaterlevelExporter.class); gernotbelger@9457: gernotbelger@9457: @Override gernotbelger@9485: protected void writeRow4(final CSVWriter writer, final double wqkm[], final D4EArtifact flys, final Gauge gauge, final boolean isQ) { gernotbelger@9485: if (!isQ) { gernotbelger@9485: super.writeRow4(writer, wqkm, flys, gauge, isQ); gernotbelger@9459: } else { gernotbelger@9459: final NumberFormat kmf = getKmFormatter(); gernotbelger@9459: final NumberFormat wf = getWFormatter(); gernotbelger@9459: final NumberFormat qf = getQFormatter(); gernotbelger@9457: gernotbelger@9459: final String waterlevel = getWaterlevel(wqkm[1], gauge); gernotbelger@9457: gernotbelger@9459: writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])), gernotbelger@9459: RiverUtils.getLocationDescription(flys, wqkm[2]) }); gernotbelger@9459: } gernotbelger@9457: } gernotbelger@9457: gernotbelger@9457: /** Write an csv-row at gauge location. */ gernotbelger@9457: @Override gernotbelger@9485: protected void writeRow6(final CSVWriter writer, final double wqkm[], final String wOrQDesc, final D4EArtifact flys, final String gaugeName, gernotbelger@9485: final Gauge gauge, final boolean isQ) { gernotbelger@9485: if (!isQ) { gernotbelger@9485: super.writeRow6(writer, wqkm, wOrQDesc, flys, gaugeName, gauge, isQ); gernotbelger@9459: } else { gernotbelger@9459: final NumberFormat kmf = getKmFormatter(); gernotbelger@9459: final NumberFormat wf = getWFormatter(); gernotbelger@9459: final NumberFormat qf = getQFormatter(); gernotbelger@9457: gernotbelger@9459: final String waterlevel = getWaterlevel(wqkm[1], gauge); gernotbelger@9457: gernotbelger@9459: writer.writeNext(new String[] { kmf.format(wqkm[2]), wf.format(wqkm[0]), waterlevel, qf.format(RiverUtils.roundQ(wqkm[1])), wOrQDesc, gernotbelger@9485: RiverUtils.getLocationDescription(flys, wqkm[2]), gaugeName }); gernotbelger@9459: } gernotbelger@9457: } gernotbelger@9457: gernotbelger@9457: /** gernotbelger@9457: * Write the header, with different headings depending on whether at a gernotbelger@9457: * gauge or at a location. gernotbelger@9457: */ gernotbelger@9457: gernotbelger@9457: @Override gernotbelger@9457: protected void writeCSVHeader(final CSVWriter writer, final boolean atGauge, final boolean isQ) { gernotbelger@9485: if (!isQ) { gernotbelger@9459: super.writeCSVHeader(writer, atGauge, isQ); gernotbelger@9459: } else { gernotbelger@9459: log.info("WaterlevelExporter.writeCSVHeader"); gernotbelger@9457: gernotbelger@9459: final String unit = RiverUtils.getRiver((D4EArtifact) this.master).getWstUnit().getName(); gernotbelger@9457: gernotbelger@9459: final String headerWamPegelNeu = msg("fix.export.csv.w_at_gauge"); gernotbelger@9459: gernotbelger@9459: if (atGauge) { gernotbelger@9459: writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }), gernotbelger@9459: headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), gernotbelger@9459: gernotbelger@9459: // FIXME: use WaterlevelDescriptionBuilder instead and also remove all this duplicate code. gernotbelger@9459: (isQ ? msg(CSV_Q_DESC_HEADER, DEFAULT_CSV_Q_DESC_HEADER) : msg(CSV_W_DESC_HEADER, DEFAULT_CSV_W_DESC_HEADER)), gernotbelger@9459: msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), msg(CSV_GAUGE_HEADER, DEFAULT_CSV_GAUGE_HEADER) }); gernotbelger@9459: } else { gernotbelger@9459: writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }), gernotbelger@9459: headerWamPegelNeu, msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER) }); gernotbelger@9459: } gernotbelger@9457: } gernotbelger@9457: } gernotbelger@9457: gernotbelger@9457: }