Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java @ 8858:a805211690f7 3.2.x
Fix license headers.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Thu, 18 Jan 2018 20:52:41 +0100 |
parents | 5e38e2924c07 |
children | 1cc7653ca84f 0a5239a1e46e |
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( |
37 String seriesName, | |
38 Object data, | |
39 String facetType, | |
40 ThemeDocument theme | |
41 ) { | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
42 if (data == null || facetType == null) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
43 return null; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
44 } |
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 XYSeries series = new StyledXYSeries(seriesName, false, theme); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
47 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
48 if (facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_C)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
49 WQCKms wqckms = (WQCKms) data; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
50 int size = wqckms.size(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
51 for (int i = 0; i < size; i++) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
52 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
|
53 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
54 } else if (data instanceof WQKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
55 if (FacetTypes.IS.Q(facetType)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
56 StyledSeriesBuilder.addPointsKmQ(series, (WQKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
57 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
58 else { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
59 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
60 } |
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 else if (data instanceof double[][]) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
63 StyledSeriesBuilder.addPoints(series, (double [][]) data, false); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
64 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
65 else if (data instanceof WKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
66 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
67 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
68 else if (data instanceof Lines.LineData) { |
8856 | 69 StyledSeriesBuilder.addPoints( |
70 series, ((Lines.LineData) data).points, false); | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
71 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
72 else { |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
73 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
|
74 + data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
75 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
76 return series; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
77 } |
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 |
7101 | 80 @Override |
81 public void doOut( | |
82 DiagramGenerator generator, | |
83 ArtifactAndFacet bundle, | |
84 ThemeDocument theme, | |
85 boolean visible) { | |
86 CallContext context = generator.getCallContext(); | |
87 String seriesName = bundle.getFacetDescription(); | |
88 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme); | |
89 | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
90 log.debug("Area Processor processing: " + seriesName); |
7101 | 91 |
92 AreaFacet.Data data = (AreaFacet.Data) bundle.getData(context); | |
93 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
94 String lowerFacetName = data.getLowerFacetName(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
95 String upperFacetName = data.getUpperFacetName(); |
7101 | 96 |
8856 | 97 XYSeries up = getSeries( |
98 seriesName, data.getUpperData(), upperFacetName, theme); | |
99 XYSeries down = getSeries( | |
100 seriesName + " ", data.getLowerData(), lowerFacetName, theme); | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
101 |
7101 | 102 |
8856 | 103 // TODO Depending on style, the area (e.g. 20m^2) |
104 // should be added as annotation. | |
7101 | 105 |
106 if (up == null && down != null) { | |
107 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
108 down.setKey(seriesName); | |
109 area.addSeries(down); | |
110 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(down)); | |
111 } | |
112 else if (up != null && down == null) { | |
113 area.setMode(StyledAreaSeriesCollection.FILL_MODE.UNDER); | |
114 area.addSeries(up); | |
115 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(up)); | |
116 } | |
117 else if (up != null && down != null) { | |
118 if (data.doPaintBetween()) { | |
119 area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); | |
120 } | |
121 else { | |
122 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
123 } | |
124 area.addSeries(up); | |
125 area.addSeries(down); | |
126 } | |
127 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
128 String facetNameForAxis = lowerFacetName == null |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
129 ? upperFacetName |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
130 : lowerFacetName; |
7101 | 131 /* Decide axis name based on facet name */ |
132 generator.addAreaSeries(area, | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
133 axisNameForFacet(facetNameForAxis), visible); |
7101 | 134 } |
135 | |
136 /** Look up the axis identifier for a given facet type. */ | |
137 private String axisNameForFacet(String facetName) { | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
138 if (FacetTypes.W_DIFFERENCES.equals(facetName)) { |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
139 return "diffW"; |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
140 } |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
141 if (FacetTypes.IS.W(facetName) || |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
142 FacetTypes.DISCHARGE_LONGITUDINAL_C.equals(facetName)) { |
7101 | 143 return "W"; |
144 } | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
145 if (FacetTypes.IS.Q(facetName)) { |
7101 | 146 return "Q"; |
147 } | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
148 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
|
149 return "W"; |
7101 | 150 } |
151 | |
152 @Override | |
153 public boolean canHandle(String facetType) { | |
154 if (facetType == null) { | |
155 return false; | |
156 } | |
157 return FacetTypes.IS.AREA(facetType); | |
158 } | |
159 } |