teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
teichmann@5863: * Software engineering by Intevation GmbH
teichmann@5863: *
teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3)
teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the
teichmann@5994: * documentation coming with Dive4Elements River for details.
teichmann@5863: */
teichmann@5863:
teichmann@5831: package org.dive4elements.river.exports;
ingo@2702:
ingo@2702: import java.io.OutputStream;
ingo@2702: import java.text.NumberFormat;
ingo@2702: import java.util.ArrayList;
ingo@2702: import java.util.List;
ingo@2702:
ingo@2702: import org.apache.log4j.Logger;
teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact;
teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult;
teichmann@5831: import org.dive4elements.river.artifacts.model.FlowVelocityData;
gernotbelger@9312: import org.dive4elements.river.utils.Formatter;
teichmann@5865: import org.dive4elements.river.utils.RiverUtils;
ingo@2702:
gernotbelger@9312: import au.com.bytecode.opencsv.CSVWriter;
ingo@2702:
ingo@2702: /**
ingo@2702: * @author Ingo Weinzierl
ingo@2702: */
ingo@2702: public class FlowVelocityExporter extends AbstractExporter {
ingo@2702:
gernotbelger@9312: private static final Logger log = Logger.getLogger(FlowVelocityExporter.class);
ingo@2702:
gernotbelger@9312: public static final String CSV_KM = "export.flow_velocity.csv.header.km";
ingo@2702:
gernotbelger@9312: public static final String CSV_V_TOTAL = "export.flow_velocity.csv.header.v_total";
ingo@2702:
gernotbelger@9312: public static final String CSV_V_MAIN = "export.flow_velocity.csv.header.v_main";
ingo@2702:
gernotbelger@9312: public static final String CSV_TAU_MAIN = "export.flow_velocity.csv.header.tau_main";
gernotbelger@9312:
gernotbelger@9312: public static final String CSV_Q = "common.export.csv.header.q";
gernotbelger@9312:
gernotbelger@9312: public static final String CSV_LOCATIONS = "export.flow_velocity.csv.header.locations";
ingo@2702:
ingo@2702: protected List data;
ingo@2702:
teichmann@7077: public FlowVelocityExporter() {
gernotbelger@9312: this.data = new ArrayList<>();
ingo@2702: }
ingo@2702:
ingo@2702: @Override
ingo@2702: protected void addData(Object d) {
ingo@2702: if (d instanceof CalculationResult) {
ingo@2702: d = ((CalculationResult) d).getData();
ingo@2702:
ingo@2702: if (d instanceof FlowVelocityData[]) {
teichmann@8202: log.debug("Add new data of type FlowVelocityData");
gernotbelger@9312: this.data.add((FlowVelocityData[]) d);
ingo@2702: }
ingo@2702: }
ingo@2702: }
ingo@2702:
ingo@2702: @Override
gernotbelger@9312: protected void writeCSVData(final CSVWriter writer) {
teichmann@8202: log.info("FlowVelocityExporter.writeCSVData");
gernotbelger@9312: log.debug("CSV gets " + this.data.size() + " FlowVelocityData objects.");
ingo@2702:
ingo@2702: writeCSVHeader(writer);
ingo@2702:
gernotbelger@9312: for (final FlowVelocityData[] d : this.data) {
ingo@2702: data2CSV(writer, d);
ingo@2702: }
ingo@2702: }
ingo@2702:
gernotbelger@9312: protected void writeCSVHeader(final CSVWriter writer) {
gernotbelger@9312: writer.writeNext(new String[] { msg(CSV_KM, CSV_KM), msg(CSV_V_MAIN, CSV_V_MAIN), msg(CSV_V_TOTAL, CSV_V_TOTAL), msg(CSV_TAU_MAIN, CSV_TAU_MAIN),
gernotbelger@9312: msg(CSV_Q, CSV_Q), msg(CSV_LOCATIONS, CSV_LOCATIONS) });
ingo@2702: }
ingo@2702:
gernotbelger@9312: protected void data2CSV(final CSVWriter writer, final FlowVelocityData[] fData) {
teichmann@8202: log.debug("Add next FlowVelocityData to CSV");
ingo@2702:
gernotbelger@9312: final D4EArtifact flys = (D4EArtifact) this.master;
ingo@2703:
gernotbelger@9312: for (final FlowVelocityData data : fData) {
ingo@2702: for (int i = 0, n = data.size(); i < n; i++) {
gernotbelger@9312: final NumberFormat kmF = Formatter.getFlowVelocityKM(this.context);
gernotbelger@9312: final NumberFormat valF = Formatter.getFlowVelocityValues(this.context);
gernotbelger@9312: final NumberFormat qF = Formatter.getFlowVelocityQ(this.context);
ingo@2702:
andre@8616: String vMain = "";
andre@8616: String vTotal = "";
andre@8616:
gernotbelger@9312: if (data.getType().equals("main") || data.getType().equals("main_total")) {
andre@8616: vMain = valF.format(data.getVMain(i));
andre@8614: }
gernotbelger@9312: if (data.getType().equals("total") || data.getType().equals("main_total")) {
andre@8616: vTotal = valF.format(data.getVTotal(i));
andre@8616: }
gernotbelger@9312: writer.writeNext(new String[] { kmF.format(data.getKM(i)), vMain, vTotal, valF.format(data.getTauMain(i)),
gernotbelger@9312: qF.format(data.getQ(i)) + "=" + data.getZone(), RiverUtils.getLocationDescription(flys, data.getKM(i)), });
ingo@2702: }
ingo@2702: }
ingo@2702: }
ingo@2702:
ingo@2702: @Override
gernotbelger@9312: protected void writePDF(final OutputStream out) {
teichmann@8202: log.error("TODO: Implement FlowVelocityExporter.writePDF");
ingo@2702: }
ingo@2702: }
ingo@2702: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :