Mercurial > dive4elements > river
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 } |