view gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java @ 794:d0967fdee36f

Repaired JavaDoc in Export package. gnv-artifacts/trunk@876 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 31 Mar 2010 12:18:03 +0000
parents b1f5f2a8840f
children db5b04ecb426
line wrap: on
line source
package de.intevation.gnv.exports;

import au.com.bytecode.opencsv.CSVWriter;

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

import de.intevation.gnv.state.describedata.KeyValueDescibeData;

import de.intevation.gnv.state.exception.StateException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.log4j.Logger;

/**
 * This class is used to create a specific export document which is similar to
 * an CSV document.
 *
 * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a>
 */
public class ODVExport extends DefaultExport {

    /**
     * Logger used for logging via log4j.
     */
    private static Logger log = Logger.getLogger(ODVExport.class);

    /**
     * Collection of parameters.
     */
    private Collection parameters = null;

    /**
     * Constructor
     * @param collector DataCollector used to extract the required data.
     * @param parameters A collection of parameters to be displayed in the
     * export.
     */
    public ODVExport(DataCollector collector, Collection parameters) {
        super(collector);
        this.parameters = parameters;
    }

    /**
     * @see de.intevation.gnv.exports.Export#writeData(Profile, Collection,
     * CSVWriter)
     */
    @Override
    protected void writeData(Profile profile, Collection result,
                             CSVWriter writer) throws StateException {
        Iterator<Result> it = result.iterator();

        String[] header = profile.getHeader();
        ArrayList<String> headerList = new ArrayList<String>();
        for (int i= 0; i < header.length; i++){
            headerList.add(header[i]);
        }
        ArrayList<String> paramids = new ArrayList<String>();

        Map<String[], Map<String,String>> aggregatedRows = new HashMap<String[],  Map<String,String>>();

        String currentParameterID = "N/N";

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

            String[] key = collector.getData(res);
            String parameterValue = res.getString("DATAVALUE");
            String parameterID = res.getString("PARAMETER");

            if (!currentParameterID.equals(parameterID)){
                paramids.add(parameterID);
                headerList.add(this.findParamTitle(parameters, parameterID));
                headerList.add("QF");
                currentParameterID = parameterID;
            }

            Map<String,String> aggregatedRow = aggregatedRows.get(key);
            if (aggregatedRow!= null){
                aggregatedRow.put(parameterID, parameterValue);
            }else{
                Map<String,String> params = new HashMap<String, String>();
                params.put(parameterID, parameterValue);
                aggregatedRows.put(key, params);
            }
        }

        if (header != null){
            writer.writeNext(headerList.toArray(header));
        }

        Iterator<String[]> rows = aggregatedRows.keySet().iterator();
        while (rows.hasNext()){
            String[] row = rows.next();
            Map<String,String> params = aggregatedRows.get(row);
            ArrayList<String> rowList = new ArrayList<String>();
            for (int i= 0; i < row.length; i++){
                rowList.add(row[i]);
            }
            for (int i = 0; i < paramids.size();i++){
                String key = paramids.get(i);
                String value = params.get(key);
                if (value == null){
                    value = "";
                }
                rowList.add(value);
                rowList.add("1");
            }
            writer.writeNext(rowList.toArray(row));
        }
    }

    /**
     * This method is used to search specific value coresponding to its key
     * <code>id</code> and return its description.
     *
     * @param values Collection of parameters.
     * @param id Key used to find the value.
     *
     * @return Description of searched value.
     */
    protected String findParamTitle(Collection values, String id) {
        log.debug("find description of dataset");

        if (values != null){
            Iterator it = values.iterator();
            while (it.hasNext()) {
                KeyValueDescibeData data = (KeyValueDescibeData) it.next();

                if (id.equals(data.getKey()))
                    return data.getValue();
            }
        }
        return "";
    }


}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org