annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java @ 8928:791714b92b5c

Basically implemented SINFO-Tkh Exports
author gernotbelger
date Thu, 01 Mar 2018 18:49:34 +0100
parents
children 9c02733a1b3c
rev   line source
8928
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
2 * Software engineering by
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
5 *
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
9 */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.common;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
11
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
12 import java.io.OutputStream;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
13 import java.util.Collection;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
14 import java.util.HashMap;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
15 import java.util.Map;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
16
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
17 import org.apache.log4j.Logger;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifacts.CallMeta;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
19 import org.dive4elements.artifacts.common.utils.Config;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.model.CalculationResult;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.resources.Resources;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.exports.AbstractExporter;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
25
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
26 import au.com.bytecode.opencsv.CSVWriter;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
27 import net.sf.jasperreports.engine.JRDataSource;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
28 import net.sf.jasperreports.engine.JRException;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
29 import net.sf.jasperreports.engine.JasperExportManager;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
30 import net.sf.jasperreports.engine.JasperFillManager;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
31 import net.sf.jasperreports.engine.JasperPrint;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
32
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
33 /**
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
34 * @author Gernot Belger
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
35 */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
36 public abstract class AbstractSInfoExporter<ROW extends AbstractSInfoResultRow, RESULT extends AbstractSInfoCalculationResult<ROW>, RESULTS extends AbstractSInfoCalculationResults<ROW, RESULT>> extends AbstractExporter {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
37
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
38 /** The storage that contains the current calculation result. */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
39 private RESULTS data = null;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
40
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
41 protected abstract Logger getLog();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
42
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
43 public RESULTS getData() {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
44 return this.data;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
45 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
46
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
47 @Override
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
48 protected final void addData(final Object d) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
49 /* reset */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
50 this.data = null;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
51
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
52 if (d instanceof CalculationResult) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
53
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
54 final Object dat = ((CalculationResult) d).getData();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
55 if (dat != null)
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
56 this.data = (RESULTS) dat;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
57 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
58 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
59
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
60 @Override
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
61 protected final void writeCSVData(final CSVWriter writer) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
62 getLog().info("writeCSVData");
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
63
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
64 /* fetch calculation results */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
65 final RESULTS results = this.data;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
66
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
67 final RiverInfo river = results.getRiver();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
68
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
69 /* write as csv */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
70 writeCSVMeta(writer, results);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
71 writeCSVHeader(writer, river);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
72
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
73 for (final RESULT result : results.getResults()) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
74 writeCSVResult(writer, result);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
75 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
76 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
77
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
78 protected abstract void writeCSVHeader(final CSVWriter writer, final RiverInfo river);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
79
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
80 protected abstract void writeCSVMeta(final CSVWriter writer, final RESULTS results);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
81
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
82 protected final void writeCSVMetaEntry(final CSVWriter writer, final String message, final Object... messageArgs) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
83
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
84 final CallMeta meta = this.context.getMeta();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
85
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
86 writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
87 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
88
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
89 protected final void writeCSVResult(final CSVWriter writer, final RESULT result) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
90
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
91 writeCSVResultHeader(writer, result);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
92
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
93 /* nwo the value rows */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
94 final Collection<ROW> rows = result.getRows();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
95 for (final ROW row : rows) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
96 writeCSVRow(writer, row);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
97 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
98 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
99
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
100 protected abstract void writeCSVResultHeader(CSVWriter writer, RESULT result);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
101
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
102 protected final void writeCSVRow(final CSVWriter writer, final ROW row) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
103 getLog().debug("writeCSVFlowDepthRow");
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
104
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
105 final String[] formattedRow = formatCSVRow(row);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
106 writer.writeNext(formattedRow);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
107 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
108
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
109 protected abstract String[] formatCSVRow(final ROW row);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
110
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
111 @Override
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
112 protected final void writePDF(final OutputStream outStream) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
113 getLog().debug("write PDF");
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
114
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
115 final JRDataSource source = createJRData();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
116
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
117 final String confPath = Config.getConfigDirectory().toString();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
118
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
119 // FIXME: distinguish between with and without tkh: we need two jasper reports!
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
120
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
121 final Map<String, Object> parameters = new HashMap<>();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
122 parameters.put("ReportTitle", "Exported Data");
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
123
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
124 try {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
125 final String jasperPath = confPath + getJasperFile();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
126
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
127 final JasperPrint print = JasperFillManager.fillReport(jasperPath, parameters, source);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
128 JasperExportManager.exportReportToPdfStream(print, outStream);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
129 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
130 catch (final JRException je) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
131 getLog().warn("Error generating PDF Report!", je);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
132 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
133 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
134
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
135 protected abstract String getJasperFile();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
136
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
137 private JRDataSource createJRData() {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
138
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
139 /* fetch calculation results */
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
140 final RESULTS results = this.data;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
141
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
142 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
143
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
144 addJRMetaData(source, results);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
145
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
146 for (final RESULT result : results.getResults()) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
147 addJRTableData(source, result);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
148 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
149
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
150 return source;
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
151 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
152
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
153 protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
154
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
155 protected final void addJRTableData(final MetaAndTableJRDataSource source, final RESULT result) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
156
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
157 final Collection<ROW> rows = result.getRows();
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
158
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
159 for (final ROW row : rows) {
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
160
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
161 final String[] formattedRow = formatPDFRow(row);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
162 source.addData(formattedRow);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
163 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
164 }
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
165
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
166 protected abstract String[] formatPDFRow(final ROW row);
791714b92b5c Basically implemented SINFO-Tkh Exports
gernotbelger
parents:
diff changeset
167 }

http://dive4elements.wald.intevation.org