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)

http://dive4elements.wald.intevation.org