Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/ReferenceCurveExporter.java @ 2285:5a00269406f3
Improved CSV export of reference curves, include Qs.
flys-artifacts/trunk@3947 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 07 Feb 2012 09:58:15 +0000 |
parents | 4a8b519b64bd |
children | 6f4a1f513e89 |
comparison
equal
deleted
inserted
replaced
2284:5d1ba04d2f68 | 2285:5a00269406f3 |
---|---|
28 | 28 |
29 import de.intevation.flys.artifacts.FLYSArtifact; | 29 import de.intevation.flys.artifacts.FLYSArtifact; |
30 import de.intevation.flys.artifacts.WINFOArtifact; | 30 import de.intevation.flys.artifacts.WINFOArtifact; |
31 | 31 |
32 import de.intevation.flys.artifacts.model.CalculationResult; | 32 import de.intevation.flys.artifacts.model.CalculationResult; |
33 import de.intevation.flys.artifacts.model.WW; | 33 import de.intevation.flys.artifacts.model.WWQQ; |
34 import de.intevation.flys.artifacts.model.WKmsJRDataSource; | 34 import de.intevation.flys.artifacts.model.WKmsJRDataSource; |
35 import de.intevation.flys.artifacts.resources.Resources; | 35 import de.intevation.flys.artifacts.resources.Resources; |
36 | 36 |
37 import de.intevation.flys.utils.FLYSUtils; | 37 import de.intevation.flys.utils.FLYSUtils; |
38 import de.intevation.flys.utils.Formatter; | 38 import de.intevation.flys.utils.Formatter; |
58 public static final String CSV_LOCATION_HEADER = | 58 public static final String CSV_LOCATION_HEADER = |
59 "export.waterlevel.csv.header.location"; | 59 "export.waterlevel.csv.header.location"; |
60 | 60 |
61 public static final String DEFAULT_CSV_LOCATION_HEADER = "Lage"; | 61 public static final String DEFAULT_CSV_LOCATION_HEADER = "Lage"; |
62 | 62 |
63 /* | |
64 For each Bezugs and Ziel-ort (of which there might be multiples): | |
65 Lage, Bezeichnung, Q, W (cm), W(NN+m). | |
66 */ | |
67 | |
68 public static final String RC_DEFAULT_CSV_KM_HEADER = "Fluss-Km"; | 63 public static final String RC_DEFAULT_CSV_KM_HEADER = "Fluss-Km"; |
69 public static final String RC_DEFAULT_CSV_W_HEADER = "m"; | 64 public static final String RC_DEFAULT_CSV_W_HEADER = "m"; |
70 public static final String RC_DEFAULT_CSV_Q_HEADER = "Q"; | 65 public static final String RC_DEFAULT_CSV_Q_HEADER = "Q"; |
71 | 66 |
72 public static final String PDF_HEADER_MODE = "export.reference_curve.pdf.mode"; | 67 public static final String PDF_HEADER_MODE = "export.reference_curve.pdf.mode"; |
73 public static final String JASPER_FILE = "export.reference_curve.pdf.file"; | 68 public static final String JASPER_FILE = "export.reference_curve.pdf.file"; |
74 | 69 |
75 /** The storage that contains all WKms objects for the different facets. */ | 70 /** The storage that contains all WKms objects for the different facets. */ |
76 /* TODO these shall be the function objects, probably. */ | 71 protected List<WWQQ[]> data; |
77 protected List<WW[]> data; | |
78 | 72 |
79 | 73 |
80 public void init(Document request, OutputStream out, CallContext context) { | 74 public void init(Document request, OutputStream out, CallContext context) { |
81 logger.debug("ReferenceCurveExporter.init"); | 75 logger.debug("ReferenceCurveExporter.init"); |
82 | 76 |
83 super.init(request, out, context); | 77 super.init(request, out, context); |
84 | 78 |
85 this.data = new ArrayList<WW[]>(); | 79 this.data = new ArrayList<WWQQ[]>(); |
86 } | 80 } |
87 | 81 |
88 | 82 |
89 /** | 83 /** |
90 * Genereate data in csv format. | 84 * Genereate data in csv format. |
110 } | 104 } |
111 | 105 |
112 | 106 |
113 /** | 107 /** |
114 * Adds given data. | 108 * Adds given data. |
115 * @param d either a WKms or a CalculationResult to add to data. | 109 * @param d a WWQQ[]. |
116 */ | 110 */ |
117 @Override | 111 @Override |
118 protected void addData(Object d) { | 112 protected void addData(Object d) { |
113 logger.debug("ReferenceCurveExporter.addData"); | |
114 | |
119 if (d instanceof CalculationResult) { | 115 if (d instanceof CalculationResult) { |
120 d = ((CalculationResult)d).getData(); | 116 d = ((CalculationResult)d).getData(); |
121 if (d instanceof WW []) { | 117 if (d instanceof WWQQ []) { |
122 data.add((WW [])d); | 118 data.add((WWQQ [])d); |
123 } | 119 logger.debug("ReferenceCurveExporter.addData wwqq[]."); |
124 } | 120 } |
125 else if (d instanceof WW) { | 121 else { |
126 data.add(new WW[] { (WW) d }); | 122 logger.warn("ReferenceCurveExporter.addData/1 unknown type (" |
123 + d + ")."); | |
124 } | |
127 } | 125 } |
128 else { | 126 else { |
129 logger.warn("ReferenceCurveExporter.addData unknown data type."); | 127 logger.warn("ReferenceCurveExporter.addData/2 unknown type (" |
128 + d + ")."); | |
130 } | 129 } |
131 } | 130 } |
132 | 131 |
133 | 132 |
134 /** | 133 /** |
139 protected void writeCSVData(CSVWriter writer) { | 138 protected void writeCSVData(CSVWriter writer) { |
140 logger.info("ReferenceCurveExporter.writeData"); | 139 logger.info("ReferenceCurveExporter.writeData"); |
141 | 140 |
142 writeCSVHeader(writer); | 141 writeCSVHeader(writer); |
143 | 142 |
144 for (WW[] tmp: data) { | 143 for (WWQQ[] tmp: data) { |
145 for (WW ww: tmp) { | 144 for (WWQQ ww: tmp) { |
146 ww2CSV(writer, ww); | 145 wWQQ2CSV(writer, ww); |
147 } | 146 } |
148 } | 147 } |
149 } | 148 } |
150 | 149 |
151 | 150 |
154 * @param write Writer to write header with. | 153 * @param write Writer to write header with. |
155 */ | 154 */ |
156 protected void writeCSVHeader(CSVWriter writer) { | 155 protected void writeCSVHeader(CSVWriter writer) { |
157 logger.info("ReferenceCurveExporter.writeCSVHeader"); | 156 logger.info("ReferenceCurveExporter.writeCSVHeader"); |
158 | 157 |
158 // TODO missing 'relative' W(cm). | |
159 writer.writeNext(new String[] { | 159 writer.writeNext(new String[] { |
160 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), | 160 msg(RC_CSV_KM_HEADER, RC_DEFAULT_CSV_KM_HEADER), |
161 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), | 161 msg(CSV_LOCATION_HEADER, DEFAULT_CSV_LOCATION_HEADER), |
162 msg(RC_CSV_W_HEADER, RC_DEFAULT_CSV_W_HEADER), | 162 msg(RC_CSV_W_HEADER, RC_DEFAULT_CSV_W_HEADER), |
163 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), | 163 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), |
167 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), | 167 msg(RC_CSV_Q_HEADER, RC_DEFAULT_CSV_Q_HEADER), |
168 }); | 168 }); |
169 } | 169 } |
170 | 170 |
171 | 171 |
172 protected void ww2CSV(CSVWriter writer, WW ww) { | 172 protected void wWQQ2CSV(CSVWriter writer, WWQQ ww) { |
173 logger.debug("ReferenceCurveExporter.ww2CSV"); | 173 logger.debug("ReferenceCurveExporter.wWQQ2CSV"); |
174 | 174 |
175 NumberFormat kmf = getKmFormatter(); | 175 NumberFormat kmf = getKmFormatter(); |
176 NumberFormat wf = getWFormatter(); | 176 NumberFormat wf = getWFormatter(); |
177 NumberFormat qf = getQFormatter(); | |
178 | |
177 int size = ww.size(); | 179 int size = ww.size(); |
178 | 180 |
179 FLYSArtifact flys = (FLYSArtifact) master; | 181 FLYSArtifact flys = (FLYSArtifact) master; |
180 | 182 |
181 String startLocationDescription = FLYSUtils.getLocationDescription( | 183 String startLocationDescription = FLYSUtils.getLocationDescription( |
182 flys, ww.getStartKm()); | 184 flys, ww.getStartKm()); |
183 | 185 |
184 String endLocationDescription = FLYSUtils.getLocationDescription( | 186 String endLocationDescription = FLYSUtils.getLocationDescription( |
185 flys, ww.getEndKm()); | 187 flys, ww.getEndKm()); |
186 | 188 |
189 // TODO missing 'relative' W(cm). | |
187 for (int i = 0; i < size; i ++) { | 190 for (int i = 0; i < size; i ++) { |
188 writer.writeNext(new String[] { | 191 writer.writeNext(new String[] { |
189 kmf.format(ww.getStartKm()), | 192 kmf.format(ww.getStartKm()), |
190 startLocationDescription, | 193 startLocationDescription, |
191 wf.format(ww.getW1(i)), | 194 wf.format(ww.getW1(i)), |
192 "", // "Q" | 195 qf.format(ww.getQ1(i)), // "Q" |
193 kmf.format(ww.getEndKm()), | 196 kmf.format(ww.getEndKm()), |
194 endLocationDescription, | 197 endLocationDescription, |
195 wf.format(ww.getW2(i)), | 198 wf.format(ww.getW2(i)), |
196 "" // "Q" | 199 qf.format(ww.getQ2(i)) // "Q" |
197 }); | 200 }); |
198 } | 201 } |
199 } | |
200 | |
201 | |
202 /** | |
203 * Returns the number formatter for kilometer values. | |
204 * | |
205 * @return the number formatter for kilometer values. | |
206 */ | |
207 protected NumberFormat getKmFormatter() { | |
208 return Formatter.getWaterlevelKM(context); | |
209 } | |
210 | |
211 | |
212 /** | |
213 * Returns the number formatter for W values. | |
214 * | |
215 * @return the number formatter for W values. | |
216 */ | |
217 protected NumberFormat getWFormatter() { | |
218 return Formatter.getWaterlevelW(context); | |
219 } | 202 } |
220 | 203 |
221 | 204 |
222 @Override | 205 @Override |
223 protected void writePDF(OutputStream out) { | 206 protected void writePDF(OutputStream out) { |