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.fixings; sascha@3217: sascha@3217: import java.io.IOException; sascha@3217: import java.io.OutputStream; sascha@3217: import java.text.NumberFormat; sascha@3217: import java.util.ArrayList; sascha@3217: import java.util.List; sascha@3217: sascha@3217: import org.apache.log4j.Logger; gernotbelger@9467: import org.dive4elements.river.artifacts.model.CalculationResult; gernotbelger@9467: import org.dive4elements.river.artifacts.model.Parameters; gernotbelger@9467: import org.dive4elements.river.artifacts.model.fixings.FixResult; gernotbelger@9467: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9467: import org.dive4elements.river.exports.AbstractExporter; sascha@3217: gernotbelger@9467: import au.com.bytecode.opencsv.CSVWriter; gernotbelger@9467: gernotbelger@9467: public class ParametersExporter extends AbstractExporter { sascha@3778: private static Logger log = Logger.getLogger(ParametersExporter.class); sascha@3217: sascha@3217: protected List parametersList; sascha@3217: teichmann@7077: public ParametersExporter() { gernotbelger@9467: this.parametersList = new ArrayList<>(); sascha@3217: } sascha@3217: sascha@3217: @Override gernotbelger@9467: protected void addData(final Object d) { sascha@3217: log.debug("ParametersExporter.addData"); sascha@3217: if (!(d instanceof CalculationResult)) { sascha@3217: log.warn("Invalid data type"); sascha@3217: return; sascha@3217: } sascha@3217: gernotbelger@9467: final Object data = ((CalculationResult) d).getData(); gernotbelger@9467: if (!(data instanceof FixResult)) { sascha@3217: log.warn("Invalid data stored in result."); sascha@3417: return; sascha@3217: } sascha@3417: gernotbelger@9467: final FixResult result = (FixResult) data; gernotbelger@9467: this.parametersList.add(result.getParameters()); sascha@3217: } sascha@3217: sascha@3217: @Override gernotbelger@9467: public void generate() throws IOException { sascha@3223: log.debug("ParametersExporter.generate"); sascha@3223: gernotbelger@9467: if (this.facet == null) { sascha@3223: throw new IOException("invalid (null) facet for exporter"); sascha@3223: } sascha@3223: gernotbelger@9467: if (this.facet.equals(FIX_PARAMETERS)) { sascha@3223: generateCSV(); gernotbelger@9467: } else { gernotbelger@9467: throw new IOException("invalid facet for exporter: '" + this.facet + "'"); sascha@3223: } sascha@3223: } sascha@3223: sascha@3223: @Override sascha@3217: protected void writeCSVData(final CSVWriter writer) throws IOException { sascha@3217: gernotbelger@9467: if (this.parametersList.isEmpty()) { sascha@3217: return; sascha@3217: } sascha@3217: gernotbelger@9467: final Parameters parameters = this.parametersList.get(0); sascha@3217: writer.writeNext(parameters.getColumnNames()); sascha@3217: sascha@3217: final int numColumns = parameters.getNumberColumns(); sascha@3217: sascha@3217: parameters.visit(new Parameters.Visitor() { sascha@3217: gernotbelger@9467: String[] row = new String[numColumns]; sascha@3217: gernotbelger@9467: NumberFormat format = NumberFormat.getInstance(Resources.getLocale(ParametersExporter.this.context.getMeta())); sascha@3217: sascha@3217: @Override gernotbelger@9467: public void visit(final double[] data) { sascha@3217: for (int i = 0; i < data.length; ++i) { gernotbelger@9467: this.row[i] = this.format.format(data[i]); sascha@3217: } gernotbelger@9467: writer.writeNext(this.row); sascha@3217: } sascha@3217: }, new double[numColumns]); sascha@3217: sascha@3217: writer.flush(); sascha@3217: } sascha@3217: sascha@3217: @Override gernotbelger@9467: protected void writePDF(final OutputStream out) { sascha@3217: // TODO: Implement me! sascha@3217: } sascha@3217: } sascha@3217: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :