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(

http://dive4elements.wald.intevation.org