comparison flys-artifacts/src/main/java/de/intevation/flys/exports/DurationCurveExporter.java @ 3786:4adc35aa655c

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

http://dive4elements.wald.intevation.org