Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/process/FixWQProcessor.java @ 9360:ddcd52d239cd
Outliers in fixation calculation are now shown within the other 'B' event themes and get a separate symbol (triangle).
Removed old outliers theme.
Also consider showpoints property.
Also consider pointsize property.
author | gernotbelger |
---|---|
date | Wed, 01 Aug 2018 17:13:52 +0200 |
parents | 13bbc75ed0bc |
children | 9b8e8fc1f408 |
comparison
equal
deleted
inserted
replaced
9359:df6f1b5806f6 | 9360:ddcd52d239cd |
---|---|
24 import org.dive4elements.river.artifacts.model.QWDDateRange; | 24 import org.dive4elements.river.artifacts.model.QWDDateRange; |
25 import org.dive4elements.river.artifacts.model.WQKms; | 25 import org.dive4elements.river.artifacts.model.WQKms; |
26 import org.dive4elements.river.artifacts.model.fixings.FixFunction; | 26 import org.dive4elements.river.artifacts.model.fixings.FixFunction; |
27 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; | 27 import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; |
28 import org.dive4elements.river.artifacts.model.fixings.QWD; | 28 import org.dive4elements.river.artifacts.model.fixings.QWD; |
29 import org.dive4elements.river.artifacts.model.fixings.QWI; | |
30 import org.dive4elements.river.artifacts.resources.Resources; | 29 import org.dive4elements.river.artifacts.resources.Resources; |
31 import org.dive4elements.river.exports.DiagramGenerator; | 30 import org.dive4elements.river.exports.DiagramGenerator; |
32 import org.dive4elements.river.exports.StyledSeriesBuilder; | 31 import org.dive4elements.river.exports.StyledSeriesBuilder; |
33 import org.dive4elements.river.exports.fixings.FixWQCurveGenerator; | 32 import org.dive4elements.river.exports.fixings.FixWQCurveGenerator; |
34 import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; | 33 import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; |
49 | 48 |
50 public class FixWQProcessor | 49 public class FixWQProcessor |
51 extends DefaultProcessor | 50 extends DefaultProcessor |
52 implements FacetTypes | 51 implements FacetTypes |
53 { | 52 { |
54 | |
55 private static Logger log = Logger.getLogger(FixWQProcessor.class); | 53 private static Logger log = Logger.getLogger(FixWQProcessor.class); |
56 | 54 |
57 private String I18N_AXIS_LABEL = "chart.discharge.curve.yaxis.label"; | 55 private String I18N_AXIS_LABEL = "chart.discharge.curve.yaxis.label"; |
58 | |
59 | 56 |
60 public FixWQProcessor() { | 57 public FixWQProcessor() { |
61 } | 58 } |
62 | 59 |
63 @Override | 60 @Override |
81 doEventsOut(generator, bundle, theme, visible); | 78 doEventsOut(generator, bundle, theme, visible); |
82 } | 79 } |
83 else if(FIX_WQ_CURVE.equals(facetType)) { | 80 else if(FIX_WQ_CURVE.equals(facetType)) { |
84 doWQCurveOut(generator, bundle, theme, visible); | 81 doWQCurveOut(generator, bundle, theme, visible); |
85 } | 82 } |
86 else if(FIX_OUTLIER.equals(facetType)) { | |
87 doOutlierOut(generator, bundle, theme, visible); | |
88 } | |
89 else if(QSECTOR.equals(facetType)) { | 83 else if(QSECTOR.equals(facetType)) { |
90 doQSectorOut(generator, bundle, theme, visible); | 84 doQSectorOut(generator, bundle, theme, visible); |
91 } | 85 } |
92 else if(STATIC_WKMS_MARKS.equals(facetType) || | 86 else if(STATIC_WKMS_MARKS.equals(facetType) || |
93 STATIC_WKMS.equals(facetType) || | 87 STATIC_WKMS.equals(facetType) || |
101 } | 95 } |
102 | 96 |
103 } | 97 } |
104 | 98 |
105 /** Add sector average points to chart. */ | 99 /** Add sector average points to chart. */ |
106 protected void doSectorAverageOut( | 100 private void doSectorAverageOut( |
107 DiagramGenerator generator, | 101 DiagramGenerator generator, |
108 ArtifactAndFacet bundle, | 102 ArtifactAndFacet bundle, |
109 ThemeDocument theme, | 103 ThemeDocument theme, |
110 boolean visible | 104 boolean visible |
111 ) { | 105 ) { |
144 } | 138 } |
145 } | 139 } |
146 | 140 |
147 | 141 |
148 /** Add analysis event points to chart. */ | 142 /** Add analysis event points to chart. */ |
149 protected void doEventsOut( | 143 private void doEventsOut( |
150 DiagramGenerator generator, | 144 DiagramGenerator generator, |
151 ArtifactAndFacet bundle, | 145 ArtifactAndFacet bundle, |
152 ThemeDocument theme, | 146 ThemeDocument theme, |
153 boolean visible | 147 boolean visible |
154 ) { | 148 ) { |
161 return; | 155 return; |
162 } | 156 } |
163 | 157 |
164 // prevent potential side effects | 158 // prevent potential side effects |
165 final ThemeDocument themeInterpolated = FixWQCurveGenerator.configureThemeInterpolated(theme, qwd); | 159 final ThemeDocument themeInterpolated = FixWQCurveGenerator.configureThemeInterpolated(theme, qwd); |
166 final XYSeries series = FixWQCurveGenerator.createQWDSeries(bundle, themeInterpolated, qwd); | 160 final XYSeries series = FixWQCurveGenerator.createQWDSeries(generator.getContext().getMeta(), bundle, themeInterpolated, qwd); |
167 | 161 |
168 generator.addAxisSeries(series, axisName, visible); | 162 generator.addAxisSeries(series, axisName, visible); |
169 | 163 |
170 if (visible && themeInterpolated.parseShowPointLabel()) { | 164 if (visible && themeInterpolated.parseShowPointLabel()) { |
171 | 165 |
183 flysAnno.setTextAnnotations(textAnnos); | 177 flysAnno.setTextAnnotations(textAnnos); |
184 generator.addAnnotations(flysAnno); | 178 generator.addAnnotations(flysAnno); |
185 } | 179 } |
186 } | 180 } |
187 | 181 |
188 /** Add reference event points to chart. */ | 182 private void doWQCurveOut( |
189 protected void doReferenceEventsOut( | |
190 DiagramGenerator generator, | |
191 ArtifactAndFacet bundle, | |
192 ThemeDocument theme, | |
193 boolean visible) { | |
194 log.debug("doReferenceEventsOut"); | |
195 | |
196 QWI qwd = (QWI)bundle.getData(generator.getContext()); | |
197 if (qwd == null) { | |
198 log.debug("doReferenceEventsOut: qwds == null in " | |
199 + bundle.getFacetDescription()); | |
200 return; | |
201 } | |
202 | |
203 | |
204 final ThemeDocument themeInterpolated = FixWQCurveGenerator.configureThemeInterpolated(theme, qwd); | |
205 final XYSeries series = FixWQCurveGenerator.createQWDSeries(bundle, themeInterpolated, qwd); | |
206 series.add(qwd.getQ(), qwd.getW(), false); | |
207 | |
208 if (visible && themeInterpolated.parseShowPointLabel()) { | |
209 DateFormat dateFormat = DateFormat.getDateInstance( | |
210 DateFormat.SHORT); | |
211 | |
212 XYTextAnnotation anno = new CollisionFreeXYTextAnnotation( | |
213 dateFormat.format(qwd.getDate()), | |
214 qwd.getQ(), | |
215 qwd.getW()); | |
216 | |
217 List<XYTextAnnotation> textAnnos = new ArrayList<>(); | |
218 textAnnos.add(anno); | |
219 RiverAnnotation flysAnno = new RiverAnnotation(null, null, null, themeInterpolated); | |
220 flysAnno.setTextAnnotations(textAnnos); | |
221 generator.addAnnotations(flysAnno); | |
222 } | |
223 | |
224 generator.addAxisSeries(series, axisName, visible); | |
225 } | |
226 | |
227 protected void doWQCurveOut( | |
228 DiagramGenerator generator, | 183 DiagramGenerator generator, |
229 ArtifactAndFacet bundle, | 184 ArtifactAndFacet bundle, |
230 ThemeDocument theme, | 185 ThemeDocument theme, |
231 boolean visible | 186 boolean visible |
232 ) { | 187 ) { |
254 | 209 |
255 generator.addAxisSeries(series, axisName, visible); | 210 generator.addAxisSeries(series, axisName, visible); |
256 } | 211 } |
257 else { | 212 else { |
258 log.warn("doWQCurveOut: maxQ <= 0"); | 213 log.warn("doWQCurveOut: maxQ <= 0"); |
259 } | |
260 } | |
261 | |
262 protected void doOutlierOut( | |
263 DiagramGenerator generator, | |
264 ArtifactAndFacet bundle, | |
265 ThemeDocument theme, | |
266 boolean visible | |
267 ) { | |
268 log.debug("doOutlierOut"); | |
269 | |
270 QWI[] qws = (QWI[])bundle.getData(generator.getContext()); | |
271 if(qws != null) { | |
272 XYSeries series = new StyledXYSeries( | |
273 bundle.getFacetDescription(), | |
274 false, true, | |
275 theme); | |
276 DateFormat dateFormat = DateFormat.getDateInstance( | |
277 DateFormat.SHORT); | |
278 | |
279 List<XYTextAnnotation> annos = new ArrayList<>(); | |
280 | |
281 for (QWI qw: qws) { | |
282 series.add(qw.getQ(), qw.getW(), false); | |
283 | |
284 XYTextAnnotation anno = new CollisionFreeXYTextAnnotation( | |
285 dateFormat.format(qw.getDate()), | |
286 qw.getQ(), | |
287 qw.getW()); | |
288 annos.add(anno); | |
289 } | |
290 generator.addAxisSeries(series, axisName, visible); | |
291 | |
292 if (visible && theme != null && theme.parseShowPointLabel()) { | |
293 RiverAnnotation flysAnno = | |
294 new RiverAnnotation(null, null, null, theme); | |
295 flysAnno.setTextAnnotations(annos); | |
296 generator.addAnnotations(flysAnno); | |
297 } | |
298 } | |
299 else { | |
300 log.debug("doOutlierOut: qwd == null"); | |
301 } | 214 } |
302 } | 215 } |
303 | 216 |
304 /** Add markers for q sectors. */ | 217 /** Add markers for q sectors. */ |
305 protected void doQSectorOut( | 218 protected void doQSectorOut( |
485 return facettype.startsWith(FIX_SECTOR_AVERAGE_WQ) | 398 return facettype.startsWith(FIX_SECTOR_AVERAGE_WQ) |
486 || FIX_ANALYSIS_EVENTS_WQ.equals(facettype) | 399 || FIX_ANALYSIS_EVENTS_WQ.equals(facettype) |
487 || FIX_REFERENCE_EVENTS_WQ.equals(facettype) | 400 || FIX_REFERENCE_EVENTS_WQ.equals(facettype) |
488 || FIX_EVENTS.equals(facettype) | 401 || FIX_EVENTS.equals(facettype) |
489 || FIX_WQ_CURVE.equals(facettype) | 402 || FIX_WQ_CURVE.equals(facettype) |
490 || FIX_OUTLIER.equals(facettype) | |
491 || QSECTOR.equals(facettype) | 403 || QSECTOR.equals(facettype) |
492 || STATIC_WKMS_MARKS.equals(facettype) | 404 || STATIC_WKMS_MARKS.equals(facettype) |
493 || STATIC_WKMS.equals(facettype) | 405 || STATIC_WKMS.equals(facettype) |
494 || HEIGHTMARKS_POINTS.equals(facettype) | 406 || HEIGHTMARKS_POINTS.equals(facettype) |
495 || LONGITUDINAL_W.equals(facettype) | 407 || LONGITUDINAL_W.equals(facettype) |