Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java @ 9556:9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
author | gernotbelger |
---|---|
date | Tue, 23 Oct 2018 16:26:58 +0200 |
parents | d8e753d0fdb9 |
children |
rev | line source |
---|---|
7101 | 1 /* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde |
2 * Software engineering by Intevation GmbH | |
3 * | |
4 * This file is Free Software under the GNU AGPL (>=v3) | |
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
6 * documentation coming with Dive4Elements River for details. | |
7 */ | |
8 | |
9 | |
10 package org.dive4elements.river.exports.process; | |
11 | |
12 import org.apache.log4j.Logger; | |
13 | |
14 | |
15 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; | |
16 import org.dive4elements.artifacts.CallContext; | |
17 | |
18 import org.dive4elements.river.artifacts.geom.Lines; | |
19 import org.dive4elements.river.artifacts.model.WKms; | |
20 import org.dive4elements.river.artifacts.model.WQKms; | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
21 import org.dive4elements.river.artifacts.model.WQCKms; |
7101 | 22 import org.dive4elements.river.artifacts.model.AreaFacet; |
23 import org.dive4elements.river.artifacts.model.FacetTypes; | |
24 import org.dive4elements.river.exports.DiagramGenerator; | |
25 import org.dive4elements.river.exports.StyledSeriesBuilder; | |
26 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; | |
27 import org.dive4elements.river.jfree.StyledXYSeries; | |
28 import org.dive4elements.river.themes.ThemeDocument; | |
29 | |
30 import org.jfree.data.xy.XYSeries; | |
31 | |
32 public class AreaProcessor extends DefaultProcessor { | |
33 | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
34 private static final Logger log = Logger.getLogger(AreaProcessor.class); |
7101 | 35 |
8856 | 36 protected XYSeries getSeries( |
9556
9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents:
9496
diff
changeset
|
37 String facetName, |
8856 | 38 String seriesName, |
39 Object data, | |
40 String facetType, | |
41 ThemeDocument theme | |
42 ) { | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
43 if (data == null || facetType == null) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
44 return null; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
45 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
46 |
9556
9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents:
9496
diff
changeset
|
47 XYSeries series = new StyledXYSeries(facetName,seriesName, false, theme); |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
48 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
49 if (facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_C)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
50 WQCKms wqckms = (WQCKms) data; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
51 int size = wqckms.size(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
52 for (int i = 0; i < size; i++) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
53 series.add(wqckms.getKm(i), wqckms.getC(i), false); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
54 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
55 } else if (data instanceof WQKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
56 if (FacetTypes.IS.Q(facetType)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
57 StyledSeriesBuilder.addPointsKmQ(series, (WQKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
58 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
59 else { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
60 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
61 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
62 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
63 else if (data instanceof double[][]) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
64 StyledSeriesBuilder.addPoints(series, (double [][]) data, false); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
65 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
66 else if (data instanceof WKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
67 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
68 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
69 else if (data instanceof Lines.LineData) { |
8856 | 70 StyledSeriesBuilder.addPoints( |
71 series, ((Lines.LineData) data).points, false); | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
72 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
73 else { |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
74 log.error("Do not know how to deal with (up) area info from: " |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
75 + data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
76 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
77 return series; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
78 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
79 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
80 |
7101 | 81 @Override |
82 public void doOut( | |
83 DiagramGenerator generator, | |
84 ArtifactAndFacet bundle, | |
85 ThemeDocument theme, | |
86 boolean visible) { | |
9123
1cc7653ca84f
Cleanup of ChartGenerator and ChartGenerator2 code. Put some of the copy/pasted code into a common abstraction.
gernotbelger
parents:
8856
diff
changeset
|
87 CallContext context = generator.getContext(); |
7101 | 88 String seriesName = bundle.getFacetDescription(); |
9556
9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents:
9496
diff
changeset
|
89 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(bundle.getFacetName(),theme); |
7101 | 90 |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
91 log.debug("Area Processor processing: " + seriesName); |
7101 | 92 |
93 AreaFacet.Data data = (AreaFacet.Data) bundle.getData(context); | |
94 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
95 String lowerFacetName = data.getLowerFacetName(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
96 String upperFacetName = data.getUpperFacetName(); |
7101 | 97 |
9556
9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents:
9496
diff
changeset
|
98 XYSeries up = getSeries(bundle.getFacetName(), |
8856 | 99 seriesName, data.getUpperData(), upperFacetName, theme); |
9556
9b8e8fc1f408
Use facetName in all processors as themeType for legend aggregation.
gernotbelger
parents:
9496
diff
changeset
|
100 XYSeries down = getSeries(bundle.getFacetName(), |
8856 | 101 seriesName + " ", data.getLowerData(), lowerFacetName, theme); |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
102 |
7101 | 103 |
8856 | 104 // TODO Depending on style, the area (e.g. 20m^2) |
105 // should be added as annotation. | |
7101 | 106 |
107 if (up == null && down != null) { | |
108 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
109 down.setKey(seriesName); | |
110 area.addSeries(down); | |
111 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(down)); | |
112 } | |
113 else if (up != null && down == null) { | |
114 area.setMode(StyledAreaSeriesCollection.FILL_MODE.UNDER); | |
115 area.addSeries(up); | |
116 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(up)); | |
117 } | |
118 else if (up != null && down != null) { | |
119 if (data.doPaintBetween()) { | |
120 area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); | |
121 } | |
122 else { | |
123 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
124 } | |
125 area.addSeries(up); | |
126 area.addSeries(down); | |
127 } | |
128 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
129 String facetNameForAxis = lowerFacetName == null |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
130 ? upperFacetName |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
131 : lowerFacetName; |
7101 | 132 /* Decide axis name based on facet name */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
9123
diff
changeset
|
133 generator.addAxisDataset(area, |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
134 axisNameForFacet(facetNameForAxis), visible); |
7101 | 135 } |
136 | |
137 /** Look up the axis identifier for a given facet type. */ | |
138 private String axisNameForFacet(String facetName) { | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
139 if (FacetTypes.W_DIFFERENCES.equals(facetName)) { |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
140 return "diffW"; |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
141 } |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
142 if (FacetTypes.IS.W(facetName) || |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
143 FacetTypes.DISCHARGE_LONGITUDINAL_C.equals(facetName)) { |
7101 | 144 return "W"; |
145 } | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
146 if (FacetTypes.IS.Q(facetName)) { |
7101 | 147 return "Q"; |
148 } | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
149 log.warn("Could not find axis for facet " + facetName); |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
150 return "W"; |
7101 | 151 } |
152 | |
153 @Override | |
154 public boolean canHandle(String facetType) { | |
155 if (facetType == null) { | |
156 return false; | |
157 } | |
158 return FacetTypes.IS.AREA(facetType); | |
159 } | |
160 } |