view artifacts/src/main/java/org/dive4elements/river/exports/fixings/ParametersExporter.java @ 9467:7d7aa54afe0c

little improvements
author gernotbelger
date Thu, 30 Aug 2018 14:09:44 +0200
parents 41567bf1e131
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.exports.fixings;

import java.io.IOException;
import java.io.OutputStream;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.Parameters;
import org.dive4elements.river.artifacts.model.fixings.FixResult;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.exports.AbstractExporter;

import au.com.bytecode.opencsv.CSVWriter;

public class ParametersExporter extends AbstractExporter {
    private static Logger log = Logger.getLogger(ParametersExporter.class);

    protected List<Parameters> parametersList;

    public ParametersExporter() {
        this.parametersList = new ArrayList<>();
    }

    @Override
    protected void addData(final Object d) {
        log.debug("ParametersExporter.addData");
        if (!(d instanceof CalculationResult)) {
            log.warn("Invalid data type");
            return;
        }

        final Object data = ((CalculationResult) d).getData();
        if (!(data instanceof FixResult)) {
            log.warn("Invalid data stored in result.");
            return;
        }

        final FixResult result = (FixResult) data;
        this.parametersList.add(result.getParameters());
    }

    @Override
    public void generate() throws IOException {
        log.debug("ParametersExporter.generate");

        if (this.facet == null) {
            throw new IOException("invalid (null) facet for exporter");
        }

        if (this.facet.equals(FIX_PARAMETERS)) {
            generateCSV();
        } else {
            throw new IOException("invalid facet for exporter: '" + this.facet + "'");
        }
    }

    @Override
    protected void writeCSVData(final CSVWriter writer) throws IOException {

        if (this.parametersList.isEmpty()) {
            return;
        }

        final Parameters parameters = this.parametersList.get(0);
        writer.writeNext(parameters.getColumnNames());

        final int numColumns = parameters.getNumberColumns();

        parameters.visit(new Parameters.Visitor() {

            String[] row = new String[numColumns];

            NumberFormat format = NumberFormat.getInstance(Resources.getLocale(ParametersExporter.this.context.getMeta()));

            @Override
            public void visit(final double[] data) {
                for (int i = 0; i < data.length; ++i) {
                    this.row[i] = this.format.format(data[i]);
                }
                writer.writeNext(this.row);
            }
        }, new double[numColumns]);

        writer.flush();
    }

    @Override
    protected void writePDF(final OutputStream out) {
        // TODO: Implement me!
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org