comparison flys-artifacts/src/main/java/de/intevation/flys/exports/DurationCurveExporter.java @ 2178:1d7fb2cabfc7

Issue 138. PDF output for durationcurve calculation results. flys-artifacts/trunk@3777 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 27 Jan 2012 07:53:03 +0000
parents 65dac9cf6ff5
children a9a8df1473fd
comparison
equal deleted inserted replaced
2177:28dbeb64ce7c 2178:1d7fb2cabfc7
2 2
3 import java.io.OutputStream; 3 import java.io.OutputStream;
4 import java.text.NumberFormat; 4 import java.text.NumberFormat;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
6 import java.util.List; 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;
7 12
8 import org.w3c.dom.Document; 13 import org.w3c.dom.Document;
9 14
10 import org.apache.log4j.Logger; 15 import org.apache.log4j.Logger;
11 16
12 import au.com.bytecode.opencsv.CSVWriter; 17 import au.com.bytecode.opencsv.CSVWriter;
13 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
14 import de.intevation.artifacts.CallContext; 24 import de.intevation.artifacts.CallContext;
25 import de.intevation.artifacts.CallMeta;
26
27 import de.intevation.flys.artifacts.FLYSArtifact;
15 28
16 import de.intevation.flys.artifacts.model.WQDay; 29 import de.intevation.flys.artifacts.model.WQDay;
17 import de.intevation.flys.artifacts.model.CalculationResult; 30 import de.intevation.flys.artifacts.model.CalculationResult;
18 31 import de.intevation.flys.artifacts.model.WKmsJRDataSource;
32 import de.intevation.flys.artifacts.resources.Resources;
33
34 import de.intevation.flys.utils.FLYSUtils;
19 import de.intevation.flys.utils.Formatter; 35 import de.intevation.flys.utils.Formatter;
20 36
21 37
22 /** 38 /**
23 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> 39 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
39 55
40 public static final String DEFAULT_CSV_DURATION_HEADER = "D [Tagen]"; 56 public static final String DEFAULT_CSV_DURATION_HEADER = "D [Tagen]";
41 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; 57 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]";
42 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]"; 58 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]";
43 59
60 public static final String PDF_HEADER_MODE = "export.duration.pdf.mode";
44 61
45 /** The storage that contains all WQKms objects for the different facets. */ 62 /** The storage that contains all WQKms objects for the different facets. */
46 protected List<WQDay> data; 63 protected List<WQDay> data;
47 64
48 65
147 return Formatter.getDurationD(context); 164 return Formatter.getDurationD(context);
148 } 165 }
149 166
150 167
151 @Override 168 @Override
152 protected void writePDF(OutputStream out) {} 169 protected void writePDF(OutputStream out) {
153 170 WKmsJRDataSource source = createJRData();
171 Map parameters = new HashMap();
172 parameters.put("ReportTitle", "Exported Data");
173 try {
174 JasperPrint print = JasperFillManager.fillReport(
175 "conf/jasper/duration.jasper",
176 parameters,
177 source);
178 JasperExportManager.exportReportToPdfStream(print, out);
179 }
180 catch(JRException je) {
181 logger.warn("Error generating PDF Report!");
182 je.printStackTrace();
183 }
184 }
185
186 protected WKmsJRDataSource createJRData() {
187 WKmsJRDataSource source = new WKmsJRDataSource();
188
189 addMetaData(source);
190 for (WQDay wqday: data) {
191 addWQDayData(source, wqday);
192 }
193
194 return source;
195 }
196
197
198 protected void addMetaData(WKmsJRDataSource source) {
199 CallMeta meta = context.getMeta();
200
201 FLYSArtifact flys = (FLYSArtifact) master;
202
203 source.addMetaData ("river", FLYSUtils.getRivername(flys));
204
205 Locale locale = Resources.getLocale(meta);
206 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
207
208 source.addMetaData("date", df.format(new Date()));
209
210 double[] kms = FLYSUtils.getKmRange(flys);
211 source.addMetaData("range", String.valueOf(kms[0]));
212
213 source.addMetaData("calculation", Resources.getMsg(
214 locale,
215 PDF_HEADER_MODE,
216 "Duration"));
217 }
218
219 protected void addWQDayData(WKmsJRDataSource source, WQDay wqday) {
220 int size = wqday.size();
221
222 NumberFormat wf = getWFormatter();
223 NumberFormat qf = getQFormatter();
224 NumberFormat df = getDFormatter();
225
226 if (wqday.isIncreasing()) {
227 for (int i = size-1; i >= 0; i --) {
228 source.addData(new String[] {
229 "",
230 wf.format(wqday.getW(i)),
231 qf.format(wqday.getQ(i)),
232 "", "", "",
233 df.format(wqday.getDay(i))
234 });
235 }
236 }
237 else {
238 for (int i = 0; i < size; 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 }
154 } 249 }

http://dive4elements.wald.intevation.org