Mercurial > dive4elements > river
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 : |