annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java @ 9455:5f81d3f7b82b

pdf export disabled flag
author gernotbelger
date Thu, 23 Aug 2018 16:32:53 +0200
parents 217e8e59c386
children
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
9353
217e8e59c386 sinfo flowdepth multiple pairs allowed; bugfix arrayOutOfRange hasTkh==false && useTkh==true
gernotbelger
parents: 9200
diff changeset
78 Class<?> lastResultType = null;
9195
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
9353
217e8e59c386 sinfo flowdepth multiple pairs allowed; bugfix arrayOutOfRange hasTkh==false && useTkh==true
gernotbelger
parents: 9200
diff changeset
90 lastResultType = resultType;
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
91 result.writeCsv(exportContext);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
92 }
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
93 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
94
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
95 protected abstract void writeCSVGlobalMetadata(final ExportContextCSV exportContext, final RESULTS results);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
96
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
97 @Override
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
98 protected final void writePDF(final OutputStream out) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
99 doWritePdf(out, this.results);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
100 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
101
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
102 private final void doWritePdf(final OutputStream out, final RESULTS results) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
103
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
104 try {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
105 final ExportContextPDF exportContext = new ExportContextPDF(this.context, results);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
106
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
107 final JasperReporter reporter = new JasperReporter();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
108
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
109 for (final RESULT result : results.getResults()) {
9455
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
110 if (result.pdfExportEnabled()) { // TODO: only works for multiple result: if singleresult is disabled, ugly errors occur, 'cause no pdf will be
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
111 // created at all
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
112
9455
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
113 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
114
9455
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
115 writePDFGlobalMetadata(exportContext, source);
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
116
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
117 final JasperDesigner design = result.addReport(exportContext, reporter, source);
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
118 configureDesign(result, design);
5f81d3f7b82b pdf export disabled flag
gernotbelger
parents: 9353
diff changeset
119 }
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
120 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
121
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
122 reporter.exportPDF(out);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
123 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
124 catch (final JRException je) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
125 getLog().warn("Error generating PDF Report!", je);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
126 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
127 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
128
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
129 /**
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
130 * Override to implement, does nothing by default.
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
131 */
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
132 protected void configureDesign(final RESULT result, final JasperDesigner design) {
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 protected abstract void writePDFGlobalMetadata(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
136 }

http://dive4elements.wald.intevation.org