comparison 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
comparison
equal deleted inserted replaced
764:afc639e55261 765:f28a7eac542a
1 /**
2 *
3 */
4 package de.intevation.gnv.exports;
5
6
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.HashMap;
10 import java.util.Iterator;
11 import java.util.Map;
12
13 import org.apache.log4j.Logger;
14
15 import au.com.bytecode.opencsv.CSVWriter;
16 import de.intevation.gnv.geobackend.base.Result;
17 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
18 import de.intevation.gnv.state.exception.StateException;
19
20
21 /**
22 * @author Tim Englich <tim.englich@intevation.de>
23 *
24 */
25 public class ODVExport extends DefaultExport {
26
27 private static Logger log = Logger.getLogger(ODVExport.class);
28
29 private Collection parameters = null;
30
31 /**
32 * Constructor
33 * @param collector
34 */
35 public ODVExport(DataCollector collector, Collection parameters) {
36 super(collector);
37 this.parameters = parameters;
38 }
39
40 @Override
41 protected void writeData(Profile profile, Collection result,
42 CSVWriter writer) throws StateException {
43 Iterator<Result> it = result.iterator();
44
45 String[] header = profile.getHeader();
46 ArrayList<String> headerList = new ArrayList<String>();
47 for (int i= 0; i < header.length; i++){
48 headerList.add(header[i]);
49 }
50 ArrayList<String> paramids = new ArrayList<String>();
51
52 Map<String[], Map<String,String>> aggregatedRows = new HashMap<String[], Map<String,String>>();
53
54 String currentParameterID = "N/N";
55
56 while (it.hasNext()) {
57 Result res = it.next();
58
59 String[] key = collector.getData(res);
60 String parameterValue = res.getString("DATAVALUE");
61 String parameterID = res.getString("PARAMETER");
62
63 if (!currentParameterID.equals(parameterID)){
64 paramids.add(parameterID);
65 headerList.add(this.findParamTitle(parameters, parameterID));
66 headerList.add("QF");
67 currentParameterID = parameterID;
68 }
69
70 Map<String,String> aggregatedRow = aggregatedRows.get(key);
71 if (aggregatedRow!= null){
72 aggregatedRow.put(parameterID, parameterValue);
73 }else{
74 Map<String,String> params = new HashMap<String, String>();
75 params.put(parameterID, parameterValue);
76 aggregatedRows.put(key, params);
77 }
78 }
79
80 if (header != null){
81 writer.writeNext(headerList.toArray(header));
82 }
83
84 Iterator<String[]> rows = aggregatedRows.keySet().iterator();
85 while (rows.hasNext()){
86 String[] row = rows.next();
87 Map<String,String> params = aggregatedRows.get(row);
88 ArrayList<String> rowList = new ArrayList<String>();
89 for (int i= 0; i < row.length; i++){
90 rowList.add(row[i]);
91 }
92 for (int i = 0; i < paramids.size();i++){
93 String key = paramids.get(i);
94 String value = params.get(key);
95 if (value == null){
96 value = "";
97 }
98 rowList.add(value);
99 rowList.add("1");
100 }
101 writer.writeNext(rowList.toArray(row));
102 }
103 }
104
105 protected String findParamTitle(Collection values, String id) {
106 log.debug("find description of dataset");
107
108 if (values != null){
109 Iterator it = values.iterator();
110 while (it.hasNext()) {
111 KeyValueDescibeData data = (KeyValueDescibeData) it.next();
112
113 if (id.equals(data.getKey()))
114 return data.getValue();
115 }
116 }
117 return "";
118 }
119
120
121 }

http://dive4elements.wald.intevation.org