comparison artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java @ 9195:a4121ec450d6

'ca.'-issue ExportContextCSV+PDF separated uinfo.inundationduration url export
author gernotbelger
date Fri, 29 Jun 2018 14:52:54 +0200
parents 3931e8741f53
children 740d65e4aa14
comparison
equal deleted inserted replaced
9191:f692f5a0536a 9195:a4121ec450d6
8 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
9 */ 9 */
10 package org.dive4elements.river.artifacts.common; 10 package org.dive4elements.river.artifacts.common;
11 11
12 import java.text.DateFormat; 12 import java.text.DateFormat;
13 import java.text.NumberFormat;
14 import java.util.ArrayList; 13 import java.util.ArrayList;
15 import java.util.Collection; 14 import java.util.Collection;
16 import java.util.Date; 15 import java.util.Date;
17 import java.util.Locale; 16 import java.util.Locale;
18 17
20 import org.dive4elements.artifacts.CallContext; 19 import org.dive4elements.artifacts.CallContext;
21 import org.dive4elements.artifacts.CallMeta; 20 import org.dive4elements.artifacts.CallMeta;
22 import org.dive4elements.river.FLYS; 21 import org.dive4elements.river.FLYS;
23 import org.dive4elements.river.artifacts.resources.Resources; 22 import org.dive4elements.river.artifacts.resources.Resources;
24 import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings; 23 import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings;
25 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
26 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; 24 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
27 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; 25 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
28 import org.dive4elements.river.artifacts.sinfo.util.WstInfo; 26 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
29 import org.dive4elements.river.utils.Formatter;
30 27
31 import au.com.bytecode.opencsv.CSVWriter; 28 import au.com.bytecode.opencsv.CSVWriter;
32 29
33 /** 30 /**
34 * @author Domenico Nardi Tironi 31 * @author Domenico Nardi Tironi
35 * 32 *
36 */ 33 */
37 public final class ExportContextCSV { 34 public final class ExportContextCSV extends AbstractExportContext {
38 35
39 private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator"; 36 private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
40 37
41 private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding"; 38 private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
42 39
48 45
49 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel"; 46 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
50 47
51 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original"; 48 private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
52 49
53 private NumberFormat qFormat = null;
54
55 private NumberFormat flowDepthFormat = null;
56
57 private NumberFormat kmFormat = null;
58
59 /** The CallContext object. */
60 private final CallContext context;
61
62 private final CSVWriter writer; 50 private final CSVWriter writer;
63 51
64 public ExportContextCSV(final CallContext context, final CSVWriter writer) { 52 private final AbstractCalculationResults<?> results;
65 this.context = context; 53
54 public ExportContextCSV(final CallContext context, final CSVWriter writer, final AbstractCalculationResults<?> results) {
55 super(context, results);
56
66 this.writer = writer; 57 this.writer = writer;
67 } 58 this.results = results;
68
69 private String msg(final String key) {
70 return Resources.getMsg(this.context.getMeta(), key, key);
71 }
72
73 public String msg(final String key, final Object... args) {
74 return Resources.getMsg(this.context.getMeta(), key, key, args);
75 } 59 }
76 60
77 public final void writeCSVMetaEntry(final String message, final Object... messageArgs) { 61 public final void writeCSVMetaEntry(final String message, final Object... messageArgs) {
78 62
79 final CallMeta meta = this.context.getMeta(); 63 final CallMeta meta = getContext().getMeta();
80 64
81 this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) }); 65 this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
82 } 66 }
83 67
84 public void writeBlankLine() { 68 public void writeBlankLine() {
99 83
100 public String formatCsvHeader(final IResultType type) { 84 public String formatCsvHeader(final IResultType type) {
101 return msg(type.getCsvHeader()); 85 return msg(type.getCsvHeader());
102 } 86 }
103 87
104 public String formatRowValue(final ResultRow row, final IResultType type) { 88 public final void writeCSVGlobalMetadataDefaults() {
105 return row.exportValue(this.context, type);
106 }
107
108 public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
109 source.addMetaData(key, type.getPdfHeader(this.context.getMeta()));
110 }
111
112 public final void writeCSVGlobalMetadataDefaults(final AbstractCalculationResults<?> results) {
113 // TODO: results as member 89 // TODO: results as member
114 final String calcModeLabel = results.getCalcModeLabel(); 90 final String calcModeLabel = this.results.getCalcModeLabel();
115 final RiverInfo river = results.getRiver(); 91 final RiverInfo river = this.results.getRiver();
116 final DoubleRange calcRange = results.getCalcRange(); 92 final DoubleRange calcRange = this.results.getCalcRange();
117 93
118 writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel); 94 writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
119 95
120 // "# FLYS-Version: " 96 // "# FLYS-Version: "
121 writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION); 97 writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
122 98
123 // "# Bearbeiter: " 99 // "# Bearbeiter: "
124 writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser()); 100 writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), this.results.getUser());
125 101
126 // "# Datum der Erstellung: " 102 // "# Datum der Erstellung: "
127 final Locale locale = Resources.getLocale(this.context.getMeta()); 103 final Locale locale = Resources.getLocale(getContext().getMeta());
128 final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); 104 final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
129 writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date())); 105 writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
130 106
131 // "# Gewässer: " 107 // "# Gewässer: "
132 writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName()); 108 writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
157 133
158 // "# Jahr/Zeitraum der Wasserspiegellage: " 134 // "# Jahr/Zeitraum der Wasserspiegellage: "
159 final int year = wst.getYear(); 135 final int year = wst.getYear();
160 if (year > 0) 136 if (year > 0)
161 writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year)); 137 writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
162 }
163
164 // copy from AbstractExporter TODO merge with ExportContextPDF
165 protected NumberFormat getKmFormatter() {
166
167 if (this.kmFormat == null)
168 this.kmFormat = Formatter.getWaterlevelKM(this.context);
169
170 return this.kmFormat;
171 }
172
173 public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final String msg) {
174 source.addMetaData(key, msg);
175 }
176
177 public NumberFormat getQFormatter() {
178 if (this.qFormat == null)
179 this.qFormat = Formatter.getWaterlevelQ(this.context);
180
181 return this.qFormat;
182 }
183
184 public final NumberFormat getFlowDepthFormatter() {
185 if (this.flowDepthFormat == null)
186 this.flowDepthFormat = Formatter.getFlowDepth(this.context);
187
188 return this.flowDepthFormat;
189 } 138 }
190 139
191 /** 140 /**
192 * Formats header with unit: msg [unit] 141 * Formats header with unit: msg [unit]
193 */ 142 */
226 final String msg = msg(typeWithUnit.getCsvHeader()); 175 final String msg = msg(typeWithUnit.getCsvHeader());
227 final String unit = msg(typeWithUnit.getUnit()); 176 final String unit = msg(typeWithUnit.getUnit());
228 return String.format("%s [%s] (%s)", msg, unit, label); 177 return String.format("%s [%s] (%s)", msg, unit, label);
229 } 178 }
230 179
231 public String msgPdf(final SInfoResultType type) {
232 return type.getPdfHeader(this.context.getMeta());
233 }
234
235 public void writeTitleForTabs(final String tabTitleMsg, final int colSize) { 180 public void writeTitleForTabs(final String tabTitleMsg, final int colSize) {
236 181
237 final Collection<String> title = new ArrayList<>(colSize); 182 final Collection<String> title = new ArrayList<>(colSize);
238 title.add(msg("export_csv_title") + msg(tabTitleMsg)); 183 title.add(msg("export_csv_title") + msg(tabTitleMsg));
239 writeCSVLine(title.toArray(new String[colSize])); 184 writeCSVLine(title.toArray(new String[colSize]));

http://dive4elements.wald.intevation.org