comparison artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDifferenceExporter.java @ 6242:34f393434913

Implement pdf export for bedheight differences
author Andre Heinecke <aheinecke@intevation.de>
date Mon, 10 Jun 2013 13:06:03 +0200
parents e213b538f78c
children 5733d7f27196
comparison
equal deleted inserted replaced
6241:db97448f21b7 6242:34f393434913
5 import java.io.IOException; 5 import java.io.IOException;
6 import java.io.OutputStream; 6 import java.io.OutputStream;
7 import java.text.NumberFormat; 7 import java.text.NumberFormat;
8 import java.util.LinkedList; 8 import java.util.LinkedList;
9 import java.util.List; 9 import java.util.List;
10 import java.util.Map;
11 import java.util.HashMap;
12 import java.util.Locale;
13 import java.util.Date;
14 import java.text.DateFormat;
10 15
11 import org.apache.log4j.Logger; 16 import org.apache.log4j.Logger;
17 import org.apache.commons.lang.StringUtils;
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
12 import org.dive4elements.artifacts.CallContext; 24 import org.dive4elements.artifacts.CallContext;
25 import org.dive4elements.artifacts.CallMeta;
26 import org.dive4elements.river.artifacts.D4EArtifact;
27 import org.dive4elements.river.artifacts.access.BedDifferencesAccess;
28 import org.dive4elements.artifacts.common.utils.Config;
29 import org.dive4elements.river.artifacts.resources.Resources;
13 import org.dive4elements.river.artifacts.model.CalculationResult; 30 import org.dive4elements.river.artifacts.model.CalculationResult;
14 import org.dive4elements.river.artifacts.model.minfo.BedDifferencesResult; 31 import org.dive4elements.river.artifacts.model.minfo.BedDifferencesResult;
32 import org.dive4elements.river.artifacts.model.minfo.BedDifferenceJRDataSource;
15 import org.dive4elements.river.exports.AbstractExporter; 33 import org.dive4elements.river.exports.AbstractExporter;
16 import org.dive4elements.river.utils.Formatter; 34 import org.dive4elements.river.utils.Formatter;
35 import org.dive4elements.river.utils.RiverUtils;
36
17 import org.w3c.dom.Document; 37 import org.w3c.dom.Document;
18 38
19 import au.com.bytecode.opencsv.CSVWriter; 39 import au.com.bytecode.opencsv.CSVWriter;
20 40
21 41
25 45
26 /** Private logger. */ 46 /** Private logger. */
27 private static Logger logger = 47 private static Logger logger =
28 Logger.getLogger(BedDifferenceExporter.class); 48 Logger.getLogger(BedDifferenceExporter.class);
29 49
30 private static final String CSV_HEADER_KM = "export.minfo.beddifference.km"; 50 private static final String CSV_HEADER_KM =
51 "export.minfo.beddifference.km";
52
31 private static final String CSV_HEADER_DIFF = 53 private static final String CSV_HEADER_DIFF =
32 "export.minfo.beddifference.diff"; 54 "export.minfo.beddifference.diff";
55
56 public static final String JASPER_FILE =
57 "export.minfo.beddifference.pdf.file";
58
59 public static final String PDF_TITLE=
60 "export.minfo.beddifference.pdf.title";
61
62 public static final String PDF_HEADER_MODE=
63 "export.minfo.beddifference.pdf.mode";
33 64
34 private BedDifferencesResult[] results; 65 private BedDifferencesResult[] results;
35 66
36 @Override 67 @Override
37 public void init(Document request, OutputStream out, CallContext context) { 68 public void init(Document request, OutputStream out, CallContext context) {
38 logger.debug("BedQualityExporter.init"); 69 logger.debug("init");
39 super.init(request, out, context); 70 super.init(request, out, context);
40 results = new BedDifferencesResult[0]; 71 results = new BedDifferencesResult[0];
41 } 72 }
73
42 @Override 74 @Override
43 protected void writeCSVData(CSVWriter writer) throws IOException { 75 protected void writeCSVData(CSVWriter writer) throws IOException {
44 writeCSVHeader(writer); 76 writeCSVHeader(writer);
45 77
46 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); 78 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta());
54 } 86 }
55 } 87 }
56 } 88 }
57 89
58 @Override 90 @Override
59 protected void writePDF(OutputStream out) {
60 // TODO implement me!
61
62 }
63
64 @Override
65 protected void addData(Object data) { 91 protected void addData(Object data) {
66 if (!(data instanceof CalculationResult)) { 92 if (!(data instanceof CalculationResult)) {
67 logger.warn("Invalid data type."); 93 logger.warn("Invalid data type.");
68 return; 94 return;
69 } 95 }
74 return; 100 return;
75 } 101 }
76 results = (BedDifferencesResult[])d; 102 results = (BedDifferencesResult[])d;
77 } 103 }
78 104
105 protected void addMetaData(BedDifferenceJRDataSource source) {
106 CallMeta meta = context.getMeta();
107
108 D4EArtifact arti = (D4EArtifact) master;
109
110 source.addMetaData ("river", RiverUtils.getRivername(arti));
111
112 Locale locale = Resources.getLocale(meta);
113 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
114
115 source.addMetaData("date", df.format(new Date()));
116
117 source.addMetaData("calculation", Resources.getMsg(
118 locale,
119 PDF_HEADER_MODE,
120 "Bedheight difference"));
121
122 // Now the dynamic parts
123
124 BedDifferencesAccess access = new BedDifferencesAccess(arti);
125 source.addMetaData("ye_mode", Resources.getMsg(locale,
126 "state.minfo." + access.getYearEpoch(),
127 access.getYearEpoch()));
128
129 source.addMetaData("differences", StringUtils.join(
130 access.getDifferenceArtifactNamePairs(), "\n"));
131 }
132
133
79 protected void writeCSVHeader(CSVWriter writer) { 134 protected void writeCSVHeader(CSVWriter writer) {
80 logger.debug("writeCSVHeader()"); 135 logger.debug("writeCSVHeader()");
81 136
82 List<String> header = new LinkedList<String>(); 137 List<String> header = new LinkedList<String>();
83 if (results != null) { 138 if (results != null) {
84 header.add(msg(CSV_HEADER_KM, "km")); 139 header.add(msg(CSV_HEADER_KM, "km"));
85 header.add(msg(CSV_HEADER_DIFF, "m")); 140 header.add(msg(CSV_HEADER_DIFF, "m"));
86 } 141 }
87 writer.writeNext(header.toArray(new String[header.size()])); 142 writer.writeNext(header.toArray(new String[header.size()]));
88 } 143 }
144
145 protected BedDifferenceJRDataSource createJRData() {
146 BedDifferenceJRDataSource source = new BedDifferenceJRDataSource();
147
148 addMetaData(source);
149 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta());
150 NumberFormat mf = Formatter.getMeterFormat(context);
151 for (BedDifferencesResult result: results) {
152 double[][] kms = result.getDifferencesData();
153 for (int j = 0; j < kms[0].length; j++) {
154 source.addData(new String[] {
155 kmf.format(kms[0][j]), mf.format(kms[1][j])});
156 }
157 }
158 return source;
159 }
160
161 @Override
162 protected void writePDF(OutputStream out) {
163 logger.debug("write PDF");
164 BedDifferenceJRDataSource source = createJRData();
165
166 String jasperFile = Resources.getMsg(
167 context.getMeta(),
168 JASPER_FILE,
169 "/jasper/beddifference_en.jasper");
170 String confPath = Config.getConfigDirectory().toString();
171
172
173 Map parameters = new HashMap();
174 parameters.put("ReportTitle", Resources.getMsg(
175 context.getMeta(), PDF_TITLE, "Exported Data"));
176 try {
177 JasperPrint print = JasperFillManager.fillReport(
178 confPath + jasperFile,
179 parameters,
180 source);
181 JasperExportManager.exportReportToPdfStream(print, out);
182 }
183 catch(JRException je) {
184 logger.warn("Error generating PDF Report!", je);
185 }
186 }
187
89 } 188 }

http://dive4elements.wald.intevation.org