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 "";
+    }
+    
+
+}

http://dive4elements.wald.intevation.org