Mercurial > dive4elements > gnv-client
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 ""; } }