Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/process/DischargeProcessor.java @ 6880:8a4e344b309a
issue1378: Preparing DischargeProcessor to be able to draw W/Q points,
code borrowed from FixWQGenerator.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 20 Aug 2013 15:05:07 +0200 |
parents | 9b35bf3227e9 |
children | e97e710ecf3f |
comparison
equal
deleted
inserted
replaced
6879:1186fa8a0bb9 | 6880:8a4e344b309a |
---|---|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the | 5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.exports.process; | 9 package org.dive4elements.river.exports.process; |
10 | |
11 import java.util.ArrayList; | |
12 import java.util.List; | |
10 | 13 |
11 import org.apache.log4j.Logger; | 14 import org.apache.log4j.Logger; |
12 import org.jfree.data.xy.XYSeries; | 15 import org.jfree.data.xy.XYSeries; |
13 import org.w3c.dom.Document; | 16 import org.w3c.dom.Document; |
14 | 17 |
16 import org.dive4elements.artifacts.CallContext; | 19 import org.dive4elements.artifacts.CallContext; |
17 import org.dive4elements.river.artifacts.model.FacetTypes; | 20 import org.dive4elements.river.artifacts.model.FacetTypes; |
18 import org.dive4elements.river.artifacts.model.WQKms; | 21 import org.dive4elements.river.artifacts.model.WQKms; |
19 import org.dive4elements.river.exports.StyledSeriesBuilder; | 22 import org.dive4elements.river.exports.StyledSeriesBuilder; |
20 import org.dive4elements.river.exports.XYChartGenerator; | 23 import org.dive4elements.river.exports.XYChartGenerator; |
24 import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; | |
25 import org.dive4elements.river.jfree.RiverAnnotation; | |
21 import org.dive4elements.river.jfree.StyledXYSeries; | 26 import org.dive4elements.river.jfree.StyledXYSeries; |
27 import org.dive4elements.river.utils.ThemeUtil; | |
28 | |
29 import org.jfree.chart.annotations.XYTextAnnotation; | |
22 | 30 |
23 | 31 |
24 /** Helper for data handling in discharge diagrams. */ | 32 /** Helper for data handling in discharge diagrams. */ |
25 public class DischargeProcessor | 33 public class DischargeProcessor |
26 implements Processor, FacetTypes { | 34 implements Processor, FacetTypes { |
27 | 35 |
28 private final static Logger logger = | 36 private final static Logger logger = |
29 Logger.getLogger(DischargeProcessor.class); | 37 Logger.getLogger(DischargeProcessor.class); |
38 | |
39 /** Station for which the diagram is shown. */ | |
40 private double km; | |
41 | |
42 /** Tolerance for comparison of kilometers. */ | |
43 public static final double KM_EPSILON = 0.001d; | |
44 | |
45 | |
46 /** This processor needs to be constructed with a given km. */ | |
47 private DischargeProcessor() { | |
48 km = Double.NaN; | |
49 } | |
50 | |
51 | |
52 public DischargeProcessor(double km) { | |
53 this.km = km; | |
54 } | |
30 | 55 |
31 | 56 |
32 /** Process data, add it to plot. */ | 57 /** Process data, add it to plot. */ |
33 @Override | 58 @Override |
34 public void doOut( | 59 public void doOut( |
39 int index | 64 int index |
40 ) { | 65 ) { |
41 CallContext context = generator.getCallContext(); | 66 CallContext context = generator.getCallContext(); |
42 Object data = aandf.getData(context); | 67 Object data = aandf.getData(context); |
43 if (data instanceof WQKms) { | 68 if (data instanceof WQKms) { |
44 // TODO: Fetch point | 69 doWQKmsPointOut( |
70 generator, (WQKms) data, aandf, theme, visible, index); | |
45 return; | 71 return; |
46 } | 72 } |
47 logger.error("Can't process " + data.getClass().getName() + " objects"); | 73 logger.error("Can't process " + data.getClass().getName() + " objects"); |
48 } | 74 } |
49 | 75 |
50 | 76 |
51 /** True if this processor knows how to deal with facetType. */ | 77 /** True if this processor knows how to deal with facetType. */ |
52 @Override | 78 @Override |
53 public boolean canHandle(String facetType) { | 79 public boolean canHandle(String facetType) { |
54 return BED_DIFFERENCE_HEIGHT_YEAR.equals(facetType); | 80 return STATIC_WQKMS_W.equals(facetType); |
55 } | 81 } |
56 | 82 |
57 | 83 |
58 /** TODO Handle WQKms point data. */ | 84 /** Handle WQKms data by finding w/q values at given km. */ |
59 protected void doWQKmsPointOut(XYChartGenerator generator, | 85 protected void doWQKmsPointOut(XYChartGenerator generator, |
60 WQKms data, | 86 WQKms wqkms, |
61 ArtifactAndFacet aandf, | 87 ArtifactAndFacet aandf, |
62 Document theme, | 88 Document theme, |
63 boolean visible, | 89 boolean visible, |
64 int axidx) { | 90 int axidx |
91 ) { | |
92 String title = aandf.getFacetDescription(); | |
93 XYSeries series = new StyledXYSeries( | |
94 title, | |
95 theme); | |
65 | 96 |
66 /* | 97 double[] kms = wqkms.getKms(); |
67 XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); | |
68 StyledSeriesBuilder.addPoints(series, data.getHeightPerYearData(), false, GAP_TOLERANCE); | |
69 | 98 |
70 generator.addAxisSeries(series, axidx, visible); | 99 for (int i = 0 ; i< kms.length; i++) { |
71 */ | 100 if (Math.abs(kms[i] - km) <= KM_EPSILON) { |
101 series.add(wqkms.getQ(i), wqkms.getW(i)); | |
102 generator.addAxisSeries(series, axidx, visible); | |
103 if(visible && ThemeUtil.parseShowPointLabel(theme)) { | |
104 List<XYTextAnnotation> textAnnos = new ArrayList<XYTextAnnotation>(); | |
105 XYTextAnnotation anno = new CollisionFreeXYTextAnnotation( | |
106 title, | |
107 wqkms.getQ(i), | |
108 // TODO add a percentage to the extend of W axis | |
109 wqkms.getW(i)); | |
110 textAnnos.add(anno); | |
111 RiverAnnotation flysAnno = new RiverAnnotation(null, null, null, theme); | |
112 flysAnno.setTextAnnotations(textAnnos); | |
113 generator.addAnnotations(flysAnno); | |
114 } | |
115 return; | |
116 } | |
117 } | |
72 } | 118 } |
73 } | 119 } |
74 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 120 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |