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 }

http://dive4elements.wald.intevation.org