comparison artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java @ 9150:23945061daec

gigantic refactoring: exporter, result, results to support multiple jaspers -> collisions
author gernotbelger
date Thu, 14 Jun 2018 16:56:31 +0200
parents 41f4bc83aa7a
children a4121ec450d6
comparison
equal deleted inserted replaced
9149:5be112fba832 9150:23945061daec
8 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
9 */ 9 */
10 package org.dive4elements.river.artifacts.uinfo.salix; 10 package org.dive4elements.river.artifacts.uinfo.salix;
11 11
12 import java.io.OutputStream; 12 import java.io.OutputStream;
13 import java.util.ArrayList;
14 import java.util.Collection;
15 13
16 import org.apache.log4j.Logger; 14 import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
17 import org.dive4elements.river.artifacts.common.GeneralResultType; 15 import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
16 import org.dive4elements.river.artifacts.common.ExportContextCSV;
18 import org.dive4elements.river.artifacts.common.I18NStrings; 17 import org.dive4elements.river.artifacts.common.I18NStrings;
19 import org.dive4elements.river.artifacts.common.JasperReporter; 18 import org.dive4elements.river.artifacts.common.JasperReporter;
20 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; 19 import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
21 import org.dive4elements.river.artifacts.common.ResultRow;
22 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; 20 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
23 import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
24 import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
25 21
26 import au.com.bytecode.opencsv.CSVWriter; 22 import au.com.bytecode.opencsv.CSVWriter;
27 import net.sf.jasperreports.engine.JRException; 23 import net.sf.jasperreports.engine.JRException;
28 24
29 /** 25 /**
30 * @author Domenico Nardi Tironi 26 * @author Domenico Nardi Tironi
31 * 27 *
32 */ 28 */
33 public class SalixLineExporter extends AbstractUInfoExporter<SalixLineCalculationResult, SalixLineCalculationResults> { 29 public class SalixLineExporter extends AbstractCommonExporter<SalixLineCalculationResults> {
34
35 /** The log used in this exporter. */
36 private static Logger log = Logger.getLogger(SalixLineExporter.class);
37
38 private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
39 30
40 @Override 31 @Override
41 protected Logger getLog() { 32 protected void doWritePdf(final OutputStream out, final SalixLineCalculationResults results) {
42 return log; 33 // TODO: Move to super
43 }
44
45 @Override
46 protected void writeCSVGlobalMetadata(final CSVWriter writer, final SalixLineCalculationResults results) {
47 log.info("SalixLineExporter.writeCSVMeta");
48
49 super.writeCSVGlobalMetadataDefaults(writer, results);
50
51 // "# Höhensystem des Flusses: "
52 writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
53
54 // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
55
56 // "# Auswerter: "
57 writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
58 // "# Bezugspegel: "
59 writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
60
61 // "# Jahr/Zeitraum der Wasserspiegellage: "
62 // final int year = wst.getYear();
63 // if (year > 0)
64 writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
65
66 }
67
68 private void writeRegionalEffectsCSVMetadata(final CSVWriter writer) {
69 final String main = "uinfo.export.csv.meta.header.salix.regional";
70 // "##Regional wirkende Eingriffe"
71 writeCSVMetaEntry(writer, main);
72 writeRegionalCommonCSVMeta(writer);
73 }
74
75 private void writeRegionalCommonCSVMeta(final CSVWriter writer) {
76 final String main = "uinfo.export.csv.meta.header.salix";
77 // "# Szenariotyp: "
78 writeCSVMetaEntry(writer, main + ".szenariotyp");
79 // "# Teilabschnitt: "
80 writeCSVMetaEntry(writer, main + ".teilabschnitt");
81 // "# Mittelwasserspiegellagenänderung: "
82 writeCSVMetaEntry(writer, main + ".mwspiegellaenderung");
83 }
84
85 private void writeExtendedRegionalEffectsCSVMetadata(final CSVWriter writer) {
86 final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
87 // "##Überregional wirkende Eingriffe"
88 writeCSVMetaEntry(writer, main);
89
90 writeRegionalCommonCSVMeta(writer);
91 }
92
93 private void writeHistoricalViewCSVMetadata(final CSVWriter writer) {
94 final String main = "uinfo.export.csv.meta.header.salix.historical";
95 // "##Historische Betrachtung"
96 writeCSVMetaEntry(writer, main);
97
98 final String mainSub = "uinfo.export.csv.meta.header.salix";
99 // "# Szenariotyp: "
100 writeCSVMetaEntry(writer, mainSub + ".szenariotyp");
101 // "# Teilabschnitt: "
102 writeCSVMetaEntry(writer, mainSub + ".teilabschnitt");
103
104 // "# Art des Zeitraums: "
105 writeCSVMetaEntry(writer, main + ".zeitart");
106 // "# Historischer Zeitpunkt: "
107 writeCSVMetaEntry(writer, main + ".zeitpunkt");
108 }
109
110 @Override
111 protected void writeCSVResultMetadata(final CSVWriter writer, final SalixLineCalculationResults results, final SalixLineCalculationResult result) {
112 writeRegionalEffectsCSVMetadata(writer);
113 writer.writeNext(new String[] { "" }); // break line
114 writeExtendedRegionalEffectsCSVMetadata(writer);
115 writer.writeNext(new String[] { "" }); // break line
116 writeHistoricalViewCSVMetadata(writer);
117 }
118
119 /**
120 * Write the header, with different headings depending on whether at a
121 * gauge or at a location.
122 *
123 * @param river
124 * @param useTkh
125 */
126 @Override
127 protected void writeCSVHeader(final CSVWriter writer, final SalixLineCalculationResults results, final RiverInfo river) {
128 log.info("FlowDepthExporter.writeCSVHeader");
129
130 final Collection<String> header = new ArrayList<>(4);
131
132 header.add(msg(GeneralResultType.station.getCsvHeader()));
133 // header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
134
135 header.add(msg(UInfoResultType.salixline.getCsvHeader()));
136 // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
137 // ausblenden!...!..!!
138 header.add(msg(UInfoResultType.salixlinehist.getCsvHeader()));
139 header.add(msg(UInfoResultType.salixlinescen.getCsvHeader()));
140 writer.writeNext(header.toArray(new String[header.size()]));
141 }
142
143 /**
144 * Format a row of a flow depth result into an array of string, both used by csv and pdf
145 *
146 * @param pdf
147 *
148 * @param useTkh
149 */
150 @Override
151 protected String[] formatRow(final SalixLineCalculationResults results, final ResultRow row, final ExportMode mode) {
152
153 final Collection<String> lines = new ArrayList<>(3);
154
155 lines.add(row.exportValue(this.context, GeneralResultType.station));
156 lines.add(row.exportValue(this.context, UInfoResultType.salixline));
157
158 // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
159 // ausblenden!...!..!!
160 lines.add(row.exportValue(this.context, UInfoResultType.salixlinehist));
161 lines.add(row.exportValue(this.context, UInfoResultType.salixlinescen));
162 return lines.toArray(new String[lines.size()]);
163 }
164
165 @Override
166 protected final void addJRMetaData(final MetaAndTableJRDataSource source, final SalixLineCalculationResults results) {
167
168 super.addJRMetaData(source, results);
169
170 /* additional column headings */
171 source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
172
173 source.addMetaData("salix_line", UInfoResultType.salixline.getPdfHeader(this.context.getMeta()));
174 // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
175 // ausblenden!...!..!!
176 source.addMetaData("salix_line_hist", UInfoResultType.salixlinehist.getPdfHeader(this.context.getMeta()));
177 source.addMetaData("salix_line_scen", UInfoResultType.salixlinescen.getPdfHeader(this.context.getMeta()));
178 }
179
180 @Override
181 protected void writePDF(final OutputStream out) {
182 try { 34 try {
183 final MetaAndTableJRDataSource source = createJRData(this.data); 35 final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
184 36
185 final JasperReporter reporter = new JasperReporter(); 37 final JasperReporter reporter = new JasperReporter();
186 reporter.addReport(JASPER_FILE, source); 38
39 for (final AbstractCalculationExportableResult<SalixLineCalculationResults> result : results.getResults()) {
40 final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
41 getHelper().addJRMetaDataUSINFO(source, results);
42
43 result.addReport(exportContextCSV, results, reporter, source);
44 }
45
187 reporter.exportPDF(out); 46 reporter.exportPDF(out);
188 } 47 }
189 catch (final JRException je) { 48 catch (final JRException je) {
190 getLog().warn("Error generating PDF Report!", je); 49 getLog().warn("Error generating PDF Report!", je);
191 } 50 }
51 }
192 52
53 @Override
54 protected void doWriteCSVData(final CSVWriter writer, final SalixLineCalculationResults results) {
55 // TODO: Diesen Ablauf in super? - ist etwas anders bei den globalen metadaten
56
57 // TODO: move results into context?
58 final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
59
60 getLog().info("writeCSVData");
61
62 /* write as csv */
63 exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
64
65 // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
66
67 // "# Höhensystem des Flusses: "
68 exportContextCSV.writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
69
70 // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
71
72 // "# Auswerter: "
73 exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
74 // "# Bezugspegel: "
75 exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
76
77 // "# Jahr/Zeitraum der Wasserspiegellage: "
78 // final int year = wst.getYear();
79 // if (year > 0)
80 exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
81
82 final RiverInfo river = results.getRiver();
83
84 final Class<?> lastResultType = null;
85
86 for (final AbstractCalculationExportableResult<SalixLineCalculationResults> result : results.getResults()) {
87
88 final Class<?> resultType = result.getClass();
89 if (lastResultType == null || lastResultType != resultType) {
90 exportContextCSV.writeBlankLine();
91 result.writeCSVHeader(exportContextCSV, results, river);
92 exportContextCSV.writeBlankLine();
93 } else
94 exportContextCSV.writeCSVLine(new String[] { "#" });
95
96 result.writeCsv(exportContextCSV, results);
97 }
193 } 98 }
194 99
195 } 100 }

http://dive4elements.wald.intevation.org