Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/minfo/SedimentLoadExporter.java @ 8179:705f8b92fd66
Complete CSV-export and correct headers.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 03 Sep 2014 16:46:09 +0200 |
parents | ce35bdf3d750 |
children | e4606eae8ea5 |
comparison
equal
deleted
inserted
replaced
8178:5bab2e57e965 | 8179:705f8b92fd66 |
---|---|
42 /** Private logger. */ | 42 /** Private logger. */ |
43 private static Logger logger = Logger.getLogger(SedimentLoadExporter.class); | 43 private static Logger logger = Logger.getLogger(SedimentLoadExporter.class); |
44 | 44 |
45 // i18n keys. | 45 // i18n keys. |
46 public static final String CSV_KM = | 46 public static final String CSV_KM = |
47 "export.sedimentload_ls.csv.header.km"; | 47 "export.csv.header.km"; |
48 | 48 |
49 public static final String CSV_YEAR = | 49 public static final String CSV_YEAR = |
50 "export.sedimentload_ls.csv.header.year"; | 50 "export.csv.header.year"; |
51 | 51 |
52 public static final String CSV_COARSE = | 52 public static final String CSV_COARSE = |
53 "export.sedimentload_ls.csv.header.coarse"; | 53 "export.sedimentload.csv.header.coarse"; |
54 | 54 |
55 public static final String CSV_FINEMIDDLE = | 55 public static final String CSV_FINEMIDDLE = |
56 "export.sedimentload_ls.csv.header.finemiddle"; | 56 "export.sedimentload.csv.header.fine_middle"; |
57 | 57 |
58 public static final String CSV_SAND = | 58 public static final String CSV_SAND = |
59 "export.sedimentload_ls.csv.header.sand"; | 59 "export.sedimentload.csv.header.sand"; |
60 | 60 |
61 public static final String CSV_SUSP_SAND = | 61 public static final String CSV_SUSP_SAND = |
62 "export.sedimentload_ls.csv.header.suspsand"; | 62 "export.sedimentload.csv.header.susp_sand"; |
63 | 63 |
64 public static final String CSV_SUSP_SAND_BB = | 64 public static final String CSV_SUSP_SAND_BB = |
65 "export.sedimentload_ls.csv.header.suspsandbb"; | 65 "export.sedimentload.csv.header.susp_sand_bed"; |
66 | 66 |
67 public static final String CSV_SUSP_SEDIMENT = | 67 public static final String CSV_SUSP_SEDIMENT = |
68 "export.sedimentload_ls.csv.header.suspsediment"; | 68 "export.sedimentload.csv.header.suspended_sediment"; |
69 | |
70 public static final String CSV_BED_LOAD = | |
71 "export.sedimentload.csv.header.bed_load"; | |
72 | |
73 public static final String CSV_BED_LOAD_SUSP_SAND = | |
74 "export.sedimentload.csv.header.bed_load_susp_sand"; | |
69 | 75 |
70 public static final String CSV_TOTAL = | 76 public static final String CSV_TOTAL = |
71 "export.sedimentload_ls.csv.header.total"; | 77 "export.sedimentload.csv.header.total"; |
72 | 78 |
73 /* Header is: suspended_sediment, susp_sand, susp_sand_bed, sand, | |
74 * fine_middle, coarse, total */ | |
75 private static final String[] FRACTION_ORDER = { | 79 private static final String[] FRACTION_ORDER = { |
76 "suspended_sediment", | 80 "suspended_sediment", |
77 "susp_sand", | 81 "susp_sand", |
78 "susp_sand_bed", | 82 "susp_sand_bed", |
79 "sand", | 83 "sand", |
80 "fine_middle", | 84 "fine_middle", |
81 "coarse", | 85 "coarse", |
86 "bed_load", | |
87 "bed_load_susp_sand", | |
82 "total" | 88 "total" |
83 }; | 89 }; |
84 | 90 |
85 /** Collected results. */ | 91 /** Collected results. */ |
86 private SedimentLoadDataResult result; | 92 private SedimentLoadDataResult result; |
151 return " "; | 157 return " "; |
152 } | 158 } |
153 return valf.format(val); | 159 return valf.format(val); |
154 } | 160 } |
155 | 161 |
156 /** Return space when val is NaN or zero, apply NumberFormat otherwise. */ | |
157 private String nonZeroToString(NumberFormat valf, double val) { | |
158 if (Double.isNaN(val) || val == 0d) { | |
159 return " "; | |
160 } | |
161 return valf.format(val); | |
162 } | |
163 | |
164 /** Write a line. */ | 162 /** Write a line. */ |
165 private void writeRecord( | 163 private void writeRecord( |
166 CSVWriter writer, | 164 CSVWriter writer, |
167 double km, | 165 double km, |
168 String years, | 166 String years, |
169 Double[] fractions | 167 Double[] fractions |
170 ) { | 168 ) { |
171 // year, total, susp sed, susp sandbed suspsand, sand, finemiddle, coarse | |
172 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); | 169 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); |
173 NumberFormat valf = Formatter.getFormatter(context.getMeta(), 0, 2); | 170 NumberFormat valf = Formatter.getFormatter(context.getMeta(), 0, 2); |
174 writer.writeNext(new String[] { | 171 |
175 kmf.format(km), | 172 String[] record = new String[fractions.length+2]; |
176 years, | 173 record[0] = kmf.format(km); |
177 numberToString(valf, fractions[0]), | 174 record[1] = years; |
178 numberToString(valf, fractions[1]), | 175 for (int i = 0; i < fractions.length; ++i) { |
179 numberToString(valf, fractions[2]), | 176 record[i+2] = numberToString(valf, fractions[i]); |
180 numberToString(valf, fractions[3]), | 177 } |
181 numberToString(valf, fractions[4]), | 178 |
182 numberToString(valf, fractions[5]), | 179 writer.writeNext(record); |
183 nonZeroToString(valf, fractions[6]) | |
184 }); | |
185 } | 180 } |
186 | 181 |
187 /** Writes i18ned header for csv file/stream. */ | 182 /** Writes i18ned header for csv file/stream. */ |
188 protected void writeCSVHeader(CSVWriter writer) { | 183 protected void writeCSVHeader(CSVWriter writer) { |
189 logger.debug("writeCSVHeader()"); | 184 logger.debug("writeCSVHeader()"); |
190 | 185 |
191 List<String> header = new LinkedList<String>(); | 186 List<String> header = new LinkedList<String>(); |
192 SedimentLoadAccess access = | 187 SedimentLoadAccess access = |
193 new SedimentLoadAccess((D4EArtifact) master); | 188 new SedimentLoadAccess((D4EArtifact) master); |
194 | 189 |
195 String unit = " [" + msg("state.minfo." + | 190 String unit = msg("state.minfo." + access.getUnit()); |
196 access.getUnit(), "translation missing") + "]"; | 191 |
197 | 192 header.add(msg(CSV_KM)); |
198 header.add(msg(CSV_KM, "km")); | 193 header.add(msg(CSV_YEAR)); |
199 header.add(msg(CSV_YEAR, "Jahr")); | 194 for (String head: new String[] { |
200 header.add(msg(CSV_SUSP_SEDIMENT, "Schwebst.") + unit); | 195 CSV_SUSP_SEDIMENT, |
201 header.add(msg(CSV_SUSP_SAND, "Susp.Sand") + unit); | 196 CSV_SUSP_SAND, |
202 header.add(msg(CSV_SUSP_SAND_BB, "Susp.Sand(BB)") + unit); | 197 CSV_SUSP_SAND_BB, |
203 header.add(msg(CSV_SAND, "Sand") + unit); | 198 CSV_SAND, |
204 header.add(msg(CSV_FINEMIDDLE, "Kies(f+m)") + unit); | 199 CSV_FINEMIDDLE, |
205 header.add(msg(CSV_COARSE, "Kies(g)") + unit); | 200 CSV_COARSE, |
206 header.add(msg(CSV_TOTAL, "Gesamt") + unit); | 201 CSV_BED_LOAD, |
202 CSV_BED_LOAD_SUSP_SAND, | |
203 CSV_TOTAL | |
204 }) { | |
205 header.add(msg(head, new Object[] { unit })); | |
206 } | |
207 writer.writeNext(header.toArray(new String[header.size()])); | 207 writer.writeNext(header.toArray(new String[header.size()])); |
208 } | 208 } |
209 | 209 |
210 /** Store data internally, accepting only SedimentLoadResults[] in | 210 /** Store data internally, accepting only SedimentLoadResults[] in |
211 * calculationresults data. */ | 211 * calculationresults data. */ |