comparison gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java @ 800:db5b04ecb426

ISSUE215: Improved ODV-Export. now all Columns which have identical values but different Parameters will be merged to one row. gnv-artifacts/trunk@882 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 06 Apr 2010 13:07:11 +0000
parents d0967fdee36f
children 41a7c49b5cb4
comparison
equal deleted inserted replaced
799:feeaf5aec552 800:db5b04ecb426
1 package de.intevation.gnv.exports; 1 package de.intevation.gnv.exports;
2
3 import au.com.bytecode.opencsv.CSVWriter;
4
5 import de.intevation.gnv.geobackend.base.Result;
6
7 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
8
9 import de.intevation.gnv.state.exception.StateException;
10 2
11 import java.util.ArrayList; 3 import java.util.ArrayList;
12 import java.util.Collection; 4 import java.util.Collection;
13 import java.util.HashMap; 5 import java.util.HashMap;
14 import java.util.Iterator; 6 import java.util.Iterator;
15 import java.util.Map; 7 import java.util.Map;
16 8
17 import org.apache.log4j.Logger; 9 import org.apache.log4j.Logger;
10
11 import au.com.bytecode.opencsv.CSVWriter;
12 import de.intevation.gnv.geobackend.base.Result;
13 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
14 import de.intevation.gnv.state.exception.StateException;
18 15
19 /** 16 /**
20 * This class is used to create a specific export document which is similar to 17 * This class is used to create a specific export document which is similar to
21 * an CSV document. 18 * an CSV document.
22 * 19 *
59 for (int i= 0; i < header.length; i++){ 56 for (int i= 0; i < header.length; i++){
60 headerList.add(header[i]); 57 headerList.add(header[i]);
61 } 58 }
62 ArrayList<String> paramids = new ArrayList<String>(); 59 ArrayList<String> paramids = new ArrayList<String>();
63 60
64 Map<String[], Map<String,String>> aggregatedRows = new HashMap<String[], Map<String,String>>(); 61 Map<StringArrayKey, Map<String,String>> aggregatedRows = new HashMap<StringArrayKey, Map<String,String>>();
65 62
66 String currentParameterID = "N/N"; 63 String currentParameterID = "N/N";
67 64
68 while (it.hasNext()) { 65 while (it.hasNext()) {
69 Result res = it.next(); 66 Result res = it.next();
70 67
71 String[] key = collector.getData(res); 68 String[] value = collector.getData(res);
69 StringArrayKey key = new StringArrayKey(value);
72 String parameterValue = res.getString("DATAVALUE"); 70 String parameterValue = res.getString("DATAVALUE");
73 String parameterID = res.getString("PARAMETER"); 71 String parameterID = res.getString("PARAMETER");
74 72
75 if (!currentParameterID.equals(parameterID)){ 73 if (!currentParameterID.equals(parameterID)){
76 paramids.add(parameterID); 74 paramids.add(parameterID);
91 89
92 if (header != null){ 90 if (header != null){
93 writer.writeNext(headerList.toArray(header)); 91 writer.writeNext(headerList.toArray(header));
94 } 92 }
95 93
96 Iterator<String[]> rows = aggregatedRows.keySet().iterator(); 94 Iterator<StringArrayKey> rows = aggregatedRows.keySet().iterator();
97 while (rows.hasNext()){ 95 while (rows.hasNext()){
98 String[] row = rows.next(); 96 StringArrayKey row = rows.next();
99 Map<String,String> params = aggregatedRows.get(row); 97 Map<String,String> params = aggregatedRows.get(row);
100 ArrayList<String> rowList = new ArrayList<String>(); 98 ArrayList<String> rowList = new ArrayList<String>();
101 for (int i= 0; i < row.length; i++){ 99 String[] rowArray = row.getValue();
102 rowList.add(row[i]); 100 for (int i= 0; i < rowArray.length; i++){
101 rowList.add(rowArray[i]);
103 } 102 }
104 for (int i = 0; i < paramids.size();i++){ 103 for (int i = 0; i < paramids.size();i++){
105 String key = paramids.get(i); 104 String key = paramids.get(i);
106 String value = params.get(key); 105 String value = params.get(key);
107 if (value == null){ 106 if (value == null){
108 value = ""; 107 value = "";
109 } 108 }
110 rowList.add(value); 109 rowList.add(value);
111 rowList.add("1"); 110 rowList.add("1");
112 } 111 }
113 writer.writeNext(rowList.toArray(row)); 112 writer.writeNext(rowList.toArray(rowArray));
114 } 113 }
115 } 114 }
116 115
117 /** 116 /**
118 * This method is used to search specific value coresponding to its key 117 * This method is used to search specific value coresponding to its key

http://dive4elements.wald.intevation.org