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 :

http://dive4elements.wald.intevation.org