annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java @ 9215:0fc9c82e744e

work on collison, flood_duration
author gernotbelger
date Tue, 03 Jul 2018 17:00:48 +0200
parents 6393e05a9610
children 217e8e59c386
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 @Override
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
97 protected final void writePDF(final OutputStream out) {
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
98 doWritePdf(out, this.results);
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
99 }
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
100
9195
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
101 private final void doWritePdf(final OutputStream out, final RESULTS results) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
102
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
103 try {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
104 final ExportContextPDF exportContext = new ExportContextPDF(this.context, results);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
105
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
106 final JasperReporter reporter = new JasperReporter();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
107
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
108 for (final RESULT result : results.getResults()) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
109
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
110 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
111
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
112 writePDFGlobalMetadata(exportContext, source);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
113
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
114 final JasperDesigner design = result.addReport(exportContext, reporter, source);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
115 configureDesign(result, design);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
116 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
117
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
118 reporter.exportPDF(out);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
119 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
120 catch (final JRException je) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
121 getLog().warn("Error generating PDF Report!", je);
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
122 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
123 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
124
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
125 /**
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
126 * Override to implement, does nothing by default.
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
127 */
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
128 protected void configureDesign(final RESULT result, final JasperDesigner design) {
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
129 }
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
130
a4121ec450d6 'ca.'-issue
gernotbelger
parents: 9151
diff changeset
131 protected abstract void writePDFGlobalMetadata(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
9151
bb929b444ea5 vergessen
gernotbelger
parents:
diff changeset
132 }

http://dive4elements.wald.intevation.org