comparison flys-artifacts/src/main/java/de/intevation/flys/exports/HistoricalDischargeCurveExporter.java @ 2286:89ca1e8572e4

Added PDF export for historical discharge curve calculations. flys-artifacts/trunk@3949 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Tue, 07 Feb 2012 10:29:39 +0000
parents ea173e4c07c7
children b8df8d1476ba
comparison
equal deleted inserted replaced
2285:5a00269406f3 2286:89ca1e8572e4
4 import java.text.NumberFormat; 4 import java.text.NumberFormat;
5 import java.text.DateFormat; 5 import java.text.DateFormat;
6 import java.util.ArrayList; 6 import java.util.ArrayList;
7 import java.util.Date; 7 import java.util.Date;
8 import java.util.List; 8 import java.util.List;
9 import java.util.Map;
10 import java.util.HashMap;
11 import java.util.Locale;
9 12
10 import org.w3c.dom.Document; 13 import org.w3c.dom.Document;
11 14
12 import org.apache.log4j.Logger; 15 import org.apache.log4j.Logger;
13 16
14 import au.com.bytecode.opencsv.CSVWriter; 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.common.utils.Config;
15 25
16 import de.intevation.artifacts.CallContext; 26 import de.intevation.artifacts.CallContext;
17 import de.intevation.artifacts.CallMeta; 27 import de.intevation.artifacts.CallMeta;
18 28
19 import de.intevation.flys.artifacts.FLYSArtifact; 29 import de.intevation.flys.artifacts.FLYSArtifact;
20 import de.intevation.flys.artifacts.model.CalculationResult; 30 import de.intevation.flys.artifacts.model.CalculationResult;
21 import de.intevation.flys.artifacts.model.Timerange; 31 import de.intevation.flys.artifacts.model.Timerange;
22 import de.intevation.flys.artifacts.model.WQTimerange; 32 import de.intevation.flys.artifacts.model.WQTimerange;
33 import de.intevation.flys.artifacts.model.WQTJRDataSource;
23 import de.intevation.flys.artifacts.resources.Resources; 34 import de.intevation.flys.artifacts.resources.Resources;
24 import de.intevation.flys.utils.FLYSUtils; 35 import de.intevation.flys.utils.FLYSUtils;
25 import de.intevation.flys.utils.Formatter; 36 import de.intevation.flys.utils.Formatter;
26 37
27 38
47 "export.historical.discharge.csv.header.diff"; 58 "export.historical.discharge.csv.header.diff";
48 59
49 public static final String CSV_GAUGENAME_HEADER = 60 public static final String CSV_GAUGENAME_HEADER =
50 "export.historical.discharge.csv.header.gaugename"; 61 "export.historical.discharge.csv.header.gaugename";
51 62
63 public static final String PDF_HEADER_MODE =
64 "export.historical.discharge.pdf.mode";
65
66 public static final String JASPER_FILE =
67 "export.historical.discharge.pdf.file";
52 68
53 protected List<WQTimerange[]> data; 69 protected List<WQTimerange[]> data;
54 70
55 71
56 public void init(Document request, OutputStream out, CallContext cc) { 72 public void init(Document request, OutputStream out, CallContext cc) {
92 } 108 }
93 109
94 110
95 @Override 111 @Override
96 protected void writePDF(OutputStream out) { 112 protected void writePDF(OutputStream out) {
97 logger.warn("TODO: IMPLEMENT ME!"); 113 WQTJRDataSource source = createJRData();
114
115 String jasperFile = Resources.getMsg(
116 context.getMeta(),
117 JASPER_FILE,
118 "/jasper/historical-discharge_en.jasper");
119 String confPath = Config.getConfigDirectory().toString();
120
121 Map parameters = new HashMap();
122 parameters.put("ReportTitle", "Exported Data");
123 try {
124 JasperPrint print = JasperFillManager.fillReport(
125 confPath + jasperFile,
126 parameters,
127 source);
128 JasperExportManager.exportReportToPdfStream(print, out);
129 }
130 catch(JRException je) {
131 logger.warn("Error generating PDF Report!");
132 je.printStackTrace();
133 }
134
98 } 135 }
99 136
100 137
101 protected void writeCSVHeader(CSVWriter writer) { 138 protected void writeCSVHeader(CSVWriter writer) {
102 writer.writeNext(new String[] { 139 writer.writeNext(new String[] {
136 }); 173 });
137 } 174 }
138 } 175 }
139 176
140 177
178 protected WQTJRDataSource createJRData() {
179 WQTJRDataSource source = new WQTJRDataSource();
180
181 addMetaData(source);
182 for (WQTimerange[] arr: data) {
183 for (WQTimerange wqt: arr) {
184 addWQTData(source, wqt);
185 }
186 }
187
188 return source;
189 }
190
191
192 protected void addMetaData(WQTJRDataSource source) {
193 CallMeta meta = context.getMeta();
194
195 FLYSArtifact flys = (FLYSArtifact) master;
196
197 source.addMetaData ("river", FLYSUtils.getRivername(flys));
198
199 Locale locale = Resources.getLocale(meta);
200 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
201
202 source.addMetaData("date", df.format(new Date()));
203
204 source.addMetaData("calculation", Resources.getMsg(
205 locale,
206 PDF_HEADER_MODE,
207 "Historical Discharge"));
208 }
209
210
211 protected void addWQTData(WQTJRDataSource source, WQTimerange wqt) {
212 DateFormat df = Formatter.getShortDateFormat(context);
213 NumberFormat wf = Formatter.getHistoricalDischargeW(context);
214 NumberFormat qf = Formatter.getHistoricalDischargeQ(context);
215
216 double[] wq = new double[2];
217
218 String gaugeName = getReferenceGaugename();
219
220 for (int i = 0, n = wqt.size(); i < n; i++) {
221 Timerange tr = wqt.getTimerange(i);
222 Date start = new Date(tr.getStart());
223 Date end = new Date(tr.getEnd());
224
225 wqt.get(i, wq);
226
227 source.addData(new String[] {
228 df.format(start) + " - " + df.format(end),
229 wf.format(wq[0]),
230 qf.format(wq[1]),
231 "TODO: Difference to reference curve",
232 gaugeName
233 });
234 }
235 }
236
237
141 public String getReferenceGaugename() { 238 public String getReferenceGaugename() {
142 return FLYSUtils.getReferenceGaugeName((FLYSArtifact) master); 239 return FLYSUtils.getReferenceGaugeName((FLYSArtifact) master);
143 } 240 }
144 } 241 }
145 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 242 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org