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 :