comparison artifacts/src/main/java/org/dive4elements/river/exports/process/DischargeProcessor.java @ 8436:17c3aaa17112

More cleanup in discharge data processing.
author "Tom Gottfried <tom@intevation.de>"
date Mon, 20 Oct 2014 13:52:15 +0200
parents 0fa963038c61
children 5e38e2924c07
comparison
equal deleted inserted replaced
8435:6ebad936d82b 8436:17c3aaa17112
21 import org.dive4elements.river.artifacts.model.WQKms; 21 import org.dive4elements.river.artifacts.model.WQKms;
22 import org.dive4elements.river.artifacts.resources.Resources; 22 import org.dive4elements.river.artifacts.resources.Resources;
23 import org.dive4elements.river.exports.DiagramGenerator; 23 import org.dive4elements.river.exports.DiagramGenerator;
24 import org.dive4elements.river.exports.StyledSeriesBuilder; 24 import org.dive4elements.river.exports.StyledSeriesBuilder;
25 import org.dive4elements.river.jfree.StyledXYSeries; 25 import org.dive4elements.river.jfree.StyledXYSeries;
26 import org.dive4elements.river.model.Gauge;
27 import org.dive4elements.river.model.River;
28 import org.dive4elements.river.themes.ThemeDocument; 26 import org.dive4elements.river.themes.ThemeDocument;
29 27
30 28
31 /** Helper for data handling in discharge diagrams. */ 29 /** Helper for data handling in discharge diagrams. */
32 public class DischargeProcessor 30 public class DischargeProcessor
35 private final static Logger log = 33 private final static Logger log =
36 Logger.getLogger(DischargeProcessor.class); 34 Logger.getLogger(DischargeProcessor.class);
37 35
38 /** Station for which the diagram is shown. */ 36 /** Station for which the diagram is shown. */
39 private double km; 37 private double km;
40
41 /** Tolerance for comparison of kilometers. */
42 public static final double KM_EPSILON = 0.001d;
43 38
44 private String yAxisLabel = ""; 39 private String yAxisLabel = "";
45 40
46 private String I18N_AXIS_LABEL = "chart.discharge.curve.yaxis.label"; 41 private String I18N_AXIS_LABEL = "chart.discharge.curve.yaxis.label";
47 42
69 Object data = bundle.getData(context); 64 Object data = bundle.getData(context);
70 if (data instanceof WQKms) { 65 if (data instanceof WQKms) {
71 doDischargeOut( 66 doDischargeOut(
72 generator, 67 generator,
73 bundle, 68 bundle,
74 bundle.getFacetDescription().trim(),
75 theme, 69 theme,
76 visible); 70 visible);
77 } 71 }
78 else { 72 else {
79 log.error("Can't process " 73 log.error("Can't process "
84 78
85 /** True if this processor knows how to deal with facetType. */ 79 /** True if this processor knows how to deal with facetType. */
86 @Override 80 @Override
87 public boolean canHandle(String facetType) { 81 public boolean canHandle(String facetType) {
88 return DISCHARGE_CURVE.equals(facetType) 82 return DISCHARGE_CURVE.equals(facetType)
89 || GAUGE_DISCHARGE_CURVE.equals(facetType); 83 || GAUGE_DISCHARGE_CURVE.equals(facetType)
84 || COMPUTED_DISCHARGE_Q.equals(facetType);
90 } 85 }
91 86
92 87
93 /** The station of the current calculation/view. */ 88 /** The station of the current calculation/view. */
94 protected double getKm() { 89 protected double getKm() {
99 * Add series with discharge curve to diagram. 94 * Add series with discharge curve to diagram.
100 */ 95 */
101 protected void doDischargeOut( 96 protected void doDischargeOut(
102 DiagramGenerator generator, 97 DiagramGenerator generator,
103 ArtifactAndFacet bundle, 98 ArtifactAndFacet bundle,
104 String name,
105 ThemeDocument theme, 99 ThemeDocument theme,
106 boolean visible) 100 boolean visible
107 { 101 ) {
108 log.debug("DischargeCurveGenerator.doDischargeOut");
109 CallContext context = generator.getCallContext(); 102 CallContext context = generator.getCallContext();
110 Map<String, String> metaData = bundle.getFacet().getMetaData( 103 Map<String, String> metaData = bundle.getFacet().getMetaData(
111 bundle.getArtifact(), context); 104 bundle.getArtifact(), context);
112 WQKms data = (WQKms)bundle.getData(context); 105 WQKms data = (WQKms)bundle.getData(context);
113 Double skm = data.sameKm(); 106 Double skm = data.sameKm();
114 if (skm != null && Math.abs(skm-km) > 0.00001) { 107 if (skm != null && Math.abs(skm-km) > 0.00001) {
115 return; 108 return;
116 } 109 }
117 StyledXYSeries series = new StyledXYSeries(name, theme); 110 StyledXYSeries series = new StyledXYSeries(
111 bundle.getFacetDescription().trim(), theme);
118 double[][] wqData = new double[2][data.size()]; 112 double[][] wqData = new double[2][data.size()];
119 for (int i = 0, n = data.size(); i < n; i++) { 113 for (int i = 0, n = data.size(); i < n; i++) {
120 wqData[0][i] = data.getQ(i); 114 wqData[0][i] = data.getQ(i);
121 wqData[1][i] = data.getW(i); 115 wqData[1][i] = data.getW(i);
122 } 116 }
123 StyledSeriesBuilder.addPoints(series, wqData, false); 117 StyledSeriesBuilder.addPoints(series, wqData, false);
124 118
125 series.putMetaData(metaData, bundle.getArtifact(), context); 119 series.putMetaData(metaData, bundle.getArtifact(), context);
126 yAxisLabel = metaData.get("Y"); 120 yAxisLabel = metaData.get("Y");
127
128 String gaugeName = data.getName();
129 RiverAccess access = new RiverAccess((D4EArtifact)bundle.getArtifact());
130 River river = access.getRiver();
131
132 if (river == null) {
133 log.debug("no river found");
134 return;
135 }
136
137 Gauge gauge = river.determineGaugeByName(gaugeName);
138
139 if (gauge == null) {
140 log.debug("no gauge found");
141 return;
142 }
143 generator.addAxisSeries(series, axisName, visible); 121 generator.addAxisSeries(series, axisName, visible);
144 } 122 }
145 123
146 @Override 124 @Override
147 public String getAxisLabel(DiagramGenerator generator) { 125 public String getAxisLabel(DiagramGenerator generator) {

http://dive4elements.wald.intevation.org