Mercurial > dive4elements > river
annotate flys-artifacts/src/main/java/de/intevation/flys/exports/process/WOutProcessor.java @ 4585:b4a95290ec63
Refactor ComputedDischargeCurveExporter to support WQKms values and WQKms arrays
Not only allow CalculationResult objects in ComputedDischargeCurveExporter. Also
generate exports from WQKms values and WQKms arrays.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Tue, 27 Nov 2012 17:41:41 +0100 |
parents | a5993b69439b |
children | 547041487266 |
rev | line source |
---|---|
4447
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.flys.exports.process; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
2 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
3 import org.apache.log4j.Logger; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
4 import org.jfree.data.xy.XYSeries; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
5 import org.w3c.dom.Document; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
6 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
7 import de.intevation.artifactdatabase.state.ArtifactAndFacet; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
8 import de.intevation.artifacts.CallContext; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
9 import de.intevation.flys.artifacts.model.FacetTypes; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
10 import de.intevation.flys.artifacts.model.WKms; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
11 import de.intevation.flys.exports.StyledSeriesBuilder; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
12 import de.intevation.flys.exports.XYChartGenerator; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
13 import de.intevation.flys.jfree.StyledAreaSeriesCollection; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
14 import de.intevation.flys.jfree.StyledXYSeries; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
15 import de.intevation.flys.utils.DataUtil; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
16 import de.intevation.flys.utils.ThemeUtil; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
17 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
18 /** |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
19 * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
20 */ |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
21 public class WOutProcessor implements Processor { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
22 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
23 private static final Logger logger = |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
24 Logger.getLogger(WOutProcessor.class); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
25 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
26 @Override |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
27 public void doOut( |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
28 XYChartGenerator generator, |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
29 ArtifactAndFacet aaf, |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
30 Document theme, |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
31 boolean visible, |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
32 int index) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
33 { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
34 CallContext context = generator.getCallContext(); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
35 WKms wkms = (WKms) aaf.getData(context); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
36 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
37 logger.debug("doOut"); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
38 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
39 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), theme); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
40 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
41 StyledSeriesBuilder.addPoints(series, wkms); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
42 generator.addAxisSeries(series, index, visible); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
43 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
44 // If a "band around the curve shall be drawn, add according area. |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
45 double bandWidth = ThemeUtil.parseBandWidth(theme); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
46 if (bandWidth > 0 ) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
47 XYSeries seriesDown = new StyledXYSeries( |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
48 "band " + aaf.getFacetDescription(), false, theme); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
49 XYSeries seriesUp = new StyledXYSeries( |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
50 aaf.getFacetDescription()+"+/-"+bandWidth, false, theme); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
51 StyledSeriesBuilder.addUpperBand(seriesUp, wkms, bandWidth); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
52 StyledSeriesBuilder.addLowerBand(seriesDown, wkms, bandWidth); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
53 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
54 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
55 area.addSeries(seriesUp); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
56 area.addSeries(seriesDown); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
57 area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
58 generator.addAreaSeries(area, index, visible); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
59 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
60 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
61 invertAxis(generator, wkms); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
62 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
63 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
64 /** |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
65 * Returns true if facettype is longitutinal_section.w |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
66 */ |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
67 @Override |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
68 public boolean canHandle(String facettype) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
69 if (facettype == null) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
70 return false; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
71 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
72 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
73 if (facettype.equals(FacetTypes.LONGITUDINAL_W) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
74 || facettype.equals(FacetTypes.STATIC_WKMS) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
75 || facettype.equals(FacetTypes.HEIGHTMARKS_POINTS) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
76 || facettype.equals(FacetTypes.STATIC_WQKMS) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
77 || facettype.equals(FacetTypes.STATIC_WQKMS_W) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
78 || facettype.equals(FacetTypes.DISCHARGE_LONGITUDINAL_W)) |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
79 { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
80 return true; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
81 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
82 return false; |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
83 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
84 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
85 /** |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
86 * This method determines - taking JFreeCharts auto x value ordering into |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
87 * account - if the x axis need to be inverted. Waterlines in these charts |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
88 * should decrease. |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
89 * |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
90 * @param wkms The data object that stores the x and y values used for this |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
91 * chart. |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
92 */ |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
93 public void invertAxis(XYChartGenerator generator, WKms wkms) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
94 boolean wsUp = wkms.guessWaterIncreasing(); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
95 boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms()); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
96 boolean inv = (wsUp && kmUp) || (!wsUp && !kmUp); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
97 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
98 int size = wkms.size(); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
99 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
100 if (logger.isDebugEnabled()) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
101 logger.debug("(Wkms)Values : " + size); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
102 if (size > 0) { |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
103 logger.debug("Start km: " + wkms.getKm(0)); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
104 logger.debug("End km: " + wkms.getKm(size-1)); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
105 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
106 logger.debug("wsUp: " + wsUp); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
107 logger.debug("kmUp: " + kmUp); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
108 logger.debug("inv: " + inv); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
109 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
110 generator.setInverted(inv); |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
111 } |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
112 |
a5993b69439b
Add processor to be able to generate curves for WKms values
Björn Ricks <bjoern.ricks@intevation.de>
parents:
diff
changeset
|
113 } |