Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/fixings/DeltaWtExporter.java @ 9082:42c15e2f95fb
2.3.4.1.4 Wasserstand falsche Einheit
FixAnalysis PDF start
author | gernotbelger |
---|---|
date | Fri, 25 May 2018 10:44:24 +0200 |
parents | 5e38e2924c07 |
children | 8024e51e828a |
comparison
equal
deleted
inserted
replaced
9081:a0feac6ea1ba | 9082:42c15e2f95fb |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.exports.fixings; | 9 package org.dive4elements.river.exports.fixings; |
10 | 10 |
11 import au.com.bytecode.opencsv.CSVWriter; | 11 import java.io.IOException; |
12 | 12 import java.io.OutputStream; |
13 import java.text.DateFormat; | |
14 import java.text.MessageFormat; | |
15 import java.text.NumberFormat; | |
16 import java.util.ArrayList; | |
17 import java.util.List; | |
18 import java.util.TreeMap; | |
19 | |
20 import org.apache.log4j.Logger; | |
13 import org.dive4elements.artifacts.CallMeta; | 21 import org.dive4elements.artifacts.CallMeta; |
14 | 22 import org.dive4elements.river.artifacts.D4EArtifact; |
23 import org.dive4elements.river.artifacts.access.RiverAccess; | |
15 import org.dive4elements.river.artifacts.model.CalculationResult; | 24 import org.dive4elements.river.artifacts.model.CalculationResult; |
16 | |
17 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod; | 25 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod; |
18 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult; | 26 import org.dive4elements.river.artifacts.model.fixings.FixAnalysisResult; |
19 import org.dive4elements.river.artifacts.model.fixings.QWD; | 27 import org.dive4elements.river.artifacts.model.fixings.QWD; |
20 | |
21 import org.dive4elements.river.artifacts.resources.Resources; | 28 import org.dive4elements.river.artifacts.resources.Resources; |
22 | |
23 import org.dive4elements.river.exports.AbstractExporter; | 29 import org.dive4elements.river.exports.AbstractExporter; |
24 | |
25 import org.dive4elements.river.utils.Formatter; | 30 import org.dive4elements.river.utils.Formatter; |
26 import org.dive4elements.river.utils.KMIndex; | 31 import org.dive4elements.river.utils.KMIndex; |
27 | 32 |
28 import java.io.IOException; | 33 import au.com.bytecode.opencsv.CSVWriter; |
29 import java.io.OutputStream; | |
30 | |
31 import java.text.DateFormat; | |
32 import java.text.MessageFormat; | |
33 import java.text.NumberFormat; | |
34 | |
35 import java.util.ArrayList; | |
36 import java.util.List; | |
37 import java.util.TreeMap; | |
38 | |
39 import org.apache.log4j.Logger; | |
40 | 34 |
41 /** Exports fixation analysis deltaw(t) computation results to csv. */ | 35 /** Exports fixation analysis deltaw(t) computation results to csv. */ |
42 public class DeltaWtExporter | 36 public class DeltaWtExporter extends AbstractExporter { |
43 extends AbstractExporter | |
44 { | |
45 /** Private log. */ | 37 /** Private log. */ |
46 private static Logger log = Logger.getLogger(DeltaWtExporter.class); | 38 private static Logger log = Logger.getLogger(DeltaWtExporter.class); |
47 | 39 |
48 public static final String CSV_KM_HEADER = | 40 public static final String CSV_KM_HEADER = "export.fixings.deltawt.csv.header.km"; |
49 "export.fixings.deltawt.csv.header.km"; | 41 |
50 | 42 public static final String CSV_DELTA_W_HEADER = "export.fixings.deltawt.csv.header.deltaw"; |
51 public static final String CSV_DELTA_W_HEADER = | 43 |
52 "export.fixings.deltawt.csv.header.deltaw"; | 44 public static final String CSV_Q_HEADER = "export.fixings.deltawt.csv.header.q"; |
53 | 45 |
54 public static final String CSV_Q_HEADER = | 46 public static final String CSV_W_HEADER = "export.fixings.deltawt.csv.header.w"; |
55 "export.fixings.deltawt.csv.header.q"; | 47 |
56 | 48 public static final String CSV_TRANGE_HEADER = "export.fixings.deltawt.csv.header.time.range"; |
57 public static final String CSV_W_HEADER = | 49 |
58 "export.fixings.deltawt.csv.header.w"; | 50 public static final String CSV_T_HEADER = "export.fixings.deltawt.csv.header.t"; |
59 | 51 |
60 public static final String CSV_TRANGE_HEADER = | 52 public static final String CSV_T_FORMAT = "export.fixings.deltawt.csv.t.format"; |
61 "export.fixings.deltawt.csv.header.time.range"; | |
62 | |
63 public static final String CSV_T_HEADER = | |
64 "export.fixings.deltawt.csv.header.t"; | |
65 | |
66 public static final String CSV_T_FORMAT = | |
67 "export.fixings.deltawt.csv.t.format"; | |
68 | 53 |
69 public static final String DEFAULT_CSV_KM_HEADER = "km"; | 54 public static final String DEFAULT_CSV_KM_HEADER = "km"; |
70 | 55 |
71 public static final String DEFAULT_CSV_DELTA_W_HEADER = "\u0394 W [cm]"; | 56 public static final String DEFAULT_CSV_DELTA_W_HEADER = "\u0394 W [cm]"; |
72 | 57 |
74 | 59 |
75 public static final String DEFAULT_CSV_Q_HEADER = "Abfluss [m\u00b3/s]"; | 60 public static final String DEFAULT_CSV_Q_HEADER = "Abfluss [m\u00b3/s]"; |
76 | 61 |
77 public static final String DEFAULT_CSV_T_HEADER = "Datum"; | 62 public static final String DEFAULT_CSV_T_HEADER = "Datum"; |
78 | 63 |
79 public static final String DEFAULT_CSV_TRANGE_DESC_HEADER = | 64 public static final String DEFAULT_CSV_TRANGE_DESC_HEADER = "Status"; |
80 "Status"; | 65 |
81 | 66 public static final String CSV_REFERENCE = "export.fixings.deltawt.csv.reference"; |
82 public static final String CSV_REFERENCE = | 67 |
83 "export.fixings.deltawt.csv.reference"; | 68 public static final String CSV_ANALYSIS = "export.fixings.deltawt.csv.analysis"; |
84 | 69 |
85 public static final String CSV_ANALYSIS = | 70 public static final String DEFAULT_CSV_REFERENCE = "B"; |
86 "export.fixings.deltawt.csv.analysis"; | 71 |
87 | 72 public static final String DEFAULT_CSV_ANALYSIS = "A{0,number,integer}"; |
88 public static final String DEFAULT_CSV_REFERENCE = | 73 |
89 "B"; | 74 public static final String DEFAULT_CSV_T_FORMAT = "dd.MM.yyyy"; |
90 | 75 |
91 public static final String DEFAULT_CSV_ANALYSIS = | 76 protected List<KMIndex<AnalysisPeriod[]>> analysisPeriods; |
92 "A{0,number,integer}"; | |
93 | |
94 public static final String DEFAULT_CSV_T_FORMAT = | |
95 "dd.MM.yyyy"; | |
96 | |
97 protected List<KMIndex<AnalysisPeriod []>> analysisPeriods; | |
98 | 77 |
99 protected List<KMIndex<QWD[]>> referenceEvents; | 78 protected List<KMIndex<QWD[]>> referenceEvents; |
100 | 79 |
101 public DeltaWtExporter() { | 80 public DeltaWtExporter() { |
102 analysisPeriods = new ArrayList<KMIndex<AnalysisPeriod []>>(); | 81 this.analysisPeriods = new ArrayList<>(); |
103 referenceEvents = new ArrayList<KMIndex<QWD[]>>(); | 82 this.referenceEvents = new ArrayList<>(); |
104 } | 83 } |
105 | 84 |
106 @Override | 85 @Override |
107 protected void addData(Object d) { | 86 protected void addData(final Object d) { |
108 log.debug("DeltaWtExporter.addData"); | 87 log.debug("DeltaWtExporter.addData"); |
109 if (!(d instanceof CalculationResult)) { | 88 if (!(d instanceof CalculationResult)) { |
110 log.warn("Invalid data type"); | 89 log.warn("Invalid data type"); |
111 return; | 90 return; |
112 } | 91 } |
113 | 92 |
114 Object data = ((CalculationResult)d).getData(); | 93 final Object data = ((CalculationResult) d).getData(); |
115 if (!(data instanceof FixAnalysisResult)) { | 94 if (!(data instanceof FixAnalysisResult)) { |
116 log.warn("Invalid data stored in result."); | 95 log.warn("Invalid data stored in result."); |
117 } | 96 } |
118 FixAnalysisResult result = (FixAnalysisResult)data; | 97 final FixAnalysisResult result = (FixAnalysisResult) data; |
119 analysisPeriods.add(result.getAnalysisPeriods()); | 98 this.analysisPeriods.add(result.getAnalysisPeriods()); |
120 referenceEvents.add(result.getReferenced()); | 99 this.referenceEvents.add(result.getReferenced()); |
121 } | 100 } |
122 | 101 |
123 @Override | 102 @Override |
124 protected void writeCSVData(CSVWriter writer) throws IOException { | 103 protected void writeCSVData(final CSVWriter writer) throws IOException { |
125 | 104 |
126 boolean debug = log.isDebugEnabled(); | 105 final boolean debug = log.isDebugEnabled(); |
127 | 106 |
128 writeCSVHeader(writer); | 107 writeCSVHeader(writer); |
129 | 108 |
130 NumberFormat kmF = getKMFormatter(); | 109 final NumberFormat kmF = getKMFormatter(); |
131 NumberFormat dwF = getDeltaWFormatter(); | 110 final NumberFormat dwF = getDeltaWFormatter(); |
132 NumberFormat qF = getQFormatter(); | 111 final NumberFormat qF = getQFormatter(); |
133 NumberFormat wF = getWFormatter(); | 112 final NumberFormat wF = getWFormatter(); |
134 | 113 |
135 DateFormat dF = getDateFormatter(); | 114 final DateFormat dF = getDateFormatter(); |
136 | 115 |
137 TreeMap<Double, ArrayList<String []>> sorted = | 116 final TreeMap<Double, ArrayList<String[]>> sorted = new TreeMap<>(); |
138 new TreeMap<Double, ArrayList<String []>>(); | 117 |
139 | 118 final String referenceS = getReference(); |
140 String referenceS = getReference(); | 119 |
141 | 120 for (final KMIndex<QWD[]> reference : this.referenceEvents) { |
142 for (KMIndex<QWD[]> reference: referenceEvents) { | 121 |
143 | 122 for (final KMIndex.Entry<QWD[]> kmEntry : reference) { |
144 for (KMIndex.Entry<QWD[]> kmEntry: reference) { | 123 |
145 | 124 final Double km = kmEntry.getKm(); |
146 Double km = kmEntry.getKm(); | 125 |
147 | 126 ArrayList<String[]> list = sorted.get(km); |
148 ArrayList<String []> list = sorted.get(km); | |
149 | 127 |
150 if (list == null) { | 128 if (list == null) { |
151 list = new ArrayList<String []>(); | 129 list = new ArrayList<>(); |
152 sorted.put(km, list); | 130 sorted.put(km, list); |
153 } | 131 } |
154 | 132 |
155 String kmS = kmF.format(kmEntry.getKm()); | 133 final String kmS = kmF.format(kmEntry.getKm()); |
156 for (QWD qwd: kmEntry.getValue()) { | 134 for (final QWD qwd : kmEntry.getValue()) { |
157 String deltaWS = dwF.format(qwd.getDeltaW()); | 135 final String deltaWS = dwF.format(qwd.getDeltaW()); |
158 String qS = qF.format(qwd.getQ()); | 136 final String qS = qF.format(qwd.getQ()); |
159 String wS = wF.format(qwd.getW()); | 137 final String wS = wF.format(qwd.getW()); |
160 String dateS = dF.format(qwd.getDate()); | 138 final String dateS = dF.format(qwd.getDate()); |
161 | 139 |
162 list.add(new String[] { | 140 list.add(new String[] { kmS, dateS, qS, wS, referenceS, deltaWS }); |
163 kmS, | |
164 dateS, | |
165 qS, | |
166 wS, | |
167 referenceS, | |
168 deltaWS | |
169 }); | |
170 } | 141 } |
171 } | 142 } |
172 } | 143 } |
173 | 144 |
174 if (debug) { | 145 if (debug) { |
175 log.debug("AnalysisPeriods: " + analysisPeriods.size()); | 146 log.debug("AnalysisPeriods: " + this.analysisPeriods.size()); |
176 } | 147 } |
177 | 148 |
178 String analysisTemplate = getAnalysisTemplate(); | 149 final String analysisTemplate = getAnalysisTemplate(); |
179 | 150 |
180 for (KMIndex<AnalysisPeriod []> periods: analysisPeriods) { | 151 for (final KMIndex<AnalysisPeriod[]> periods : this.analysisPeriods) { |
181 | 152 |
182 for (KMIndex.Entry<AnalysisPeriod []> kmEntry: periods) { | 153 for (final KMIndex.Entry<AnalysisPeriod[]> kmEntry : periods) { |
183 | 154 |
184 Double km = kmEntry.getKm(); | 155 final Double km = kmEntry.getKm(); |
185 | 156 |
186 ArrayList<String []> list = sorted.get(km); | 157 ArrayList<String[]> list = sorted.get(km); |
187 | 158 |
188 if (list == null) { | 159 if (list == null) { |
189 list = new ArrayList<String []>(); | 160 list = new ArrayList<>(); |
190 sorted.put(km, list); | 161 sorted.put(km, list); |
191 } | 162 } |
192 | 163 |
193 String kmS = kmF.format(kmEntry.getKm()); | 164 final String kmS = kmF.format(kmEntry.getKm()); |
194 int analysisCount = 1; | 165 int analysisCount = 1; |
195 | 166 |
196 for (AnalysisPeriod period: kmEntry.getValue()) { | 167 for (final AnalysisPeriod period : kmEntry.getValue()) { |
197 // Typically resulting in A1,A2... | 168 // Typically resulting in A1,A2... |
198 String analyisS = MessageFormat.format(analysisTemplate, | 169 final String analyisS = MessageFormat.format(analysisTemplate, analysisCount); |
199 analysisCount); | 170 final QWD[] qwds = period.getQWDs(); |
200 QWD [] qwds = period.getQWDs(); | |
201 | 171 |
202 if (qwds != null) { | 172 if (qwds != null) { |
203 for (QWD qwd: qwds) { | 173 for (final QWD qwd : qwds) { |
204 String deltaWS = dwF.format(qwd.getDeltaW()); | 174 final String deltaWS = dwF.format(qwd.getDeltaW()); |
205 String qS = qF.format(qwd.getQ()); | 175 final String qS = qF.format(qwd.getQ()); |
206 String wS = wF.format(qwd.getW()); | 176 final String wS = wF.format(qwd.getW()); |
207 String dateS = dF.format(qwd.getDate()); | 177 final String dateS = dF.format(qwd.getDate()); |
208 | 178 |
209 list.add(new String[] { | 179 list.add(new String[] { kmS, dateS, qS, wS, analyisS, deltaWS }); |
210 kmS, | |
211 dateS, | |
212 qS, | |
213 wS, | |
214 analyisS, | |
215 deltaWS }); | |
216 } | 180 } |
217 } | 181 } |
218 ++analysisCount; | 182 ++analysisCount; |
219 } | 183 } |
220 } | 184 } |
221 } | 185 } |
222 | 186 |
223 for (ArrayList<String []> list: sorted.values()) { | 187 for (final ArrayList<String[]> list : sorted.values()) { |
224 for (String [] row: list) { | 188 for (final String[] row : list) { |
225 writer.writeNext(row); | 189 writer.writeNext(row); |
226 } | 190 } |
227 } | 191 } |
228 | 192 |
229 writer.flush(); | 193 writer.flush(); |
230 } | 194 } |
231 | 195 |
232 /** Template to create "State" strings like A1,A2... */ | 196 /** Template to create "State" strings like A1,A2... */ |
233 protected String getAnalysisTemplate() { | 197 protected String getAnalysisTemplate() { |
234 return Resources.getMsg( | 198 return Resources.getMsg(this.context.getMeta(), CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS); |
235 context.getMeta(), | |
236 CSV_ANALYSIS, DEFAULT_CSV_ANALYSIS); | |
237 } | 199 } |
238 | 200 |
239 protected String getReference() { | 201 protected String getReference() { |
240 return Resources.getMsg( | 202 return Resources.getMsg(this.context.getMeta(), CSV_REFERENCE, DEFAULT_CSV_REFERENCE); |
241 context.getMeta(), | |
242 CSV_REFERENCE, DEFAULT_CSV_REFERENCE); | |
243 } | 203 } |
244 | 204 |
245 protected NumberFormat getKMFormatter() { | 205 protected NumberFormat getKMFormatter() { |
246 return Formatter.getFixDeltaWKM(context); | 206 return Formatter.getFixDeltaWKM(this.context); |
247 } | 207 } |
248 | 208 |
249 protected NumberFormat getDeltaWFormatter() { | 209 protected NumberFormat getDeltaWFormatter() { |
250 return Formatter.getFixDeltaWDeltaW(context); | 210 return Formatter.getFixDeltaWDeltaW(this.context); |
251 } | 211 } |
252 | 212 |
213 @Override | |
253 protected NumberFormat getQFormatter() { | 214 protected NumberFormat getQFormatter() { |
254 return Formatter.getFixDeltaWQ(context); | 215 return Formatter.getFixDeltaWQ(this.context); |
255 } | 216 } |
256 | 217 |
218 @Override | |
257 protected NumberFormat getWFormatter() { | 219 protected NumberFormat getWFormatter() { |
258 return Formatter.getFixDeltaWW(context); | 220 return Formatter.getFixDeltaWW(this.context); |
259 } | 221 } |
260 | 222 |
261 protected DateFormat getDateFormatter() { | 223 protected DateFormat getDateFormatter() { |
262 CallMeta meta = context.getMeta(); | 224 final CallMeta meta = this.context.getMeta(); |
263 return Formatter.getDateFormatter( | 225 return Formatter.getDateFormatter(meta, Resources.getMsg(meta, CSV_T_FORMAT, DEFAULT_CSV_T_FORMAT)); |
264 meta, | 226 } |
265 Resources.getMsg( | 227 |
266 meta, | 228 protected void writeCSVHeader(final CSVWriter writer) { |
267 CSV_T_FORMAT, | |
268 DEFAULT_CSV_T_FORMAT)); | |
269 } | |
270 | |
271 protected void writeCSVHeader(CSVWriter writer) { | |
272 log.debug("DeltaWtExporter.writeCSVHeader"); | 229 log.debug("DeltaWtExporter.writeCSVHeader"); |
273 | 230 |
274 /* issue825 | 231 /* |
275 km; Ereignis, Abfluss, GEMESSENER Wasserstand; | 232 * issue825 |
276 Status (RECHTSBÜNDIG), del W | 233 * km; Ereignis, Abfluss, GEMESSENER Wasserstand; |
277 */ | 234 * Status (RECHTSBÜNDIG), del W |
278 | 235 */ |
279 writer.writeNext(new String[] { | 236 final RiverAccess river = new RiverAccess((D4EArtifact) this.master); |
280 msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), | 237 final String unit = river.getRiver().getWstUnit().getName(); |
281 msg(CSV_T_HEADER, DEFAULT_CSV_T_HEADER), | 238 |
282 msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), | 239 writer.writeNext(new String[] { msg(CSV_KM_HEADER, DEFAULT_CSV_KM_HEADER), msg(CSV_T_HEADER, DEFAULT_CSV_T_HEADER), |
283 msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER), | 240 msg(CSV_Q_HEADER, DEFAULT_CSV_Q_HEADER), msg(CSV_W_HEADER, DEFAULT_CSV_W_HEADER, new Object[] { unit }), |
284 msg(CSV_TRANGE_HEADER, DEFAULT_CSV_TRANGE_DESC_HEADER), | 241 msg(CSV_TRANGE_HEADER, DEFAULT_CSV_TRANGE_DESC_HEADER), msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER) }); |
285 msg(CSV_DELTA_W_HEADER, DEFAULT_CSV_DELTA_W_HEADER) | 242 } |
286 }); | 243 |
287 } | 244 @Override |
288 | 245 protected void writePDF(final OutputStream out) { |
289 @Override | |
290 protected void writePDF(OutputStream out) { | |
291 // TODO: Implement me! | 246 // TODO: Implement me! |
247 // wird doch NICHT erledigt vom WaterlevelExporter | |
292 } | 248 } |
293 } | 249 } |
294 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 250 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |