Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/ReferenceCurveExporter.java @ 2264:d974e4589f5a
Primitive, incomplete CSV export for reference curves.
flys-artifacts/trunk@3920 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 06 Feb 2012 13:07:19 +0000 |
parents | |
children | e92545d2069e |
comparison
equal
deleted
inserted
replaced
2263:bdd032bfd978 | 2264:d974e4589f5a |
---|---|
1 package de.intevation.flys.exports; | |
2 | |
3 import java.io.IOException; | |
4 import java.io.OutputStream; | |
5 import java.text.NumberFormat; | |
6 import java.util.ArrayList; | |
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 de.intevation.artifacts.CallContext; | |
26 import de.intevation.artifacts.CallMeta; | |
27 import de.intevation.artifacts.common.utils.Config; | |
28 | |
29 import de.intevation.flys.artifacts.WINFOArtifact; | |
30 | |
31 import de.intevation.flys.artifacts.model.CalculationResult; | |
32 import de.intevation.flys.artifacts.model.WW; | |
33 import de.intevation.flys.artifacts.model.WKmsJRDataSource; | |
34 import de.intevation.flys.artifacts.resources.Resources; | |
35 | |
36 import de.intevation.flys.utils.FLYSUtils; | |
37 import de.intevation.flys.utils.Formatter; | |
38 | |
39 /** | |
40 * (CSV)Exporter for Reference Curves. | |
41 */ | |
42 public class ReferenceCurveExporter extends AbstractExporter { | |
43 | |
44 /** The logger used in this exporter. */ | |
45 private static Logger logger = Logger.getLogger(ReferenceCurveExporter.class); | |
46 | |
47 | |
48 public static final String RC_CSV_KM_HEADER = | |
49 "export.reference_curve.csv.header.km"; | |
50 | |
51 public static final String RC_CSV_W_HEADER = | |
52 "export.reference_curve.csv.header.w"; | |
53 | |
54 /* | |
55 For each Bezugs and Ziel-ort (of which there might be multiples): | |
56 Lage, Bezeichnung, Q, W (cm), W(NN+m). | |
57 */ | |
58 | |
59 public static final String RC_DEFAULT_CSV_KM_HEADER = "Fluss-Km"; | |
60 public static final String RC_DEFAULT_CSV_W_HEADER = "m"; | |
61 | |
62 public static final String PDF_HEADER_MODE = "export.reference_curve.pdf.mode"; | |
63 public static final String JASPER_FILE = "export.reference_curve.pdf.file"; | |
64 | |
65 /** The storage that contains all WKms objects for the different facets. */ | |
66 /* TODO these shall be the function objects, probably. */ | |
67 protected List<WW[]> data; | |
68 | |
69 | |
70 public void init(Document request, OutputStream out, CallContext context) { | |
71 logger.debug("ReferenceCurveExporter.init"); | |
72 | |
73 super.init(request, out, context); | |
74 | |
75 this.data = new ArrayList<WW[]>(); | |
76 } | |
77 | |
78 | |
79 /** | |
80 * Genereate data in csv format. | |
81 */ | |
82 @Override | |
83 public void generate() | |
84 throws IOException | |
85 { | |
86 logger.debug("ReferenceCurveExporter.generate"); | |
87 | |
88 if (facet == null) { | |
89 throw new IOException("invalid (null) facet for exporter"); | |
90 } | |
91 else if (facet.equals(AbstractExporter.FACET_CSV)) { | |
92 generateCSV(); | |
93 } | |
94 else if (facet.equals(AbstractExporter.FACET_PDF)) { | |
95 generatePDF(); | |
96 } | |
97 else { | |
98 throw new IOException("invalid facet (" + facet + ") for exporter"); | |
99 } | |
100 } | |
101 | |
102 | |
103 /** | |
104 * Adds given data. | |
105 * @param d either a WKms or a CalculationResult to add to data. | |
106 */ | |
107 @Override | |
108 protected void addData(Object d) { | |
109 if (d instanceof CalculationResult) { | |
110 d = ((CalculationResult)d).getData(); | |
111 if (d instanceof WW []) { | |
112 data.add((WW [])d); | |
113 } | |
114 } | |
115 else if (d instanceof WW) { | |
116 data.add(new WW[] { (WW) d }); | |
117 } | |
118 else { | |
119 logger.warn("ReferenceCurveExporter.addData unknown data type."); | |
120 } | |
121 } | |
122 | |
123 | |
124 /** | |
125 * Lets writer write all data (including header). | |
126 * @param writer Writer to write data with. | |
127 */ | |
128 @Override | |
129 protected void writeCSVData(CSVWriter writer) { | |
130 logger.info("ReferenceCurveExporter.writeData"); | |
131 | |
132 writeCSVHeader(writer); | |
133 | |
134 for (WW[] tmp: data) { | |
135 for (WW ww: tmp) { | |
136 ww2CSV(writer, ww); | |
137 } | |
138 } | |
139 } | |
140 | |
141 | |
142 /** | |
143 * Lets csvwriter write the header (first line in file). | |
144 * @param write Writer to write header with. | |
145 */ | |
146 protected void writeCSVHeader(CSVWriter writer) { | |
147 logger.info("ReferenceCurveExporter.writeCSVHeader"); | |
148 | |
149 writer.writeNext(new String[] { | |
150 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), | |
151 msg(RC_CSV_W_HEADER, RC_DEFAULT_CSV_W_HEADER) | |
152 }); | |
153 } | |
154 | |
155 | |
156 protected void ww2CSV(CSVWriter writer, WW ww) { | |
157 logger.debug("ReferenceCurveExporter.ww2CSV"); | |
158 | |
159 NumberFormat kmf = getKmFormatter(); | |
160 NumberFormat wf = getWFormatter(); | |
161 int size = ww.size(); | |
162 | |
163 for (int i = 0; i < size; i ++) { | |
164 | |
165 // TODO: start/end ... start/end .. | |
166 writer.writeNext(new String[] { | |
167 kmf.format(ww.getStartKm()), | |
168 wf.format(ww.getW(i)) | |
169 }); | |
170 } | |
171 } | |
172 | |
173 | |
174 /** | |
175 * Returns the number formatter for kilometer values. | |
176 * | |
177 * @return the number formatter for kilometer values. | |
178 */ | |
179 protected NumberFormat getKmFormatter() { | |
180 return Formatter.getWaterlevelKM(context); | |
181 } | |
182 | |
183 | |
184 /** | |
185 * Returns the number formatter for W values. | |
186 * | |
187 * @return the number formatter for W values. | |
188 */ | |
189 protected NumberFormat getWFormatter() { | |
190 return Formatter.getWaterlevelW(context); | |
191 } | |
192 | |
193 | |
194 @Override | |
195 protected void writePDF(OutputStream out) { | |
196 /* | |
197 WKmsJRDataSource source = createJRData(); | |
198 | |
199 String jasperFile = Resources.getMsg( | |
200 context.getMeta(), | |
201 JASPER_FILE, | |
202 "/jasper/wdifferences_en.jasper"); | |
203 String confPath = Config.getConfigDirectory().toString(); | |
204 | |
205 Map parameters = new HashMap(); | |
206 parameters.put("ReportTitle", "Exported Data"); | |
207 try { | |
208 JasperPrint print = JasperFillManager.fillReport( | |
209 confPath + jasperFile, | |
210 parameters, | |
211 source); | |
212 JasperExportManager.exportReportToPdfStream(print, out); | |
213 } | |
214 catch(JRException je) { | |
215 logger.warn("Error generating PDF Report!"); | |
216 je.printStackTrace(); | |
217 } | |
218 */ | |
219 logger.error("ReferenceCurveExporter: PDF export not implemented."); | |
220 } | |
221 | |
222 protected WKmsJRDataSource createJRData() { | |
223 /* | |
224 WKmsJRDataSource source = new WKmsJRDataSource(); | |
225 | |
226 addMetaData(source); | |
227 for (WKms[] tmp: data) { | |
228 for (WKms wkms: tmp) { | |
229 addWKmsData(source, wkms); | |
230 } | |
231 } | |
232 return source; | |
233 */ | |
234 return null; | |
235 } | |
236 | |
237 | |
238 // TODO implement for pdf export. | |
239 /* | |
240 protected void addMetaData(WKmsJRDataSource source) { | |
241 CallMeta meta = context.getMeta(); | |
242 | |
243 WINFOArtifact flys = (WINFOArtifact) master; | |
244 | |
245 source.addMetaData ("river", FLYSUtils.getRivername(flys)); | |
246 | |
247 Locale locale = Resources.getLocale(meta); | |
248 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); | |
249 | |
250 source.addMetaData("date", df.format(new Date())); | |
251 | |
252 String differences = FLYSUtils.getWDifferences(flys, context); | |
253 source.addMetaData("differences", differences); | |
254 | |
255 source.addMetaData("calculation", Resources.getMsg( | |
256 locale, | |
257 PDF_HEADER_MODE, | |
258 "W Differences")); | |
259 } | |
260 | |
261 protected void addWKmsData(WKmsJRDataSource source, WKms wkms) { | |
262 NumberFormat kmf = getKmFormatter(); | |
263 NumberFormat wf = getWFormatter(); | |
264 int size = wkms.size(); | |
265 | |
266 for (int i = 0; i < size; i ++) { | |
267 | |
268 source.addData(new String[] { | |
269 kmf.format(wkms.getKm(i)), | |
270 wf.format(wkms.getW(i)) | |
271 }); | |
272 } | |
273 } | |
274 */ | |
275 } | |
276 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |