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