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 :

http://dive4elements.wald.intevation.org