teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.exports.sq; ingo@3077: ingo@3077: import java.io.OutputStream; ingo@3077: import java.util.ArrayList; ingo@3077: import java.util.List; ingo@3077: ingo@3077: import org.w3c.dom.Document; ingo@3077: ingo@3077: import au.com.bytecode.opencsv.CSVWriter; ingo@3077: teichmann@5831: import org.dive4elements.artifacts.CallContext; sascha@3392: teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; sascha@3392: teichmann@5831: import org.dive4elements.river.artifacts.model.sq.SQFractionResult; teichmann@5831: import org.dive4elements.river.artifacts.model.sq.SQResult; teichmann@5831: import org.dive4elements.river.artifacts.model.Parameters; teichmann@5831: teichmann@5831: import org.dive4elements.river.exports.AbstractExporter; ingo@3077: sascha@3392: import org.apache.log4j.Logger; ingo@3077: ingo@3077: /** ingo@3077: * @author Ingo Weinzierl ingo@3077: */ ingo@3077: public class SQRelationExporter extends AbstractExporter { ingo@3077: ingo@3077: /** Private logger. */ ingo@3077: private static final Logger logger = ingo@3077: Logger.getLogger(SQRelationExporter.class); ingo@3077: ingo@3077: ingo@3077: public static final String CSV_PARAMETER = ingo@3077: "export.sqrelation.csv.header.parameter"; ingo@3077: ingo@3077: public static final String CSV_STATION = ingo@3077: "export.sqrelation.csv.header.station"; ingo@3077: ingo@3077: public static final String CSV_KM = ingo@3077: "export.sqrelation.csv.header.km"; ingo@3077: ingo@3077: public static final String CSV_FUNCTION = ingo@3077: "export.sqrelation.csv.header.function"; ingo@3077: ingo@3077: public static final String CSV_GAUGE = ingo@3077: "export.sqrelation.csv.header.gauge"; ingo@3077: ingo@3077: public static final String CSV_COEFF_A = ingo@3077: "export.sqrelation.csv.header.coeff.a"; ingo@3077: ingo@3077: public static final String CSV_COEFF_B = ingo@3077: "export.sqrelation.csv.header.coeff.b"; ingo@3077: ingo@3077: public static final String CSV_COEFF_Q = ingo@3077: "export.sqrelation.csv.header.coeff.q"; ingo@3077: ingo@3077: public static final String CSV_COEFF_R = ingo@3077: "export.sqrelation.csv.header.coeff.r"; ingo@3077: ingo@3077: public static final String CSV_N_TOTAL = ingo@3077: "export.sqrelation.csv.header.n.total"; ingo@3077: ingo@3077: public static final String CSV_N_OUTLIERS = ingo@3077: "export.sqrelation.csv.header.n.outliers"; ingo@3077: ingo@3077: public static final String CSV_C_DUAN = ingo@3077: "export.sqrelation.csv.header.c.duan"; ingo@3077: ingo@3077: public static final String CSV_C_FERGUSON = ingo@3077: "export.sqrelation.csv.header.c.ferguson"; ingo@3077: ingo@3077: public static final String CSV_VARIANCE = ingo@3077: "export.sqrelation.csv.header.variance"; ingo@3077: ingo@3077: sascha@3392: protected List data; ingo@3077: ingo@3077: ingo@3077: public void init(Document request, OutputStream out, CallContext cc) { ingo@3077: super.init(request, out, cc); sascha@3392: data = new ArrayList(); ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: protected void addData(Object d) { ingo@3077: if (d instanceof CalculationResult) { sascha@3392: d = ((CalculationResult)d).getData(); sascha@3392: if (d instanceof SQResult []) { sascha@3392: data.add((SQResult [])d); ingo@3077: } ingo@3077: } ingo@3077: } ingo@3077: sascha@3392: protected void writeCSVHeader(CSVWriter writer) { sascha@3392: writer.writeNext(new String[] { sascha@3392: msg(CSV_KM , CSV_KM), sascha@3392: msg(CSV_PARAMETER, CSV_PARAMETER), sascha@3392: msg(CSV_COEFF_A , CSV_COEFF_A), sascha@3392: msg(CSV_COEFF_B , CSV_COEFF_B), sascha@3392: msg(CSV_N_TOTAL , CSV_N_TOTAL), sascha@3392: msg(CSV_N_OUTLIERS, CSV_N_OUTLIERS), sascha@3392: msg(CSV_VARIANCE , CSV_VARIANCE) sascha@3392: }); sascha@3392: } ingo@3077: ingo@3077: @Override ingo@3077: protected void writeCSVData(CSVWriter writer) { ingo@3077: logger.debug("writeCSVData"); ingo@3077: ingo@3077: writeCSVHeader(writer); ingo@3077: sascha@3392: for (SQResult [] results: data) { sascha@3392: for (SQResult result: results) { sascha@3392: data2CSV(writer, result); sascha@3392: } ingo@3077: } ingo@3077: } ingo@3077: sascha@3392: protected void data2CSV(CSVWriter writer, SQResult result) { sascha@3392: logger.debug("data2CSV"); ingo@3077: sascha@3552: // TODO: i18n sascha@3392: String km = String.valueOf(result.getKm()); ingo@3077: sascha@3392: for (int i = 0; i < SQResult.NUMBER_FRACTIONS; ++i) { sascha@3392: SQFractionResult fraction = result.getFraction(i); sascha@3552: sascha@3552: String name = result.getFractionName(i); sascha@3552: sascha@3552: Parameters parameters = fraction.getParameters(); sascha@3552: sascha@3552: if (parameters == null) { sascha@3392: continue; sascha@3392: } sascha@3552: sascha@3392: double a = parameters.getValue(0, "a"); sascha@3392: double b = parameters.getValue(0, "b"); sascha@3392: double sd = Math.sqrt(parameters.getValue(0, "std_dev")); sascha@3552: int o = fraction.totalNumOutliers(); sascha@3552: int t = fraction.numMeasurements() + o; sascha@3552: sascha@3392: writer.writeNext(new String[] { sascha@3392: km, sascha@3392: name, sascha@3392: String.valueOf(a), sascha@3392: String.valueOf(b), sascha@3392: String.valueOf(t), sascha@3392: String.valueOf(o), sascha@3392: String.valueOf(sd) sascha@3392: }); sascha@3392: } ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: protected void writePDF(OutputStream out) { ingo@3077: logger.debug("writePDF"); ingo@3077: logger.error("NOT IMPLEMENTED: writePDF"); ingo@3077: } ingo@3077: } ingo@3077: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :