comparison flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java @ 2258:ea173e4c07c7

Added a CSV export for historical discharge curves. flys-artifacts/trunk@3913 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 06 Feb 2012 08:36:26 +0000
parents
children 89ca1e8572e4
comparison
equal deleted inserted replaced
2257:86685feb5b1c 2258:ea173e4c07c7
1 package de.intevation.flys.exports;
2
3 import java.io.OutputStream;
4 import java.text.NumberFormat;
5 import java.text.DateFormat;
6 import java.util.ArrayList;
7 import java.util.Date;
8 import java.util.List;
9
10 import org.w3c.dom.Document;
11
12 import org.apache.log4j.Logger;
13
14 import au.com.bytecode.opencsv.CSVWriter;
15
16 import de.intevation.artifacts.CallContext;
17 import de.intevation.artifacts.CallMeta;
18
19 import de.intevation.flys.artifacts.FLYSArtifact;
20 import de.intevation.flys.artifacts.model.CalculationResult;
21 import de.intevation.flys.artifacts.model.Timerange;
22 import de.intevation.flys.artifacts.model.WQTimerange;
23 import de.intevation.flys.artifacts.resources.Resources;
24 import de.intevation.flys.utils.FLYSUtils;
25 import de.intevation.flys.utils.Formatter;
26
27
28 /**
29 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
30 */
31 public class HistoricalDischargeCurveExporter extends AbstractExporter {
32
33 private static final Logger logger =
34 Logger.getLogger(HistoricalDischargeCurveExporter.class);
35
36
37 public static final String CSV_TIMERANGE_HEADER =
38 "export.historical.discharge.csv.header.timerange";
39
40 public static final String CSV_WATERLEVEL_HEADER =
41 "export.historical.discharge.csv.header.waterlevel";
42
43 public static final String CSV_DISCHARGE_HEADER =
44 "export.historical.discharge.csv.header.discharge";
45
46 public static final String CSV_DIFF_HEADER =
47 "export.historical.discharge.csv.header.diff";
48
49 public static final String CSV_GAUGENAME_HEADER =
50 "export.historical.discharge.csv.header.gaugename";
51
52
53 protected List<WQTimerange[]> data;
54
55
56 public void init(Document request, OutputStream out, CallContext cc) {
57 super.init(request, out, cc);
58
59 data = new ArrayList<WQTimerange[]>();
60 }
61
62
63 @Override
64 protected void addData(Object d) {
65 logger.debug("Add data of class: " + d.getClass());
66
67 if (d instanceof CalculationResult) {
68 d = ((CalculationResult) d).getData();
69
70 logger.debug("Internal data of CalculationResult: " + d.getClass());
71
72 if (d instanceof WQTimerange[]) {
73 logger.debug("Add new data of type WQTimerange");
74 data.add((WQTimerange[]) d);
75 }
76 }
77 }
78
79
80 @Override
81 protected void writeCSVData(CSVWriter writer) {
82 logger.info("HistoricalDischargeCurveExporter.writeCSVData");
83 logger.debug("CSV gets " + data.size() + " WQTimerange[] objects.");
84
85 writeCSVHeader(writer);
86
87 for (WQTimerange[] arr: data) {
88 for (WQTimerange wqt: arr) {
89 wqt2CSV(writer, wqt);
90 }
91 }
92 }
93
94
95 @Override
96 protected void writePDF(OutputStream out) {
97 logger.warn("TODO: IMPLEMENT ME!");
98 }
99
100
101 protected void writeCSVHeader(CSVWriter writer) {
102 writer.writeNext(new String[] {
103 msg(CSV_TIMERANGE_HEADER, CSV_TIMERANGE_HEADER),
104 msg(CSV_WATERLEVEL_HEADER, CSV_WATERLEVEL_HEADER),
105 msg(CSV_DISCHARGE_HEADER, CSV_DISCHARGE_HEADER),
106 msg(CSV_DIFF_HEADER, CSV_DIFF_HEADER),
107 msg(CSV_GAUGENAME_HEADER, CSV_GAUGENAME_HEADER)
108 });
109 }
110
111
112 protected void wqt2CSV(CSVWriter writer, WQTimerange wqt) {
113 logger.debug("Add next WQTimerange to CSV");
114
115 DateFormat df = Formatter.getShortDateFormat(context);
116 NumberFormat wf = Formatter.getHistoricalDischargeW(context);
117 NumberFormat qf = Formatter.getHistoricalDischargeQ(context);
118
119 double[] wq = new double[2];
120
121 String gaugeName = getReferenceGaugename();
122
123 for (int i = 0, n = wqt.size(); i < n; i++) {
124 Timerange tr = wqt.getTimerange(i);
125 Date start = new Date(tr.getStart());
126 Date end = new Date(tr.getEnd());
127
128 wqt.get(i, wq);
129
130 writer.writeNext(new String[] {
131 df.format(start) + " - " + df.format(end),
132 wf.format(wq[0]),
133 qf.format(wq[1]),
134 "TODO: Difference to reference curve",
135 gaugeName
136 });
137 }
138 }
139
140
141 public String getReferenceGaugename() {
142 return FLYSUtils.getReferenceGaugeName((FLYSArtifact) master);
143 }
144 }
145 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org