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 :

http://dive4elements.wald.intevation.org