view gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultExport.java @ 230:f68ffbe974a0

Implemented an exporter for odv and csv exports. gnv-artifacts/trunk@298 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 06 Nov 2009 10:56:18 +0000
parents
children 2ceb4bf51cba
line wrap: on
line source
package de.intevation.gnv.exports;

import org.apache.log4j.Logger;

import au.com.bytecode.opencsv.CSVWriter;

import java.util.List;
import java.util.Iterator;
import java.util.Collection;

import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.OutputStream;

import de.intevation.gnv.exports.Export.Profile;

import de.intevation.gnv.geobackend.base.Result;
import de.intevation.gnv.geobackend.base.ResultDescriptor;

import de.intevation.gnv.transition.exception.TransitionException;

/**
 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de)
 * @author Ingo Weinzierl (ingo.weinzierl@intevation.de)
 */
public class DefaultExport
implements   Export
{
    private static Logger log = Logger.getLogger(DefaultExport.class);

    protected void writeData(
        Profile    profile, 
        Collection result,
        CSVWriter  writer
    ) {
        log.debug("create content for export.");
        Iterator<Result> it = result.iterator();

        ResultDescriptor rd      = null;
        int []           indices = null;

        String[] entries = new String[profile.numberColumns()];

        while (it.hasNext()) {
            Result res = it.next();

            if (rd == null) {
                rd = res.getResultDescriptor();
                String [] names = new String[entries.length];
                for (int i = 0; i < names.length; ++i) {
                    names[i] = profile.getHeader(i);
                }
                indices = rd.getColumnIndices(names);
            }
            for (int i = 0; i < entries.length; ++i) {
                entries[i] = profile.toString(
                    i, res.getString(indices[i]));
            }
            writer.writeNext(entries);
        }
    }

    public void create(
        Profile      profile,
        OutputStream outputStream, 
        Collection   result
    )
    throws
        IOException,
        UnsupportedEncodingException,
        TransitionException 
    {
        if (result == null) {
            String msg = "No data given for generation of " +
                profile.getType() + " file.";
            log.error(msg);
            throw new TransitionException(msg);
        }

        CSVWriter writer = new CSVWriter(
            new OutputStreamWriter(
                outputStream,
                profile.getEncoding()), 
            profile.getSeparator(),
            profile.getQuoteCharacter(),
            profile.getEscapeCharacter()); 

        writeData(profile, result, writer);

        writer.close();
    }
}

http://dive4elements.wald.intevation.org