comparison flys-artifacts/src/main/java/org/dive4elements/river/exports/DurationCurveExporter.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/DurationCurveExporter.java@56fbdcdb7ff2
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.util.ArrayList;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.HashMap;
9 import java.util.Date;
10 import java.text.DateFormat;
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.CallContext;
25 import org.dive4elements.artifacts.CallMeta;
26 import org.dive4elements.artifacts.common.utils.Config;
27
28 import org.dive4elements.river.artifacts.FLYSArtifact;
29
30 import org.dive4elements.river.artifacts.access.RangeAccess;
31 import org.dive4elements.river.artifacts.model.WQDay;
32 import org.dive4elements.river.artifacts.model.CalculationResult;
33 import org.dive4elements.river.artifacts.model.WKmsJRDataSource;
34 import org.dive4elements.river.artifacts.resources.Resources;
35
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 DurationCurveExporter extends AbstractExporter {
44
45 /** The logger used in this exporter. */
46 private static Logger logger = Logger.getLogger(DurationCurveExporter.class);
47
48
49 public static final String CSV_DURATION_HEADER =
50 "export.duration.curve.csv.header.duration";
51
52 public static final String CSV_W_HEADER =
53 "export.duration.curve.csv.header.w";
54
55 public static final String CSV_Q_HEADER =
56 "export.duration.curve.csv.header.q";
57
58 public static final String DEFAULT_CSV_DURATION_HEADER = "D [Tagen]";
59 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]";
60 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]";
61
62 public static final String PDF_HEADER_MODE = "export.duration.pdf.mode";
63 public static final String JASPER_FILE = "export.duration.pdf.file";
64
65 /** The storage that contains all WQKms objects for the different facets. */
66 protected List<WQDay> data;
67
68
69 public void init(Document request, OutputStream out, CallContext context) {
70 logger.debug("DurationCurveExporter.init");
71
72 super.init(request, out, context);
73
74 this.data = new ArrayList<WQDay>();
75 }
76
77
78 @Override
79 protected void addData(Object d) {
80 if (d instanceof CalculationResult) {
81 d = ((CalculationResult)d).getData();
82 if (d instanceof WQDay) {
83 data.add((WQDay)d);
84 }
85 }
86 }
87
88
89 protected void writeCSVData(CSVWriter writer) {
90 logger.info("DurationCurveExporter.writeData");
91
92 writeCSVHeader(writer);
93
94 for (WQDay wqday: data) {
95 wQDay2CSV(writer, wqday);
96 }
97 }
98
99
100 protected void writeCSVHeader(CSVWriter writer) {
101 logger.info("DurationCurveExporter.writeCSVHeader");
102
103 writer.writeNext(new String[] {
104 msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER),
105 msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER),
106 msg(CSV_DURATION_HEADER, DEFAULT_CSV_DURATION_HEADER)
107 });
108 }
109
110
111 protected void wQDay2CSV(CSVWriter writer, WQDay wqday) {
112 logger.debug("DurationCurveExporter.wQDay2CSV");
113
114 int size = wqday.size();
115
116 NumberFormat wf = getWFormatter();
117 NumberFormat qf = getQFormatter();
118 NumberFormat df = getDFormatter();
119
120 if (wqday.isIncreasing()) {
121 for (int i = size-1; i >= 0; i --) {
122 writer.writeNext(new String[] {
123 wf.format(wqday.getW(i)),
124 qf.format(wqday.getQ(i)),
125 df.format(wqday.getDay(i))
126 });
127 }
128 }
129 else {
130 for (int i = 0; i < size; i ++) {
131 writer.writeNext(new String[] {
132 wf.format(wqday.getW(i)),
133 qf.format(wqday.getQ(i)),
134 df.format(wqday.getDay(i))
135 });
136 }
137 }
138 }
139
140
141 /**
142 * Returns the number formatter for W values.
143 *
144 * @return the number formatter for W values.
145 */
146 @Override
147 protected NumberFormat getWFormatter() {
148 return Formatter.getDurationW(context);
149 }
150
151
152 /**
153 * Returns the number formatter for Q values.
154 *
155 * @return the number formatter for Q values.
156 */
157 @Override
158 protected NumberFormat getQFormatter() {
159 return Formatter.getDurationQ(context);
160 }
161
162
163 /**
164 * Returns the number formatter for duration values.
165 *
166 * @return the number formatter for duration values.
167 */
168 protected NumberFormat getDFormatter() {
169 return Formatter.getDurationD(context);
170 }
171
172
173 @Override
174 protected void writePDF(OutputStream out) {
175 WKmsJRDataSource source = createJRData();
176
177 String jasperFile = Resources.getMsg(
178 context.getMeta(),
179 JASPER_FILE,
180 "/jasper/duration_en.jasper");
181 String confPath = Config.getConfigDirectory().toString();
182
183 Map parameters = new HashMap();
184 parameters.put("ReportTitle", "Exported Data");
185 try {
186 JasperPrint print = JasperFillManager.fillReport(
187 confPath + jasperFile,
188 parameters,
189 source);
190 JasperExportManager.exportReportToPdfStream(print, out);
191 }
192 catch(JRException je) {
193 logger.warn("Error generating PDF Report!");
194 je.printStackTrace();
195 }
196 }
197
198 protected WKmsJRDataSource createJRData() {
199 WKmsJRDataSource source = new WKmsJRDataSource();
200
201 addMetaData(source);
202 for (WQDay wqday: data) {
203 addWQDayData(source, wqday);
204 }
205
206 return source;
207 }
208
209
210 protected void addMetaData(WKmsJRDataSource source) {
211 CallMeta meta = context.getMeta();
212
213 FLYSArtifact flys = (FLYSArtifact) master;
214
215 source.addMetaData ("river", FLYSUtils.getRivername(flys));
216
217 Locale locale = Resources.getLocale(meta);
218 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
219
220 source.addMetaData("date", df.format(new Date()));
221
222 RangeAccess rangeAccess = new RangeAccess(flys, null);
223 double[] kms = rangeAccess.getKmRange();
224 source.addMetaData("range", String.valueOf(kms[0]));
225
226 source.addMetaData("calculation", Resources.getMsg(
227 locale,
228 PDF_HEADER_MODE,
229 "Duration"));
230 }
231
232 protected void addWQDayData(WKmsJRDataSource source, WQDay wqday) {
233 int size = wqday.size();
234
235 NumberFormat wf = getWFormatter();
236 NumberFormat qf = getQFormatter();
237 NumberFormat df = getDFormatter();
238
239 if (wqday.isIncreasing()) {
240 for (int i = size-1; i >= 0; i --) {
241 source.addData(new String[] {
242 "",
243 wf.format(wqday.getW(i)),
244 qf.format(wqday.getQ(i)),
245 "", "", "",
246 df.format(wqday.getDay(i))
247 });
248 }
249 }
250 else {
251 for (int i = 0; i < size; i ++) {
252 source.addData(new String[] {
253 "",
254 wf.format(wqday.getW(i)),
255 qf.format(wqday.getQ(i)),
256 "", "", "",
257 df.format(wqday.getDay(i))
258 });
259 }
260 }
261 }
262 }
263 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org