Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/WDifferencesExporter.java @ 1161:9bdf738abbad
Added CSV Exporter for WDifferences.
flys-artifacts/trunk@2697 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 12 Sep 2011 09:06:05 +0000 |
parents | |
children | 2c643a643026 |
comparison
equal
deleted
inserted
replaced
1160:efe1b8545f5c | 1161:9bdf738abbad |
---|---|
1 package de.intevation.flys.exports; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.OutputStream; | |
5 import java.text.NumberFormat; | |
6 import java.util.ArrayList; | |
7 import java.util.List; | |
8 | |
9 import org.w3c.dom.Document; | |
10 | |
11 import org.apache.log4j.Logger; | |
12 | |
13 import au.com.bytecode.opencsv.CSVWriter; | |
14 | |
15 import de.intevation.artifacts.CallContext; | |
16 | |
17 import de.intevation.flys.artifacts.model.CalculationResult; | |
18 import de.intevation.flys.artifacts.model.WKms; | |
19 | |
20 import de.intevation.flys.utils.Formatter; | |
21 | |
22 /** | |
23 * (CSV)Exporter for WDifferences. | |
24 */ | |
25 public class WDifferencesExporter extends AbstractExporter { | |
26 | |
27 /** The logger used in this exporter. */ | |
28 private static Logger logger = Logger.getLogger(WDifferencesExporter.class); | |
29 | |
30 | |
31 public static final String CSV_KM_HEADER = | |
32 "export.w_differences.csv.header.km"; | |
33 | |
34 public static final String CSV_W_HEADER = | |
35 "export.w_differences.csv.header.w"; | |
36 | |
37 public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km"; | |
38 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; | |
39 | |
40 | |
41 /** The storage that contains all WKms objects for the different facets. */ | |
42 protected List<WKms[]> data; | |
43 | |
44 | |
45 public void init(Document request, OutputStream out, CallContext context) { | |
46 logger.debug("WDifferencesExporter.init"); | |
47 | |
48 super.init(request, out, context); | |
49 | |
50 this.data = new ArrayList<WKms[]>(); | |
51 } | |
52 | |
53 | |
54 /** | |
55 * Genereate data in csv format. | |
56 */ | |
57 @Override | |
58 public void generate() | |
59 throws IOException | |
60 { | |
61 logger.debug("WDifferencesExporter.generate"); | |
62 | |
63 if (facet == null) { | |
64 throw new IOException("invalid (null) facet for exporter"); | |
65 } | |
66 else if (facet.equals(AbstractExporter.FACET_CSV)) { | |
67 generateCSV(); | |
68 } | |
69 else { | |
70 throw new IOException("invalid facet (" + facet + ") for exporter"); | |
71 } | |
72 } | |
73 | |
74 | |
75 /** | |
76 * Adds given data. | |
77 * @param d either a WKms or a CalculationResult to add to data. | |
78 */ | |
79 @Override | |
80 protected void addData(Object d) { | |
81 if (d instanceof CalculationResult) { | |
82 d = ((CalculationResult)d).getData(); | |
83 if (d instanceof WKms []) { | |
84 data.add((WKms [])d); | |
85 } | |
86 } | |
87 else if (d instanceof WKms) { | |
88 data.add(new WKms[] { (WKms) d }); | |
89 } | |
90 } | |
91 | |
92 | |
93 /** | |
94 * Lets writer write all data (including header). | |
95 * @param writer Writer to write data with. | |
96 */ | |
97 @Override | |
98 protected void writeCSVData(CSVWriter writer) { | |
99 logger.info("WDifferencesExporter.writeData"); | |
100 | |
101 writeCSVHeader(writer); | |
102 | |
103 for (WKms[] tmp: data) { | |
104 for (WKms wkms: tmp) { | |
105 wKms2CSV(writer, wkms); | |
106 } | |
107 } | |
108 } | |
109 | |
110 | |
111 /** | |
112 * Lets csvwriter write the header (first line in file). | |
113 * @param write Writer to write header with. | |
114 */ | |
115 protected void writeCSVHeader(CSVWriter writer) { | |
116 logger.info("WDifferencesExporter.writeCSVHeader"); | |
117 | |
118 writer.writeNext(new String[] { | |
119 msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), | |
120 msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER) | |
121 }); | |
122 } | |
123 | |
124 | |
125 protected void wKms2CSV(CSVWriter writer, WKms wkms) { | |
126 logger.debug("WDifferencesExporter.wQKms2CSV"); | |
127 | |
128 NumberFormat kmf = getKmFormatter(); | |
129 NumberFormat wf = getWFormatter(); | |
130 int size = wkms.size(); | |
131 | |
132 for (int i = 0; i < size; i ++) { | |
133 | |
134 writer.writeNext(new String[] { | |
135 kmf.format(wkms.getKm(i)), | |
136 wf.format(wkms.getW(i)) | |
137 }); | |
138 } | |
139 } | |
140 | |
141 | |
142 /** | |
143 * Returns the number formatter for kilometer values. | |
144 * | |
145 * @return the number formatter for kilometer values. | |
146 */ | |
147 protected NumberFormat getKmFormatter() { | |
148 return Formatter.getWaterlevelKM(context); | |
149 } | |
150 | |
151 | |
152 /** | |
153 * Returns the number formatter for W values. | |
154 * | |
155 * @return the number formatter for W values. | |
156 */ | |
157 protected NumberFormat getWFormatter() { | |
158 return Formatter.getWaterlevelW(context); | |
159 } | |
160 } | |
161 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |