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. */

http://dive4elements.wald.intevation.org