comparison flys-artifacts/src/main/java/de/intevation/flys/exports/WaterlevelExporter.java @ 2045:d13be39cfd1d

#242 Added header with meta information into CSV exports. flys-artifacts/trunk@3531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 22 Dec 2011 13:22:55 +0000
parents f73036b991e2
children 97a25b54eea3
comparison
equal deleted inserted replaced
2044:5d6e82abe859 2045:d13be39cfd1d
1 package de.intevation.flys.exports; 1 package de.intevation.flys.exports;
2 2
3 import java.io.IOException; 3 import java.io.IOException;
4 import java.io.OutputStream; 4 import java.io.OutputStream;
5 import java.text.DateFormat;
5 import java.text.NumberFormat; 6 import java.text.NumberFormat;
6 import java.util.ArrayList; 7 import java.util.ArrayList;
8 import java.util.Date;
7 import java.util.List; 9 import java.util.List;
10 import java.util.Locale;
8 import java.util.regex.Matcher; 11 import java.util.regex.Matcher;
9 import java.util.regex.Pattern; 12 import java.util.regex.Pattern;
10 13
11 import org.w3c.dom.Document; 14 import org.w3c.dom.Document;
12 15
13 import org.apache.log4j.Logger; 16 import org.apache.log4j.Logger;
14 17
15 import au.com.bytecode.opencsv.CSVWriter; 18 import au.com.bytecode.opencsv.CSVWriter;
16 19
17 import de.intevation.artifacts.CallContext; 20 import de.intevation.artifacts.CallContext;
18 21 import de.intevation.artifacts.CallMeta;
22
23 import de.intevation.flys.artifacts.FLYSArtifact;
19 import de.intevation.flys.artifacts.WINFOArtifact; 24 import de.intevation.flys.artifacts.WINFOArtifact;
20 import de.intevation.flys.artifacts.model.CalculationResult; 25 import de.intevation.flys.artifacts.model.CalculationResult;
21 import de.intevation.flys.artifacts.model.WQCKms; 26 import de.intevation.flys.artifacts.model.WQCKms;
22 import de.intevation.flys.artifacts.model.WQKms; 27 import de.intevation.flys.artifacts.model.WQKms;
28 import de.intevation.flys.artifacts.resources.Resources;
23 29
24 import de.intevation.flys.utils.FLYSUtils; 30 import de.intevation.flys.utils.FLYSUtils;
25 import de.intevation.flys.utils.Formatter; 31 import de.intevation.flys.utils.Formatter;
26 32
27 33
43 public static final String CSV_W_HEADER = 49 public static final String CSV_W_HEADER =
44 "export.waterlevel.csv.header.w"; 50 "export.waterlevel.csv.header.w";
45 51
46 public static final String CSV_Q_HEADER = 52 public static final String CSV_Q_HEADER =
47 "export.waterlevel.csv.header.q"; 53 "export.waterlevel.csv.header.q";
54
55 public static final String CSV_META_RESULT =
56 "export.waterlevel.csv.meta.result";
57
58 public static final String CSV_META_CREATION =
59 "export.waterlevel.csv.meta.creation";
60
61 public static final String CSV_META_CALCULATIONBASE =
62 "export.waterlevel.csv.meta.calculationbase";
63
64 public static final String CSV_META_RIVER =
65 "export.waterlevel.csv.meta.river";
66
67 public static final String CSV_META_RANGE =
68 "export.waterlevel.csv.meta.range";
69
70 public static final String CSV_META_GAUGE =
71 "export.waterlevel.csv.meta.gauge";
72
73 public static final String CSV_META_Q =
74 "export.waterlevel.csv.meta.q";
75
76 public static final String CSV_META_W =
77 "export.waterlevel.csv.meta.w";
78
48 79
49 public static final Pattern NUMBERS_PATTERN = 80 public static final Pattern NUMBERS_PATTERN =
50 Pattern.compile("\\D*(\\d++.\\d*)\\D*"); 81 Pattern.compile("\\D*(\\d++.\\d*)\\D*");
51 82
52 public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km"; 83 public static final String DEFAULT_CSV_KM_HEADER = "Fluss-Km";
145 176
146 @Override 177 @Override
147 protected void writeCSVData(CSVWriter writer) { 178 protected void writeCSVData(CSVWriter writer) {
148 logger.info("WaterlevelExporter.writeData"); 179 logger.info("WaterlevelExporter.writeData");
149 180
181 writeCSVMeta(writer);
150 writeCSVHeader(writer); 182 writeCSVHeader(writer);
151 183
152 for (WQKms[] tmp: data) { 184 for (WQKms[] tmp: data) {
153 for (WQKms wqkms: tmp) { 185 for (WQKms wqkms: tmp) {
154 wQKms2CSV(writer, wqkms); 186 wQKms2CSV(writer, wqkms);
155 } 187 }
156 } 188 }
189 }
190
191
192 protected void writeCSVMeta(CSVWriter writer) {
193 logger.info("WaterlevelExporter.writeCSVMeta");
194
195 CallMeta meta = context.getMeta();
196
197 FLYSArtifact flys = (FLYSArtifact) master;
198
199 writer.writeNext(new String[] {
200 Resources.getMsg(
201 meta,
202 CSV_META_RESULT,
203 CSV_META_RESULT,
204 new Object[] { FLYSUtils.getRivername(flys) })
205 });
206
207 Locale locale = Resources.getLocale(meta);
208 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
209
210 writer.writeNext(new String[] {
211 Resources.getMsg(
212 meta,
213 CSV_META_CREATION,
214 CSV_META_CREATION,
215 new Object[] { df.format(new Date()) })
216 });
217
218 writer.writeNext(new String[] {
219 Resources.getMsg(
220 meta,
221 CSV_META_CALCULATIONBASE,
222 CSV_META_CALCULATIONBASE,
223 new Object[] { "" }) // TODO what is required at this place?
224 });
225
226 writer.writeNext(new String[] {
227 Resources.getMsg(
228 meta,
229 CSV_META_RIVER,
230 CSV_META_RIVER,
231 new Object[] { FLYSUtils.getRivername(flys) })
232 });
233
234 double[] kms = FLYSUtils.getKmRange(flys);
235 writer.writeNext(new String[] {
236 Resources.getMsg(
237 meta,
238 CSV_META_RANGE,
239 CSV_META_RANGE,
240 new Object[] { kms[0], kms[kms.length-1] })
241 });
242
243 writer.writeNext(new String[] {
244 Resources.getMsg(
245 meta,
246 CSV_META_GAUGE,
247 CSV_META_GAUGE,
248 new Object[] { FLYSUtils.getGaugename(flys) })
249 });
250
251 FLYSUtils.WQ_MODE wq = FLYSUtils.getWQMode(flys);
252 if (wq == FLYSUtils.WQ_MODE.QFREE || wq == FLYSUtils.WQ_MODE.QGAUGE) {
253 double[] qs = FLYSUtils.getQs(flys);
254
255 String lower = "";
256 String upper = "";
257
258 if (qs != null && qs.length > 0) {
259 lower = String.valueOf(qs[0]);
260 upper = String.valueOf(qs[qs.length-1]);
261 }
262 else {
263 logger.warn("Could not determine Q range!");
264 }
265
266 writer.writeNext(new String[] {
267 Resources.getMsg(
268 meta,
269 CSV_META_Q,
270 CSV_META_Q,
271 new Object[] { lower, upper })
272 });
273 }
274 else {
275 double[] ws = FLYSUtils.getWs(flys);
276
277 String lower = "";
278 String upper = "";
279
280 if (ws != null && ws.length > 0) {
281 lower = String.valueOf(ws[0]);
282 upper = String.valueOf(ws[ws.length-1]);
283 }
284 else {
285 logger.warn("Could not determine W range!");
286 }
287
288 writer.writeNext(new String[] {
289 Resources.getMsg(
290 meta,
291 CSV_META_W,
292 CSV_META_W,
293 new Object[] { lower, upper })
294 });
295 }
296
297 writer.writeNext(new String[] { "" });
157 } 298 }
158 299
159 300
160 protected void writeCSVHeader(CSVWriter writer) { 301 protected void writeCSVHeader(CSVWriter writer) {
161 logger.info("WaterlevelExporter.writeCSVHeader"); 302 logger.info("WaterlevelExporter.writeCSVHeader");

http://dive4elements.wald.intevation.org