Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/fixings/FixLongitudinalSectionGenerator.java @ 6439:b02f3a948858
Enabled basedata datacage in fix analysis ls.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 26 Jun 2013 15:15:14 +0200 |
parents | af13ceeba52a |
children | ef3b02034f6a 1b35b2ddfc28 |
comparison
equal
deleted
inserted
replaced
6438:b9c5bb510b39 | 6439:b02f3a948858 |
---|---|
10 | 10 |
11 import java.awt.BasicStroke; | 11 import java.awt.BasicStroke; |
12 import java.awt.Color; | 12 import java.awt.Color; |
13 | 13 |
14 import org.apache.log4j.Logger; | 14 import org.apache.log4j.Logger; |
15 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; | |
16 import org.dive4elements.river.artifacts.D4EArtifact; | |
17 import org.dive4elements.river.artifacts.model.FacetTypes; | |
18 import org.dive4elements.river.artifacts.model.WKms; | |
19 import org.dive4elements.river.artifacts.model.WQKms; | |
20 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod; | |
21 import org.dive4elements.river.artifacts.model.fixings.QWD; | |
22 import org.dive4elements.river.exports.ChartGenerator; | |
23 import org.dive4elements.river.exports.StyledSeriesBuilder; | |
24 import org.dive4elements.river.exports.process.KMIndexProcessor; | |
25 import org.dive4elements.river.exports.process.Processor; | |
26 import org.dive4elements.river.exports.process.WOutProcessor; | |
27 import org.dive4elements.river.jfree.RiverAnnotation; | |
28 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; | |
29 import org.dive4elements.river.jfree.StyledXYSeries; | |
30 import org.dive4elements.river.utils.DataUtil; | |
31 import org.dive4elements.river.utils.KMIndex; | |
32 import org.dive4elements.river.utils.RiverUtils; | |
15 import org.jfree.chart.plot.Marker; | 33 import org.jfree.chart.plot.Marker; |
16 import org.jfree.chart.plot.ValueMarker; | 34 import org.jfree.chart.plot.ValueMarker; |
17 import org.jfree.data.xy.XYSeries; | 35 import org.jfree.data.xy.XYSeries; |
18 import org.w3c.dom.Document; | 36 import org.w3c.dom.Document; |
19 | |
20 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; | |
21 import org.dive4elements.river.artifacts.model.FacetTypes; | |
22 import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod; | |
23 import org.dive4elements.river.artifacts.model.fixings.QWD; | |
24 import org.dive4elements.river.exports.ChartGenerator; | |
25 import org.dive4elements.river.exports.process.KMIndexProcessor; | |
26 import org.dive4elements.river.exports.process.Processor; | |
27 import org.dive4elements.river.jfree.RiverAnnotation; | |
28 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; | |
29 import org.dive4elements.river.jfree.StyledXYSeries; | |
30 import org.dive4elements.river.utils.KMIndex; | |
31 | 37 |
32 public class FixLongitudinalSectionGenerator | 38 public class FixLongitudinalSectionGenerator |
33 extends FixChartGenerator | 39 extends FixChartGenerator |
34 implements FacetTypes | 40 implements FacetTypes |
35 { | 41 { |
55 "delta W [cm]"; | 61 "delta W [cm]"; |
56 | 62 |
57 public static final String I18N_DW_YAXIS_LABEL = | 63 public static final String I18N_DW_YAXIS_LABEL = |
58 "chart.fixings.longitudinalsection.yaxis.label"; | 64 "chart.fixings.longitudinalsection.yaxis.label"; |
59 | 65 |
66 public static final String I18N_W_YAXIS_LABEL = | |
67 "chart.longitudinal.section.yaxis.label"; | |
68 | |
69 public static final String I18N_Q_YAXIS_LABEL = | |
70 "chart.longitudinal.section.yaxis.second.label"; | |
71 | |
72 public static final String I18N_W_YAXIS_LABEL_DEFAULT = "W [NN + m]"; | |
73 public static final String I18N_Q_YAXIS_LABEL_DEFAULT = "Q [m\u00b3/s]"; | |
74 | |
60 public static enum YAXIS { | 75 public static enum YAXIS { |
61 dW(0); | 76 dW(0), W(1), Q(2); |
62 public int idx; | 77 public int idx; |
63 private YAXIS(int c) { | 78 private YAXIS(int c) { |
64 idx = c; | 79 idx = c; |
65 } | 80 } |
66 } | 81 } |
69 public void doOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 84 public void doOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
70 String name = aaf.getFacetName(); | 85 String name = aaf.getFacetName(); |
71 logger.debug("FixLongitudinalSectionGenerator: doOut: " + name); | 86 logger.debug("FixLongitudinalSectionGenerator: doOut: " + name); |
72 | 87 |
73 Processor processor = new KMIndexProcessor(); | 88 Processor processor = new KMIndexProcessor(); |
89 Processor wProcessor = new WOutProcessor(); | |
74 if (name.contains(FIX_SECTOR_AVERAGE_LS_DEVIATION)) { | 90 if (name.contains(FIX_SECTOR_AVERAGE_LS_DEVIATION)) { |
75 doSectorAverageDeviationOut(aaf, doc, visible); | 91 doSectorAverageDeviationOut(aaf, doc, visible); |
76 } | 92 } |
77 else if (processor.canHandle(name)) { | 93 else if (processor.canHandle(name)) { |
78 processor.doOut(this, aaf, doc, visible, YAXIS.dW.idx); | 94 processor.doOut(this, aaf, doc, visible, YAXIS.dW.idx); |
95 } | |
96 else if (wProcessor.canHandle(name)) { | |
97 wProcessor.doOut(this, aaf, doc, visible, YAXIS.W.idx); | |
98 } | |
99 else if (name.equals(STATIC_WQKMS_Q)) { | |
100 doQOut( | |
101 (WQKms) aaf.getData(context), | |
102 aaf, | |
103 doc, | |
104 visible); | |
79 } | 105 } |
80 else if (name.equals(FIX_DEVIATION_LS)) { | 106 else if (name.equals(FIX_DEVIATION_LS)) { |
81 doReferenceDeviationOut(aaf, doc, visible); | 107 doReferenceDeviationOut(aaf, doc, visible); |
82 } | 108 } |
83 else if (name.equals(LONGITUDINAL_ANNOTATION)) { | 109 else if (name.equals(LONGITUDINAL_ANNOTATION)) { |
93 doc, visible, YAXIS.dW.idx); | 119 doc, visible, YAXIS.dW.idx); |
94 } | 120 } |
95 else { | 121 else { |
96 logger.warn("Unknown facet name " + name); | 122 logger.warn("Unknown facet name " + name); |
97 } | 123 } |
124 } | |
125 | |
126 /** | |
127 * Process the output for Q facets in a longitudinal section curve. | |
128 * | |
129 * @param wqkms An array of WQKms values. | |
130 * @param aandf The facet and artifact. This facet does NOT support any data objects. Use | |
131 * D4EArtifact.getNativeFacet() instead to retrieve a Facet which supports | |
132 * data. | |
133 * @param theme The theme that contains styling information. | |
134 * @param visible The visibility of the curve. | |
135 */ | |
136 protected void doQOut( | |
137 WQKms wqkms, | |
138 ArtifactAndFacet aandf, | |
139 Document theme, | |
140 boolean visible | |
141 ) { | |
142 logger.debug("LongitudinalSectionGenerator.doQOut"); | |
143 | |
144 XYSeries series = new StyledXYSeries(aandf.getFacetDescription(), theme); | |
145 | |
146 StyledSeriesBuilder.addStepPointsKmQ(series, wqkms); | |
147 | |
148 addAxisSeries(series, YAXIS.Q.idx, visible); | |
149 | |
150 if (needInvertAxis(wqkms)) { | |
151 setInverted(true); | |
152 } | |
153 } | |
154 | |
155 /** | |
156 * This method determines - taking JFreeCharts auto x value ordering into | |
157 * account - if the x axis need to be inverted. Waterlines in these charts | |
158 * should decrease. | |
159 * | |
160 * @param wkms The data object that stores the x and y values used for this | |
161 * chart. | |
162 */ | |
163 public boolean needInvertAxis(WKms wkms) { | |
164 boolean wsUp = wkms.guessWaterIncreasing(); | |
165 boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms()); | |
166 boolean inv = (wsUp && kmUp) || (!wsUp && !kmUp); | |
167 | |
168 int size = wkms.size(); | |
169 | |
170 if (logger.isDebugEnabled()) { | |
171 logger.debug("(Wkms)Values : " + size); | |
172 if (size > 0) { | |
173 logger.debug("Start km: " + wkms.getKm(0)); | |
174 logger.debug("End km: " + wkms.getKm(size-1)); | |
175 } | |
176 logger.debug("wsUp: " + wsUp); | |
177 logger.debug("kmUp: " + kmUp); | |
178 logger.debug("inv: " + inv); | |
179 } | |
180 | |
181 return inv; | |
98 } | 182 } |
99 | 183 |
100 @SuppressWarnings("unchecked") | 184 @SuppressWarnings("unchecked") |
101 protected void doSectorAverageDeviationOut( | 185 protected void doSectorAverageDeviationOut( |
102 ArtifactAndFacet aaf, | 186 ArtifactAndFacet aaf, |
197 return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); | 281 return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); |
198 } | 282 } |
199 | 283 |
200 @Override | 284 @Override |
201 protected String getDefaultYAxisLabel(int pos) { | 285 protected String getDefaultYAxisLabel(int pos) { |
202 return msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT); | 286 if (pos == YAXIS.dW.idx) { |
287 return msg(I18N_DW_YAXIS_LABEL, I18N_DW_YAXIS_LABEL_DEFAULT); | |
288 } | |
289 else if (pos == YAXIS.W.idx) { | |
290 D4EArtifact flys = (D4EArtifact) master; | |
291 String unit = RiverUtils.getRiver(flys).getWstUnit().getName(); | |
292 return msg( | |
293 I18N_W_YAXIS_LABEL, | |
294 I18N_W_YAXIS_LABEL_DEFAULT, | |
295 new Object[] { unit }); | |
296 } | |
297 else if (pos == YAXIS.Q.idx) { | |
298 return msg(I18N_Q_YAXIS_LABEL, I18N_Q_YAXIS_LABEL_DEFAULT); | |
299 } | |
300 return ""; | |
203 } | 301 } |
204 | 302 |
205 @Override | 303 @Override |
206 protected ChartGenerator.YAxisWalker getYAxisWalker() { | 304 protected ChartGenerator.YAxisWalker getYAxisWalker() { |
207 return new YAxisWalker() { | 305 return new YAxisWalker() { |