Mercurial > dive4elements > river
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 : |