Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/process/AreaProcessor.java @ 8472:3f505fba522f
(issue1772) Use 0.001km tolarance instead of 0.1 to find matching km.
There is no sense to use a define here. I will not write
static final double NULLPOINTNULLNULLONE=0.001 if i just want to use that
value and not any other value which may make sense in some other place.
Using hardcoded values can have its merits and makes the code easier to
read.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Tue, 18 Nov 2014 15:24:40 +0100 |
parents | e4606eae8ea5 |
children | 5e38e2924c07 |
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 |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
36 protected XYSeries getSeries(String seriesName, Object data, String facetType, |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
37 ThemeDocument theme) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
38 if (data == null || facetType == null) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
39 return null; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
40 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
41 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
42 XYSeries series = new StyledXYSeries(seriesName, false, theme); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
43 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
44 if (facetType.equals(FacetTypes.DISCHARGE_LONGITUDINAL_C)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
45 WQCKms wqckms = (WQCKms) data; |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
46 int size = wqckms.size(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
47 for (int i = 0; i < size; i++) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
48 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
|
49 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
50 } else if (data instanceof WQKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
51 if (FacetTypes.IS.Q(facetType)) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
52 StyledSeriesBuilder.addPointsKmQ(series, (WQKms) data); |
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 { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
55 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
56 } |
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 if (data instanceof double[][]) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
59 StyledSeriesBuilder.addPoints(series, (double [][]) data, false); |
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 else if (data instanceof WKms) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
62 StyledSeriesBuilder.addPoints(series, (WKms) data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
63 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
64 else if (data instanceof Lines.LineData) { |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
65 StyledSeriesBuilder.addPoints(series, ((Lines.LineData) data).points, false); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
66 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
67 else { |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
68 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
|
69 + data); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
70 } |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
71 return series; |
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 |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
74 |
7101 | 75 @Override |
76 public void doOut( | |
77 DiagramGenerator generator, | |
78 ArtifactAndFacet bundle, | |
79 ThemeDocument theme, | |
80 boolean visible) { | |
81 CallContext context = generator.getCallContext(); | |
82 String seriesName = bundle.getFacetDescription(); | |
83 StyledAreaSeriesCollection area = new StyledAreaSeriesCollection(theme); | |
84 | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
85 log.debug("Area Processor processing: " + seriesName); |
7101 | 86 |
87 AreaFacet.Data data = (AreaFacet.Data) bundle.getData(context); | |
88 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
89 String lowerFacetName = data.getLowerFacetName(); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
90 String upperFacetName = data.getUpperFacetName(); |
7101 | 91 |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
92 XYSeries up = getSeries(seriesName, data.getUpperData(), upperFacetName, theme); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
93 XYSeries down = getSeries(seriesName + " ", data.getLowerData(), lowerFacetName, theme); |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
94 |
7101 | 95 |
96 // TODO Depending on style, the area (e.g. 20m^2) should be added as annotation. | |
97 | |
98 if (up == null && down != null) { | |
99 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
100 down.setKey(seriesName); | |
101 area.addSeries(down); | |
102 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(down)); | |
103 } | |
104 else if (up != null && down == null) { | |
105 area.setMode(StyledAreaSeriesCollection.FILL_MODE.UNDER); | |
106 area.addSeries(up); | |
107 area.addSeries(StyledSeriesBuilder.createGroundAtInfinity(up)); | |
108 } | |
109 else if (up != null && down != null) { | |
110 if (data.doPaintBetween()) { | |
111 area.setMode(StyledAreaSeriesCollection.FILL_MODE.BETWEEN); | |
112 } | |
113 else { | |
114 area.setMode(StyledAreaSeriesCollection.FILL_MODE.ABOVE); | |
115 } | |
116 area.addSeries(up); | |
117 area.addSeries(down); | |
118 } | |
119 | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
120 String facetNameForAxis = lowerFacetName == null |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
121 ? upperFacetName |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
122 : lowerFacetName; |
7101 | 123 /* Decide axis name based on facet name */ |
124 generator.addAreaSeries(area, | |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
125 axisNameForFacet(facetNameForAxis), visible); |
7101 | 126 } |
127 | |
128 /** Look up the axis identifier for a given facet type. */ | |
129 private String axisNameForFacet(String facetName) { | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
130 if (FacetTypes.W_DIFFERENCES.equals(facetName)) { |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
131 return "diffW"; |
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
132 } |
7714
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
133 if (FacetTypes.IS.W(facetName) || |
0ee6aa11649b
(issue1574) Add area handling for correction curves
Andre Heinecke <aheinecke@intevation.de>
parents:
7713
diff
changeset
|
134 FacetTypes.DISCHARGE_LONGITUDINAL_C.equals(facetName)) { |
7101 | 135 return "W"; |
136 } | |
7713
dfe3f78fd3e5
(issue1622) Paint W Differences on diffW Axis
Andre Heinecke <aheinecke@intevation.de>
parents:
7540
diff
changeset
|
137 if (FacetTypes.IS.Q(facetName)) { |
7101 | 138 return "Q"; |
139 } | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
7714
diff
changeset
|
140 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
|
141 return "W"; |
7101 | 142 } |
143 | |
144 @Override | |
145 public boolean canHandle(String facetType) { | |
146 if (facetType == null) { | |
147 return false; | |
148 } | |
149 return FacetTypes.IS.AREA(facetType); | |
150 } | |
151 } |