comparison artifacts/src/main/java/org/dive4elements/river/exports/fixings/DeltaWtExporter.java @ 5838:5aa05a7a34b7

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

http://dive4elements.wald.intevation.org