view gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java @ 765:f28a7eac542a

Integrated valid ODV-Export to the GNV-Artifacts gnv-artifacts/trunk@821 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 23 Mar 2010 14:09:03 +0000
parents
children a0e63136954e
line wrap: on
line source
/**
 *
 */
package de.intevation.gnv.exports;


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;

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;


/**
 * @author Tim Englich <tim.englich@intevation.de>
 *
 */
public class ODVExport extends DefaultExport {

    private static Logger log = Logger.getLogger(ODVExport.class);
    
    private Collection parameters = null;
    
    /**
     * Constructor
     * @param collector
     */
    public ODVExport(DataCollector collector, Collection parameters) {
        super(collector);
        this.parameters = parameters;
    }

    @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));
        }
    }
    
    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 "";
    }
    

}

http://dive4elements.wald.intevation.org