comparison artifacts/src/main/java/org/dive4elements/river/exports/process/DeltaWProcessor.java @ 7120:d13398318b11

Add DeltaWProcessor to process data for a delta W axis. This is basically a copy of the KMIndexProcessor with some added Facets ands with the new doOut interface. The KM Processor will be removed after the bed* diagrams no longer use it.
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 24 Sep 2013 18:32:55 +0200
parents artifacts/src/main/java/org/dive4elements/river/exports/process/KMIndexProcessor.java@253d80af5b7f
children e4606eae8ea5
comparison
equal deleted inserted replaced
7119:988dde49ae65 7120:d13398318b11
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
2 * Software engineering by Intevation GmbH
3 *
4 * This file is Free Software under the GNU AGPL (>=v3)
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6 * documentation coming with Dive4Elements River for details.
7 */
8
9 package org.dive4elements.river.exports.process;
10
11 import org.apache.log4j.Logger;
12
13 import java.awt.BasicStroke;
14 import java.awt.Color;
15
16 import org.jfree.data.xy.XYSeries;
17 import org.jfree.data.xy.XYSeriesCollection;
18
19 import org.jfree.chart.plot.Marker;
20 import org.jfree.chart.plot.ValueMarker;
21
22 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
23 import org.dive4elements.artifacts.CallContext;
24 import org.dive4elements.river.artifacts.model.FacetTypes;
25 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod;
26 import org.dive4elements.river.artifacts.model.fixings.QWD;
27 import org.dive4elements.river.exports.DiagramGenerator;
28 import org.dive4elements.river.jfree.StyledXYSeries;
29 import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
30 import org.dive4elements.river.themes.ThemeDocument;
31 import org.dive4elements.river.utils.KMIndex;
32
33 public class DeltaWProcessor extends DefaultProcessor {
34 /* This is basically a collection of different processors. The
35 * historic reason for this is that they have in common that they
36 * work on deltaW data from the fixing analysis. */
37
38 private static final Logger logger = Logger.getLogger(DeltaWProcessor.class);
39
40 public static final String I18N_DW_YAXIS_LABEL_DEFAULT =
41 "delta W [cm]";
42
43 public static final String I18N_DW_YAXIS_LABEL =
44 "chart.fixings.longitudinalsection.yaxis.label";
45
46 @Override
47 public void doOut(
48 DiagramGenerator generator,
49 ArtifactAndFacet bundle,
50 ThemeDocument theme,
51 boolean visible) {
52 String facettype = bundle.getFacetName();
53 if (!visible) {
54 return;
55 }
56 logger.debug("Doing out for: " + bundle.getFacetName());
57 if (facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS)) {
58 doReferenceEventsOut(generator, bundle, theme, visible);
59 } else if (facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS)) {
60 doAnalysisEventsOut(generator, bundle, theme, visible);
61 } else if (facettype.startsWith(FacetTypes.FIX_SECTOR_AVERAGE_LS_DEVIATION)) {
62 doSectorAverageDeviationOut(generator, bundle, theme, visible);
63 } else if (facettype.equals(FacetTypes.FIX_DEVIATION_LS)) {
64 doReferenceDeviationOut(generator, bundle, theme, visible);
65 } else if (facettype.startsWith(FacetTypes.FIX_SECTOR_AVERAGE_LS)) {
66 doSectorAverageOut(generator, bundle, theme, visible);
67 } else {
68 logger.error("Could not handle: " + facettype);
69 }
70 }
71
72 @Override
73 public boolean canHandle(String facettype) {
74 if (facettype == null) {
75 return false;
76 }
77
78 if (facettype.startsWith(FacetTypes.FIX_SECTOR_AVERAGE_LS)
79 || facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS)
80 || facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS)
81 || facettype.equals(FacetTypes.FIX_DEVIATION_LS)) {
82 return true;
83 }
84 return false;
85 }
86
87 private void doSectorAverageOut(DiagramGenerator generator,
88 ArtifactAndFacet bundle,
89 ThemeDocument doc, boolean visible) {
90 CallContext context = generator.getCallContext();
91 int index = bundle.getFacet().getIndex();
92 int sectorNdx = index & 3;
93
94 KMIndex<AnalysisPeriod> kms =
95 (KMIndex<AnalysisPeriod>)bundle.getData(context);
96
97 if(kms == null) {
98 return;
99 }
100
101 XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), doc);
102
103 for (KMIndex.Entry<AnalysisPeriod> entry: kms) {
104 double km = entry.getKm();
105 AnalysisPeriod ap = entry.getValue();
106 QWD qwd = ap.getQSectorAverages()[sectorNdx];
107 if (qwd == null) {
108 continue;
109 }
110 double deltaW = qwd.getDeltaW();
111 series.add(km, deltaW);
112 }
113
114 generator.addAxisSeries(series, axisName, visible);
115 }
116
117 private void doReferenceEventsOut(DiagramGenerator generator,
118 ArtifactAndFacet bundle, ThemeDocument doc, boolean visible) {
119 CallContext context = generator.getCallContext();
120
121 KMIndex<QWD> kms =
122 (KMIndex<QWD>)bundle.getData(context);
123
124 if(kms == null) {
125 return;
126 }
127
128 XYSeriesCollection col = new XYSeriesCollection();
129
130 StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), false,
131 doc);
132
133 for (KMIndex.Entry<QWD> entry: kms) {
134 double km = entry.getKm();
135 QWD qwd = entry.getValue();
136
137 series.add(km, qwd.getDeltaW());
138 }
139 col.addSeries(series);
140
141 generator.addAxisDataset(col, axisName, visible);
142 }
143
144 private void doAnalysisEventsOut(
145 DiagramGenerator generator,
146 ArtifactAndFacet bundle,
147 ThemeDocument doc,
148 boolean visible) {
149 CallContext context = generator.getCallContext();
150
151 KMIndex<QWD> kms =
152 (KMIndex<QWD>)bundle.getData(context);
153
154 if(kms == null) {
155 return;
156 }
157
158 XYSeriesCollection col = new XYSeriesCollection();
159
160 StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), false, doc);
161
162 for (KMIndex.Entry<QWD> entry: kms) {
163 double km = entry.getKm();
164 QWD qwd = entry.getValue();
165
166 series.add(km, qwd.getDeltaW());
167 }
168 col.addSeries(series);
169
170 generator.addAxisDataset(col, axisName, visible);
171 }
172
173 protected void doSectorAverageDeviationOut(
174 DiagramGenerator generator,
175 ArtifactAndFacet bundle,
176 ThemeDocument doc,
177 boolean visible) {
178 CallContext context = generator.getCallContext();
179
180 int index = bundle.getFacet().getIndex();
181 int sectorNdx = index & 3;
182
183 KMIndex<AnalysisPeriod> kms =
184 (KMIndex<AnalysisPeriod>)bundle.getData(context);
185
186 if(kms == null) {
187 return;
188 }
189
190 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(doc);
191 XYSeries upper =
192 new StyledXYSeries(bundle.getFacetDescription(), false, doc);
193 XYSeries lower =
194 new StyledXYSeries(bundle.getFacetDescription() + " ", false, doc);
195
196 for (KMIndex.Entry<AnalysisPeriod> entry: kms) {
197 double km = entry.getKm();
198 AnalysisPeriod ap = entry.getValue();
199 QWD qwd = ap.getQSectorAverages()[sectorNdx];
200 double dev = ap.getQSectorStdDev(sectorNdx);
201 if (qwd == null) {
202 continue;
203 }
204 double deltaW = qwd.getDeltaW();
205 double up = deltaW + dev;
206 double lo = deltaW - dev;
207 upper.add(km, up);
208 lower.add(km, lo);
209 }
210 area.addSeries(upper);
211 area.addSeries(lower);
212
213 generator.addAreaSeries(area, axisName, visible);
214 }
215
216 protected void doReferenceDeviationOut(
217 DiagramGenerator generator,
218 ArtifactAndFacet bundle,
219 ThemeDocument doc,
220 boolean visible) {
221 CallContext context = generator.getCallContext();
222
223 KMIndex<double[]> kms =
224 (KMIndex<double[]>)bundle.getData(context);
225
226 if(kms == null) {
227 return;
228 }
229
230 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(doc);
231 XYSeries upper =
232 new StyledXYSeries(bundle.getFacetDescription(), false, doc);
233 XYSeries lower =
234 new StyledXYSeries(bundle.getFacetDescription() + " ", false, doc);
235
236 for (KMIndex.Entry<double[]> entry: kms) {
237 double km = entry.getKm();
238 double[] devArray = entry.getValue();
239 if (devArray == null) {
240 continue;
241 }
242 double dev = devArray[0];
243 double up = dev;
244 double lo = -dev;
245 upper.add(km, up, false);
246 lower.add(km, lo, false);
247 }
248 area.addSeries(upper);
249 area.addSeries(lower);
250
251 Marker marker = new ValueMarker(0);
252 marker.setStroke(new BasicStroke(2));
253 marker.setPaint(Color.BLACK);
254 generator.addValueMarker(marker);
255 generator.addAreaSeries(area, axisName, visible);
256 }
257
258 @Override
259 public String getAxisLabel(DiagramGenerator generator) {
260 return generator.msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT);
261 }
262 }
263 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org