Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java @ 5838:5aa05a7a34b7
Rename modules to more fitting names.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 15:23:37 +0200 |
parents | flys-artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java@bd047b71ab37 |
children | 4897a58c8746 |
comparison
equal
deleted
inserted
replaced
5837:d9901a08d0a6 | 5838:5aa05a7a34b7 |
---|---|
1 package org.dive4elements.river.exports; | |
2 | |
3 import java.io.OutputStream; | |
4 import java.text.NumberFormat; | |
5 import java.util.ArrayList; | |
6 import java.util.Arrays; | |
7 import java.util.List; | |
8 import java.util.Map; | |
9 import java.util.HashMap; | |
10 import java.util.Date; | |
11 import java.text.DateFormat; | |
12 import java.util.Locale; | |
13 | |
14 import org.w3c.dom.Document; | |
15 | |
16 import org.apache.log4j.Logger; | |
17 | |
18 import au.com.bytecode.opencsv.CSVWriter; | |
19 | |
20 import net.sf.jasperreports.engine.JasperExportManager; | |
21 import net.sf.jasperreports.engine.JasperFillManager; | |
22 import net.sf.jasperreports.engine.JasperPrint; | |
23 import net.sf.jasperreports.engine.JRException; | |
24 | |
25 import org.dive4elements.artifacts.common.utils.Config; | |
26 | |
27 import org.dive4elements.artifacts.CallContext; | |
28 import org.dive4elements.artifacts.CallMeta; | |
29 | |
30 import org.dive4elements.river.artifacts.FLYSArtifact; | |
31 | |
32 import org.dive4elements.river.artifacts.access.RangeAccess; | |
33 import org.dive4elements.river.artifacts.model.CalculationResult; | |
34 import org.dive4elements.river.artifacts.model.WQKms; | |
35 import org.dive4elements.river.artifacts.model.WKmsJRDataSource; | |
36 import org.dive4elements.river.artifacts.resources.Resources; | |
37 | |
38 import org.dive4elements.river.utils.FLYSUtils; | |
39 import org.dive4elements.river.utils.Formatter; | |
40 | |
41 | |
42 /** | |
43 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | |
44 */ | |
45 public class ComputedDischargeCurveExporter extends AbstractExporter { | |
46 | |
47 /** The logger used in this exporter.*/ | |
48 private static Logger logger = | |
49 Logger.getLogger(ComputedDischargeCurveExporter.class); | |
50 | |
51 public static final String CSV_W_HEADER = | |
52 "export.computed.discharge.curve.csv.header.w"; | |
53 | |
54 public static final String CSV_Q_HEADER = | |
55 "export.computed.discharge.curve.csv.header.q"; | |
56 | |
57 public static final String DEFAULT_CSV_W_HEADER = "W [NN + m]"; | |
58 public static final String DEFAULT_CSV_Q_HEADER = "Q [m\u00b3/s]"; | |
59 | |
60 public static final String PDF_HEADER_MODE = "export.computed.discharge.pdf.mode"; | |
61 public static final String JASPER_FILE = "export.computed.discharge.pdf.file"; | |
62 | |
63 protected List<WQKms> data; | |
64 | |
65 | |
66 public void init(Document request, OutputStream out, CallContext context) { | |
67 logger.debug("ComputedDischargeCurveExporter.init"); | |
68 | |
69 super.init(request, out, context); | |
70 | |
71 this.data = new ArrayList<WQKms>(); | |
72 } | |
73 | |
74 | |
75 @Override | |
76 protected void addData(Object d) { | |
77 if (d instanceof CalculationResult) { | |
78 d = ((CalculationResult)d).getData(); | |
79 } | |
80 if (d instanceof WQKms[]){ | |
81 data.addAll(Arrays.asList((WQKms [])d)); | |
82 return; | |
83 } | |
84 else if (d instanceof WQKms) { | |
85 data.add((WQKms)d); | |
86 return; | |
87 } | |
88 logger.warn("Can't add data for csv export. Unkown data type " + | |
89 d.getClass().getName()); | |
90 } | |
91 | |
92 | |
93 protected void writeCSVData(CSVWriter writer) { | |
94 logger.info("ComputedDischargeCurveExporter.writeData"); | |
95 | |
96 writeCSVHeader(writer); | |
97 | |
98 NumberFormat wf = getWFormatter(); | |
99 NumberFormat qf = getQFormatter(); | |
100 | |
101 double[] res = new double[3]; | |
102 | |
103 for (WQKms wqkms: data) { | |
104 int size = wqkms.size(); | |
105 | |
106 for (int i = 0; i < size; i++) { | |
107 res = wqkms.get(i, res); | |
108 | |
109 writer.writeNext(new String[] { | |
110 wf.format(res[0]), | |
111 qf.format(res[1]) | |
112 }); | |
113 } | |
114 } | |
115 } | |
116 | |
117 | |
118 protected void writeCSVHeader(CSVWriter writer) { | |
119 logger.debug("ComputedDischargeCurveExporter.writeCSVHeader"); | |
120 | |
121 String unit = FLYSUtils.getRiver((FLYSArtifact) master).getWstUnit().getName(); | |
122 | |
123 writer.writeNext(new String[] { | |
124 msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }), | |
125 msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER) | |
126 }); | |
127 } | |
128 | |
129 | |
130 /** | |
131 * Returns the number formatter for W values. | |
132 * | |
133 * @return the number formatter for W values. | |
134 */ | |
135 protected NumberFormat getWFormatter() { | |
136 return Formatter.getComputedDischargeW(context); | |
137 } | |
138 | |
139 | |
140 /** | |
141 * Returns the number formatter for Q values. | |
142 * | |
143 * @return the number formatter for Q values. | |
144 */ | |
145 protected NumberFormat getQFormatter() { | |
146 return Formatter.getComputedDischargeQ(context); | |
147 } | |
148 | |
149 | |
150 @Override | |
151 protected void writePDF(OutputStream out) { | |
152 WKmsJRDataSource source = createJRData(); | |
153 | |
154 String jasperFile = Resources.getMsg( | |
155 context.getMeta(), | |
156 JASPER_FILE, | |
157 "/jasper/computed-discharge_en.jasper"); | |
158 String confPath = Config.getConfigDirectory().toString(); | |
159 | |
160 Map parameters = new HashMap(); | |
161 parameters.put("ReportTitle", "Exported Data"); | |
162 try { | |
163 JasperPrint print = JasperFillManager.fillReport( | |
164 confPath + jasperFile, | |
165 parameters, | |
166 source); | |
167 JasperExportManager.exportReportToPdfStream(print, out); | |
168 } | |
169 catch(JRException je) { | |
170 logger.warn("Error generating PDF Report!"); | |
171 je.printStackTrace(); | |
172 } | |
173 } | |
174 | |
175 | |
176 protected WKmsJRDataSource createJRData() { | |
177 WKmsJRDataSource source = new WKmsJRDataSource(); | |
178 | |
179 addMetaData(source); | |
180 addWQData(source); | |
181 | |
182 return source; | |
183 } | |
184 | |
185 | |
186 protected void addMetaData(WKmsJRDataSource source) { | |
187 CallMeta meta = context.getMeta(); | |
188 | |
189 FLYSArtifact flys = (FLYSArtifact) master; | |
190 | |
191 source.addMetaData ("river", FLYSUtils.getRivername(flys)); | |
192 | |
193 Locale locale = Resources.getLocale(meta); | |
194 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); | |
195 | |
196 source.addMetaData("date", df.format(new Date())); | |
197 | |
198 RangeAccess rangeAccess = new RangeAccess(flys, null); | |
199 double[] kms = rangeAccess.getKmRange(); | |
200 source.addMetaData("range", String.valueOf(kms[0])); | |
201 | |
202 source.addMetaData("calculation", Resources.getMsg( | |
203 locale, | |
204 PDF_HEADER_MODE, | |
205 "Computed Discharge")); | |
206 } | |
207 | |
208 protected void addWQData(WKmsJRDataSource source) { | |
209 NumberFormat wf = getWFormatter(); | |
210 NumberFormat qf = getQFormatter(); | |
211 | |
212 double[] res = new double[3]; | |
213 | |
214 for (WQKms wqkms: data) { | |
215 int size = wqkms.size(); | |
216 | |
217 for (int i = 0; i < size; i++) { | |
218 res = wqkms.get(i, res); | |
219 | |
220 source.addData(new String[] { | |
221 "", // Empty, the WKmsJRDtasource stores km here. | |
222 wf.format(res[0]), | |
223 qf.format(res[1]) | |
224 }); | |
225 } | |
226 } | |
227 } | |
228 } | |
229 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |