Mercurial > dive4elements > gnv-client
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java Tue Mar 23 14:09:03 2010 +0000 @@ -0,0 +1,121 @@ +/** + * + */ +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 ""; + } + + +}