Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/minfo/BedQualityExporter.java @ 3785:a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk
........
r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line
fix issue865 - missing showarea theme prop.
........
r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line
Add robustness checks to prevent NPEs
........
r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line
i18n for area label (fix issue487).
........
r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line
Update themes to show point descriptions
........
r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines
Removed incorrect characteristic diameter.
........
r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines
Fixed some stupid bugs in bed quality data factory and calculation.
........
r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line
The usual whitespace and import cleanups.
........
r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line
Use generics aware Collections.emptyList().
........
r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line
Some more little steps towards "Auslagerung extremer Wasserspiegellagen".
........
r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line
A and B facets of fix analyis are now deactivated by default
........
r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines
Add the gauge station to the GaugeOverviewInfoService xml response
........
r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines
Added CSV export to bed quality calculation.
........
r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines
Fix date in changelog entry
........
r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line
Removed trailing whitespace.
........
flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 19 Sep 2012 14:58:31 +0000 |
parents | |
children | 22cd60315e08 |
comparison
equal
deleted
inserted
replaced
3784:9f9d5ada96ca | 3785:a5f65e8983be |
---|---|
1 package de.intevation.flys.exports.minfo; | |
2 | |
3 import gnu.trove.TDoubleArrayList; | |
4 | |
5 import java.io.IOException; | |
6 import java.io.OutputStream; | |
7 import java.text.DateFormat; | |
8 import java.text.NumberFormat; | |
9 import java.util.Arrays; | |
10 import java.util.LinkedList; | |
11 import java.util.List; | |
12 | |
13 import org.apache.log4j.Logger; | |
14 import org.w3c.dom.Document; | |
15 | |
16 import au.com.bytecode.opencsv.CSVWriter; | |
17 import de.intevation.artifacts.CallContext; | |
18 import de.intevation.flys.artifacts.model.CalculationResult; | |
19 import de.intevation.flys.artifacts.model.minfo.BedDiameterResult; | |
20 import de.intevation.flys.artifacts.model.minfo.BedParametersResult; | |
21 import de.intevation.flys.artifacts.model.minfo.BedQualityResult; | |
22 import de.intevation.flys.artifacts.model.minfo.BedloadDiameterResult; | |
23 import de.intevation.flys.exports.AbstractExporter; | |
24 import de.intevation.flys.utils.Formatter; | |
25 | |
26 | |
27 public class BedQualityExporter | |
28 extends AbstractExporter | |
29 { | |
30 /** Private logger. */ | |
31 private static Logger logger = Logger.getLogger(BedQualityExporter.class); | |
32 | |
33 private static final String CSV_HEADER_KM = "export.minfo.bedquality.km"; | |
34 private static final String CSV_HEADER_DENSITY_CAP = | |
35 "export.minfo.bedquality.density_cap"; | |
36 private static final String CSV_HEADER_DENSITY_SUB = | |
37 "export.minfo.bedquality.density_sub"; | |
38 private static final String CSV_HEADER_POROSITY_CAP = | |
39 "export.minfo.bedquality.porosity_cap"; | |
40 private static final String CSV_HEADER_POROSITY_SUB = | |
41 "export.minfo.bedquality.porosity_sub"; | |
42 private static final String CSV_HEADER_BEDLOAD = | |
43 "export.minfo.bedquality.bedload"; | |
44 private static final String CSV_HEADER_BED_CAP = | |
45 "export.minfo.bedquality.bed_cap"; | |
46 private static final String CSV_HEADER_BED_SUB = | |
47 "export.minfo.bedquality.bed_sub"; | |
48 | |
49 private BedQualityResult[] results; | |
50 | |
51 @Override | |
52 public void init(Document request, OutputStream out, CallContext context) { | |
53 logger.debug("BedQualityExporter.init"); | |
54 super.init(request, out, context); | |
55 results = new BedQualityResult[0]; | |
56 } | |
57 | |
58 @Override | |
59 protected void writeCSVData(CSVWriter writer) throws IOException { | |
60 // TODO Auto-generated method stub | |
61 writeCSVHeader(writer); | |
62 | |
63 NumberFormat kmf = Formatter.getCalculationKm(context.getMeta()); | |
64 | |
65 TDoubleArrayList kms = new TDoubleArrayList(); | |
66 int cols = 1; | |
67 for (int i = 0; i < results.length; i++) { | |
68 BedDiameterResult[] beds = results[i].getBedResults(); | |
69 for (int j = 0; j < beds.length; j++) { | |
70 TDoubleArrayList bkms = beds[j].getKms(); | |
71 for (int k = 0; k < bkms.size(); k++) { | |
72 if (!kms.contains(bkms.get(k))) { | |
73 kms.add(bkms.get(k)); | |
74 } | |
75 } | |
76 } | |
77 BedloadDiameterResult[] loads = results[i].getBedloadResults(); | |
78 for (int j = 0; j < loads.length; j++) { | |
79 TDoubleArrayList lkms = loads[i].getKms(); | |
80 for (int k = 0; k < lkms.size(); k++) { | |
81 if (!kms.contains(lkms.get(k))) { | |
82 kms.add(lkms.get(k)); | |
83 } | |
84 } | |
85 } | |
86 cols += beds.length * 2; | |
87 cols += loads.length; | |
88 if (beds.length > 0) { | |
89 cols += 4; | |
90 } | |
91 } | |
92 | |
93 kms.sort(); | |
94 List<double[]> rows = new LinkedList<double[]>(); | |
95 for (int i = 0; i < kms.size(); i++) { | |
96 double[] row = new double[cols]; | |
97 double km = kms.get(i); | |
98 row[0] = km; | |
99 for (int j = 0; j < results.length; j++) { | |
100 BedloadDiameterResult[] loads = results[j].getBedloadResults(); | |
101 | |
102 for(int k = 0; k < loads.length; k++) { | |
103 // k + 1: shift km column. | |
104 // j* loads.length: shift periods. | |
105 row[(k + 1) + (j * loads.length)] = | |
106 loads[k].getDiameter(km); | |
107 } | |
108 BedDiameterResult[] beds = results[j].getBedResults(); | |
109 for (int k = 0; k < beds.length; k++) { | |
110 // k + 1: shift km column. | |
111 // j * beds.length: shift periods. | |
112 // loads.length * results.length: shift bed load columns. | |
113 int ndx = (k + 1) + (j * beds.length) + (loads.length * results.length); | |
114 row[ndx] = beds[k].getDiameterCap(km); | |
115 row[ndx + 1] = beds[k].getDiameterSub(km); | |
116 } | |
117 BedParametersResult[] params = results[j].getParameters(); | |
118 for(int k = 0; k < params.length; k++) { | |
119 // loads.length + (beds.lenght * 2) * (j + 1): shift bed and bedload columns. | |
120 int ndx = 1 + (loads.length + (beds.length * 2) * (j + 1)); | |
121 row[ndx] = params[k].getLoadDensityCap(km); | |
122 row[ndx + 1] = params[k].getLoadDensitySub(km); | |
123 row[ndx + 2] = params[k].getPorosityCap(km); | |
124 row[ndx + 3] = params[k].getPorositySub(km); | |
125 } | |
126 } | |
127 rows.add(row); | |
128 } | |
129 for (double[] d : rows) { | |
130 logger.debug(Arrays.toString(d)); | |
131 List<String> cells = new LinkedList<String>(); | |
132 for (int i = 0; i < d.length; i++) { | |
133 if (!Double.isNaN(d[i])) { | |
134 NumberFormat nf = Formatter.getFormatter(context, 1, 3); | |
135 cells.add(nf.format(d[i])); | |
136 } | |
137 else { | |
138 cells.add(""); | |
139 } | |
140 } | |
141 writer.writeNext(cells.toArray(new String[cells.size()])); | |
142 } | |
143 } | |
144 | |
145 @Override | |
146 protected void writePDF(OutputStream out) { | |
147 // TODO Auto-generated method stub | |
148 | |
149 } | |
150 | |
151 @Override | |
152 protected void addData(Object data) { | |
153 // TODO Auto-generated method stub | |
154 logger.debug("addData()"); | |
155 if (!(data instanceof CalculationResult)) { | |
156 logger.warn("Invalid data type."); | |
157 return; | |
158 } | |
159 Object[] d = (Object[])((CalculationResult)data).getData(); | |
160 | |
161 if (!(d instanceof BedQualityResult[])) { | |
162 logger.warn("Invalid result object."); | |
163 return; | |
164 } | |
165 results = (BedQualityResult[])d; | |
166 } | |
167 | |
168 protected void writeCSVHeader(CSVWriter writer) { | |
169 logger.debug("writeCSVHeader()"); | |
170 | |
171 List<String> header = new LinkedList<String>(); | |
172 if (results != null) { | |
173 header.add(msg(CSV_HEADER_KM, "km")); | |
174 for (int i = 0; i < results.length; i++) { | |
175 DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); | |
176 String d1 = df.format(results[i].getDateRange().getFrom()); | |
177 String d2 = df.format(results[i].getDateRange().getTo()); | |
178 BedloadDiameterResult[] loads = results[i].getBedloadResults(); | |
179 BedDiameterResult[] beds = results[i].getBedResults(); | |
180 BedParametersResult[] params = results[i].getParameters(); | |
181 for (int j = 0; j < loads.length; j++) { | |
182 header.add(msg(CSV_HEADER_BEDLOAD, CSV_HEADER_BEDLOAD) + | |
183 " - " + | |
184 msg(loads[j].getType().toString(), | |
185 loads[j].getType().toString()) + " - " + | |
186 d1 + "-" + d2); | |
187 } | |
188 for (int j = 0; j < beds.length; j++) { | |
189 header.add(msg(CSV_HEADER_BED_CAP, CSV_HEADER_BED_CAP) + " - " + | |
190 msg(beds[j].getType().toString(), | |
191 beds[j].getType().toString()) + " - " + | |
192 d1 + "-" + d2); | |
193 header.add(msg(CSV_HEADER_BED_SUB, CSV_HEADER_BED_SUB) + " - " + | |
194 msg(beds[j].getType().toString(), | |
195 beds[j].getType().toString()) + " - " + | |
196 d1 + "-" + d2); | |
197 } | |
198 if (params.length > 0) { | |
199 header.add( | |
200 msg(CSV_HEADER_DENSITY_CAP, CSV_HEADER_DENSITY_CAP));// + | |
201 //" - " + d1 + "-" + d2); | |
202 header.add( | |
203 msg(CSV_HEADER_DENSITY_SUB, CSV_HEADER_DENSITY_SUB)); //+ | |
204 //" - " + d1 + "-" + d2); | |
205 header.add( | |
206 msg(CSV_HEADER_POROSITY_CAP, CSV_HEADER_POROSITY_CAP)); //+ | |
207 //" - " + d1 + "-" + d2); | |
208 header.add( | |
209 msg(CSV_HEADER_POROSITY_SUB, CSV_HEADER_POROSITY_SUB));// + | |
210 //" - " + d1 + "-" + d2); | |
211 } | |
212 } | |
213 } | |
214 writer.writeNext(header.toArray(new String[header.size()])); | |
215 } | |
216 } |