Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/ReferenceCurveExporter.java @ 2576:0611ae467e4a
Stub to export the 'W (cm)' column of reference curves conditionally on Gauge presence.
flys-artifacts/trunk@4114 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Mon, 05 Mar 2012 10:00:06 +0000 |
parents | 8bacd0ce3704 |
children | 4514b0158b10 |
comparison
equal
deleted
inserted
replaced
2575:475dd07c2cb1 | 2576:0611ae467e4a |
---|---|
1 package de.intevation.flys.exports; | 1 package de.intevation.flys.exports; |
2 | 2 |
3 import java.io.IOException; | 3 import java.io.IOException; |
4 import java.io.OutputStream; | 4 import java.io.OutputStream; |
5 import java.text.NumberFormat; | 5 import java.text.NumberFormat; |
6 | |
6 import java.util.ArrayList; | 7 import java.util.ArrayList; |
8 import java.util.Arrays; | |
9 import java.util.Date; | |
7 import java.util.List; | 10 import java.util.List; |
8 | 11 import java.util.LinkedList; |
12 import java.util.Locale; | |
9 import java.util.Map; | 13 import java.util.Map; |
10 import java.util.HashMap; | 14 import java.util.HashMap; |
11 import java.util.Date; | 15 |
12 import java.text.DateFormat; | 16 import java.text.DateFormat; |
13 import java.util.Locale; | |
14 | 17 |
15 import org.w3c.dom.Document; | 18 import org.w3c.dom.Document; |
16 | 19 |
17 import org.apache.log4j.Logger; | 20 import org.apache.log4j.Logger; |
18 | 21 |
34 import de.intevation.flys.artifacts.model.WWQQJRDataSource; | 37 import de.intevation.flys.artifacts.model.WWQQJRDataSource; |
35 import de.intevation.flys.artifacts.resources.Resources; | 38 import de.intevation.flys.artifacts.resources.Resources; |
36 | 39 |
37 import de.intevation.flys.utils.FLYSUtils; | 40 import de.intevation.flys.utils.FLYSUtils; |
38 | 41 |
42 | |
39 /** | 43 /** |
40 * (CSV)Exporter for Reference Curves. | 44 * (CSV)Exporter for Reference Curves. |
41 */ | 45 */ |
42 public class ReferenceCurveExporter extends AbstractExporter { | 46 public class ReferenceCurveExporter extends AbstractExporter { |
43 | 47 |
44 /** The logger used in this exporter. */ | 48 /** The logger used in this exporter. */ |
45 private static Logger logger = Logger.getLogger(ReferenceCurveExporter.class); | 49 private static Logger logger = Logger.getLogger(ReferenceCurveExporter.class); |
46 | 50 |
47 | |
48 public static final String RC_CSV_KM_HEADER = | 51 public static final String RC_CSV_KM_HEADER = |
49 "export.reference_curve.csv.header.km"; | 52 "export.reference_curve.csv.header.km"; |
50 | 53 |
51 public static final String RC_CSV_W_CM_HEADER = | 54 public static final String RC_CSV_W_CM_HEADER = |
52 "export.reference_curve.csv.header.w.cm"; | 55 "export.reference_curve.csv.header.w.cm"; |
71 public static final String JASPER_FILE = "export.reference_curve.pdf.file"; | 74 public static final String JASPER_FILE = "export.reference_curve.pdf.file"; |
72 | 75 |
73 /** The storage that contains all WKms objects for the different facets. */ | 76 /** The storage that contains all WKms objects for the different facets. */ |
74 protected List<WWQQ[]> data; | 77 protected List<WWQQ[]> data; |
75 | 78 |
76 | 79 protected boolean startAtGauge = false; |
80 | |
81 protected boolean endAtGauge = false; | |
82 | |
83 | |
77 public void init(Document request, OutputStream out, CallContext context) { | 84 public void init(Document request, OutputStream out, CallContext context) { |
78 logger.debug("ReferenceCurveExporter.init"); | 85 logger.debug("ReferenceCurveExporter.init"); |
79 | 86 |
80 super.init(request, out, context); | 87 super.init(request, out, context); |
81 | 88 |
107 } | 114 } |
108 | 115 |
109 | 116 |
110 /** | 117 /** |
111 * Adds given data. | 118 * Adds given data. |
112 * @param d a WWQQ[]. | 119 * @param d A CalculationResult with WWQQ[]. |
113 */ | 120 */ |
114 @Override | 121 @Override |
115 protected void addData(Object d) { | 122 protected void addData(Object d) { |
116 logger.debug("ReferenceCurveExporter.addData"); | 123 logger.debug("ReferenceCurveExporter.addData"); |
117 | 124 |
118 if (d instanceof CalculationResult) { | 125 if (d instanceof CalculationResult) { |
119 d = ((CalculationResult)d).getData(); | 126 d = ((CalculationResult)d).getData(); |
120 if (d instanceof WWQQ []) { | 127 if (d instanceof WWQQ []) { |
121 data.add((WWQQ [])d); | 128 WWQQ[] wwqqs = (WWQQ []) d; |
129 for (WWQQ wwqq: wwqqs) { | |
130 if (wwqq.startAtGauge()) { | |
131 startAtGauge = true; | |
132 } | |
133 // TODO this one probably has to be inverted. | |
134 if (wwqq.endAtGauge()) { | |
135 endAtGauge = true; | |
136 } | |
137 } | |
138 data.add(wwqqs); | |
122 logger.debug("ReferenceCurveExporter.addData wwqq[]."); | 139 logger.debug("ReferenceCurveExporter.addData wwqq[]."); |
123 } | 140 } |
124 else { | 141 else { |
125 logger.warn("ReferenceCurveExporter.addData/1 unknown type (" | 142 logger.warn("ReferenceCurveExporter.addData/1 unknown type (" |
126 + d + ")."); | 143 + d + ")."); |
156 * @param write Writer to write header with. | 173 * @param write Writer to write header with. |
157 */ | 174 */ |
158 protected void writeCSVHeader(CSVWriter writer) { | 175 protected void writeCSVHeader(CSVWriter writer) { |
159 logger.info("ReferenceCurveExporter.writeCSVHeader"); | 176 logger.info("ReferenceCurveExporter.writeCSVHeader"); |
160 | 177 |
161 // TODO missing 'relative' W(cm). | 178 StepCSVWriter stepWriter; |
162 writer.writeNext(new String[] { | 179 |
180 // TODO use StepCVSWriter here | |
181 ArrayList<String> list = new ArrayList<String>(); | |
182 list.addAll(Arrays.asList( new String[] { | |
163 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), | 183 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), |
164 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), | 184 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), |
165 msg(RC_CSV_W_M_HEADER, RC_DEFAULT_CSV_W_M_HEADER), | 185 msg(RC_CSV_W_M_HEADER, RC_DEFAULT_CSV_W_M_HEADER) |
166 msg(RC_CSV_W_CM_HEADER, RC_DEFAULT_CSV_W_CM_HEADER), | 186 })); |
187 if (startAtGauge) { | |
188 list.addAll(Arrays.asList( new String[] { | |
189 msg(RC_CSV_W_CM_HEADER, RC_DEFAULT_CSV_W_CM_HEADER) | |
190 })); | |
191 } | |
192 list.addAll(Arrays.asList( new String[] { | |
167 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), | 193 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), |
168 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), | 194 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), |
169 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), | 195 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), |
170 msg(RC_CSV_W_M_HEADER, RC_DEFAULT_CSV_W_M_HEADER), | 196 msg(RC_CSV_W_M_HEADER, RC_DEFAULT_CSV_W_M_HEADER) |
171 msg(RC_CSV_W_CM_HEADER, RC_DEFAULT_CSV_W_CM_HEADER), | 197 })); |
172 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), | 198 if (endAtGauge) { |
173 }); | 199 list.addAll(Arrays.asList( new String[] { |
200 msg(RC_CSV_W_CM_HEADER, RC_DEFAULT_CSV_W_CM_HEADER), | |
201 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER) | |
202 })); | |
203 } | |
204 else { | |
205 list.addAll(Arrays.asList( new String[] { | |
206 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER) | |
207 })); | |
208 } | |
209 | |
210 | |
211 writer.writeNext(list.toArray(new String[list.size()])); | |
174 } | 212 } |
175 | 213 |
176 | 214 |
177 protected void wWQQ2CSV(CSVWriter writer, WWQQ ww) { | 215 protected void wWQQ2CSV(CSVWriter writer, WWQQ ww) { |
178 logger.debug("ReferenceCurveExporter.wWQQ2CSV"); | 216 logger.debug("ReferenceCurveExporter.wWQQ2CSV"); |
179 | 217 |
180 NumberFormat kmf = getKmFormatter(); | 218 NumberFormat kmf = getKmFormatter(); |
181 NumberFormat wf = getWFormatter(); | 219 NumberFormat wf = getWFormatter(); |
182 NumberFormat qf = getQFormatter(); | 220 NumberFormat qf = getQFormatter(); |
183 | 221 |
184 int size = ww.size(); | 222 int size = ww.size(); |
185 | 223 |
186 FLYSArtifact flys = (FLYSArtifact) master; | 224 FLYSArtifact flys = (FLYSArtifact) master; |
225 | |
226 StepCSVWriter stepWriter = new StepCSVWriter(); | |
227 stepWriter.setCSVWriter(writer); | |
187 | 228 |
188 String startLocationDescription = FLYSUtils.getLocationDescription( | 229 String startLocationDescription = FLYSUtils.getLocationDescription( |
189 flys, ww.getStartKm()); | 230 flys, ww.getStartKm()); |
190 | 231 |
191 String endLocationDescription = FLYSUtils.getLocationDescription( | 232 String endLocationDescription = FLYSUtils.getLocationDescription( |
192 flys, ww.getEndKm()); | 233 flys, ww.getEndKm()); |
193 | 234 |
194 // TODO missing 'relative' W(cm). | |
195 for (int i = 0; i < size; i ++) { | 235 for (int i = 0; i < size; i ++) { |
196 writer.writeNext(new String[] { | 236 stepWriter.addNexts(kmf.format(ww.getStartKm()), |
197 kmf.format(ww.getStartKm()), | 237 startLocationDescription); |
198 startLocationDescription, | 238 if (startAtGauge) { |
199 wf.format(ww.getW1(i)), | 239 stepWriter.addNext(wf.format(ww.getRelHeight1Cm(i))); |
200 wf.format(ww.getRelHeight1Cm(i)), | 240 } |
241 stepWriter.addNext(wf.format(ww.getW1(i))); | |
242 stepWriter.addNexts( | |
201 qf.format(ww.getQ1(i)), // "Q" | 243 qf.format(ww.getQ1(i)), // "Q" |
202 kmf.format(ww.getEndKm()), | 244 kmf.format(ww.getEndKm()), |
203 endLocationDescription, | 245 endLocationDescription); |
204 wf.format(ww.getW2(i)), | 246 if (endAtGauge) { |
205 wf.format(ww.getRelHeight2Cm(i)), | 247 stepWriter.addNext(wf.format(ww.getRelHeight2Cm(i))); |
206 qf.format(ww.getQ2(i)) // "Q" | 248 } |
207 }); | 249 stepWriter.addNext(wf.format(ww.getW2(i))); |
250 stepWriter.addNext(qf.format(ww.getQ2(i)) // "Q" | |
251 ); | |
252 stepWriter.flush(); | |
208 } | 253 } |
209 } | 254 } |
210 | 255 |
211 | 256 |
212 @Override | 257 @Override |
272 NumberFormat wf = getWFormatter(); | 317 NumberFormat wf = getWFormatter(); |
273 NumberFormat qf = getQFormatter(); | 318 NumberFormat qf = getQFormatter(); |
274 | 319 |
275 int size = ww.size(); | 320 int size = ww.size(); |
276 | 321 |
277 FLYSArtifact flys = (FLYSArtifact) master; | 322 FLYSArtifact flys = (FLYSArtifact) master; |
278 | 323 |
279 String startLocationDescription = FLYSUtils.getLocationDescription( | 324 String startLocationDescription = FLYSUtils.getLocationDescription( |
280 flys, ww.getStartKm()); | 325 flys, ww.getStartKm()); |
281 | 326 |
282 String endLocationDescription = FLYSUtils.getLocationDescription( | 327 String endLocationDescription = FLYSUtils.getLocationDescription( |