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