annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java @ 9195:a4121ec450d6

'ca.'-issue ExportContextCSV+PDF separated uinfo.inundationduration url export
author gernotbelger
date Fri, 29 Jun 2018 14:52:54 +0200
parents bb929b444ea5
children 6393e05a9610
rev   line source
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
2 * Software engineering by
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
5 *
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
9 */
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.common;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
11
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
12 import java.io.OutputStream;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
13
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
14 import org.apache.log4j.Logger;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.model.CalculationResult;
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
17 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.exports.AbstractExporter;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
19 import org.w3c.dom.Document;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
20
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
21 import au.com.bytecode.opencsv.CSVWriter;
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
22 import net.sf.jasperreports.engine.JRException;
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
23
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
24 /**
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
25 * @author Gernot Belger
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
26 */
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
27 public abstract class AbstractCommonExporter<RESULT extends AbstractCalculationExportableResult, RESULTS extends AbstractCalculationResults<RESULT>> extends AbstractExporter {
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
28
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
29 /** The log used in this exporter. */
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
30 private final Logger log = Logger.getLogger(getClass());
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
31
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
32 /** The log used in this exporter. */
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
33 protected final Logger getLog() {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
34 return this.log;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
35 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
36
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
37 private RESULTS results = null;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
38
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
39 @Override
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
40 public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
41 super.init(outName, request, out, context);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
42 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
43
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
44 @Override
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
45 protected final void addData(final Object d) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
46 /* reset */
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
47 this.results = null;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
48
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
49 if (d instanceof CalculationResult) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
50
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
51 final Object dat = ((CalculationResult) d).getData();
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
52 if (dat != null) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
53 @SuppressWarnings("unchecked")
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
54 final RESULTS result = (RESULTS) dat;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
55 this.results = result;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
56 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
57 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
58 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
59
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
60 protected final RESULTS getResults() {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
61 return this.results;
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
62 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
63
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
64 @Override
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
65 protected final void writeCSVData(final CSVWriter writer) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
66
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
67 final ExportContextCSV exportContext = new ExportContextCSV(this.context, writer, this.results);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
68
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
69 doWriteCSVData(exportContext, this.results);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
70 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
71
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
72 protected final void doWriteCSVData(final ExportContextCSV exportContext, final RESULTS results) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
73
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
74 writeCSVGlobalMetadata(exportContext, results);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
75
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
76 final RiverInfo river = results.getRiver();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
77
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
78 final Class<?> lastResultType = null;
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
79
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
80 for (final AbstractCalculationExportableResult result : results.getResults()) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
81
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
82 final Class<?> resultType = result.getClass();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
83 if (lastResultType == null || lastResultType != resultType) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
84 exportContext.writeBlankLine();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
85 result.writeCSVHeader(exportContext, river);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
86 exportContext.writeBlankLine();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
87 } else
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
88 exportContext.writeCSVLine(new String[] { "#" });
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
89
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
90 result.writeCsv(exportContext);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
91 }
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
92 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
93
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
94 protected abstract void writeCSVGlobalMetadata(final ExportContextCSV exportContext, final RESULTS results);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
95
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
96 /**
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
97 * Formats header with unit and label: msg [unit] (label)
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
98 */
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
99 // TODO: REMOVE, because it has moved to ExportContextCSV
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
100 protected final String msgUnitLabel(final String key, final String unit, final String label) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
101 final String msg = msg(key);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
102 return String.format("%s [%s] (%s)", msg, unit, label);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
103 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
104
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
105 @Override
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
106 protected final void writePDF(final OutputStream out) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
107 doWritePdf(out, this.results);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
108 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
109
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
110 private final void doWritePdf(final OutputStream out, final RESULTS results) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
111
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
112 try {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
113 final ExportContextPDF exportContext = new ExportContextPDF(this.context, results);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
114
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
115 final JasperReporter reporter = new JasperReporter();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
116
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
117 for (final RESULT result : results.getResults()) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
118
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
119 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
120
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
121 writePDFGlobalMetadata(exportContext, source);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
122
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
123 final JasperDesigner design = result.addReport(exportContext, reporter, source);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
124 configureDesign(result, design);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
125 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
126
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
127 reporter.exportPDF(out);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
128 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
129 catch (final JRException je) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
130 getLog().warn("Error generating PDF Report!", je);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
131 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
132 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
133
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
134 /**
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
135 * Override to implement, does nothing by default.
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
136 */
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
137 protected void configureDesign(final RESULT result, final JasperDesigner design) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
138 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
139
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
140 protected abstract void writePDFGlobalMetadata(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
141 }

http://dive4elements.wald.intevation.org