comparison flys-artifacts/src/main/java/org/dive4elements/river/exports/HistoricalDischargeCurveExporter.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java@420c553bc86d
children
comparison
equal deleted inserted replaced
5830:160f53ee0870 5831:bd047b71ab37
1 package org.dive4elements.river.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 import java.util.Map;
10 import java.util.HashMap;
11 import java.util.Locale;
12
13 import org.w3c.dom.Document;
14
15 import org.apache.log4j.Logger;
16
17 import au.com.bytecode.opencsv.CSVWriter;
18
19 import net.sf.jasperreports.engine.JasperExportManager;
20 import net.sf.jasperreports.engine.JasperFillManager;
21 import net.sf.jasperreports.engine.JasperPrint;
22 import net.sf.jasperreports.engine.JRException;
23
24 import org.dive4elements.artifacts.common.utils.Config;
25
26 import org.dive4elements.artifacts.CallContext;
27 import org.dive4elements.artifacts.CallMeta;
28
29 import org.dive4elements.river.artifacts.FLYSArtifact;
30 import org.dive4elements.river.artifacts.model.CalculationResult;
31 import org.dive4elements.river.artifacts.model.HistoricalDischargeData;
32 import org.dive4elements.river.artifacts.model.Timerange;
33 import org.dive4elements.river.artifacts.model.WQTimerange;
34 import org.dive4elements.river.artifacts.model.WQTJRDataSource;
35 import org.dive4elements.river.artifacts.resources.Resources;
36 import org.dive4elements.river.utils.FLYSUtils;
37 import org.dive4elements.river.utils.Formatter;
38
39
40 /**
41 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
42 */
43 public class HistoricalDischargeCurveExporter extends AbstractExporter {
44
45 private static final Logger logger =
46 Logger.getLogger(HistoricalDischargeCurveExporter.class);
47
48
49 public static final String CSV_TIMERANGE_HEADER =
50 "export.historical.discharge.csv.header.timerange";
51
52 public static final String CSV_WATERLEVEL_HEADER =
53 "export.historical.discharge.csv.header.waterlevel";
54
55 public static final String CSV_DISCHARGE_HEADER =
56 "export.historical.discharge.csv.header.discharge";
57
58 public static final String CSV_DIFF_HEADER =
59 "export.historical.discharge.csv.header.diff";
60
61 public static final String CSV_GAUGENAME_HEADER =
62 "export.historical.discharge.csv.header.gaugename";
63
64 public static final String PDF_HEADER_MODE =
65 "export.historical.discharge.pdf.mode";
66
67 public static final String JASPER_FILE =
68 "export.historical.discharge.pdf.file";
69
70 protected List<WQTimerange[]> data;
71
72
73 public void init(Document request, OutputStream out, CallContext cc) {
74 super.init(request, out, cc);
75
76 data = new ArrayList<WQTimerange[]>();
77 }
78
79
80 @Override
81 protected void addData(Object d) {
82 logger.debug("Add data of class: " + d.getClass());
83
84 if (d instanceof CalculationResult) {
85 d = ((CalculationResult) d).getData();
86
87 logger.debug("Internal data of CalculationResult: " + d.getClass());
88
89 if (d instanceof HistoricalDischargeData) {
90 d = (WQTimerange[]) ((HistoricalDischargeData) d).getWQTimeranges();
91
92 if (d instanceof WQTimerange[]) {
93 logger.debug("Add new data of type WQTimerange");
94 data.add((WQTimerange[]) d);
95 }
96 }
97 }
98 }
99
100
101 @Override
102 protected void writeCSVData(CSVWriter writer) {
103 logger.info("HistoricalDischargeCurveExporter.writeCSVData");
104 logger.debug("CSV gets " + data.size() + " WQTimerange[] objects.");
105
106 writeCSVHeader(writer);
107
108 for (WQTimerange[] arr: data) {
109 for (WQTimerange wqt: arr) {
110 wqt2CSV(writer, wqt);
111 }
112 }
113 }
114
115
116 @Override
117 protected void writePDF(OutputStream out) {
118 WQTJRDataSource source = createJRData();
119
120 String jasperFile = Resources.getMsg(
121 context.getMeta(),
122 JASPER_FILE,
123 "/jasper/historical-discharge_en.jasper");
124 String confPath = Config.getConfigDirectory().toString();
125
126 Map parameters = new HashMap();
127 parameters.put("ReportTitle", "Exported Data");
128 try {
129 JasperPrint print = JasperFillManager.fillReport(
130 confPath + jasperFile,
131 parameters,
132 source);
133 JasperExportManager.exportReportToPdfStream(print, out);
134 }
135 catch(JRException je) {
136 logger.warn("Error generating PDF Report!");
137 je.printStackTrace();
138 }
139 }
140
141
142 protected void writeCSVHeader(CSVWriter writer) {
143 writer.writeNext(new String[] {
144 msg(CSV_TIMERANGE_HEADER, CSV_TIMERANGE_HEADER),
145 msg(CSV_WATERLEVEL_HEADER, CSV_WATERLEVEL_HEADER),
146 msg(CSV_DISCHARGE_HEADER, CSV_DISCHARGE_HEADER),
147 msg(CSV_DIFF_HEADER, CSV_DIFF_HEADER),
148 msg(CSV_GAUGENAME_HEADER, CSV_GAUGENAME_HEADER)
149 });
150 }
151
152
153 protected void wqt2CSV(CSVWriter writer, WQTimerange wqt) {
154 logger.debug("Add next WQTimerange to CSV");
155
156 DateFormat df = Formatter.getMediumDateFormat(context);
157 NumberFormat wf = Formatter.getHistoricalDischargeW(context);
158 NumberFormat qf = Formatter.getHistoricalDischargeQ(context);
159
160 double[] wq = new double[3];
161
162 String gaugeName = getReferenceGaugename();
163
164 List<WQTimerange.TimerangeItem> sorted = wqt.sort();
165
166 for (int i = 0, n = sorted.size(); i < n; i++) {
167 WQTimerange.TimerangeItem item = sorted.get(i);
168
169 Timerange tr = item.timerange;
170 Date start = new Date(tr.getStart());
171 Date end = new Date(tr.getEnd());
172
173 item.get(wq);
174
175 writer.writeNext(new String[] {
176 df.format(start) + " - " + df.format(end),
177 wf.format(wq[0]),
178 qf.format(wq[1]),
179 qf.format(wq[2]),
180 gaugeName
181 });
182 }
183 }
184
185
186 protected WQTJRDataSource createJRData() {
187 WQTJRDataSource source = new WQTJRDataSource();
188
189 addMetaData(source);
190 for (WQTimerange[] arr: data) {
191 for (WQTimerange wqt: arr) {
192 addWQTData(source, wqt);
193 }
194 }
195
196 return source;
197 }
198
199
200 protected void addMetaData(WQTJRDataSource source) {
201 CallMeta meta = context.getMeta();
202
203 FLYSArtifact flys = (FLYSArtifact) master;
204
205 source.addMetaData ("river", FLYSUtils.getRivername(flys));
206
207 Locale locale = Resources.getLocale(meta);
208 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
209
210 source.addMetaData("date", df.format(new Date()));
211
212 source.addMetaData("calculation", Resources.getMsg(
213 locale,
214 PDF_HEADER_MODE,
215 "Historical Discharge"));
216 }
217
218
219 protected void addWQTData(WQTJRDataSource source, WQTimerange wqt) {
220 DateFormat df = Formatter.getShortDateFormat(context);
221 NumberFormat wf = Formatter.getHistoricalDischargeW(context);
222 NumberFormat qf = Formatter.getHistoricalDischargeQ(context);
223
224 double[] wq = new double[3];
225
226 String gaugeName = getReferenceGaugename();
227
228 for (int i = 0, n = wqt.size(); i < n; i++) {
229 Timerange tr = wqt.getTimerange(i);
230 Date start = new Date(tr.getStart());
231 Date end = new Date(tr.getEnd());
232
233 wqt.get(i, wq);
234
235 source.addData(new String[] {
236 df.format(start) + " - " + df.format(end),
237 wf.format(wq[0]),
238 qf.format(wq[1]),
239 qf.format(wq[2]),
240 gaugeName
241 });
242 }
243 }
244
245
246 public String getReferenceGaugename() {
247 return FLYSUtils.getReferenceGaugeName((FLYSArtifact) master);
248 }
249 }
250 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org