ingo@3227: package de.intevation.flys.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:
ingo@3077: import de.intevation.artifacts.CallContext;
ingo@3077:
ingo@3077: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@3392:
sascha@3392: import de.intevation.flys.artifacts.model.sq.SQFractionResult;
sascha@3392: import de.intevation.flys.artifacts.model.sq.SQResult;
sascha@3392: import de.intevation.flys.artifacts.model.Parameters;
sascha@3392:
ingo@3227: import de.intevation.flys.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 :