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() {

http://dive4elements.wald.intevation.org