Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.java @ 9576:c5c53e52f190
area pattern transparency sinfo tkh
author | gernotbelger |
---|---|
date | Wed, 07 Nov 2018 14:23:47 +0100 |
parents | ef5754ba5573 |
children |
rev | line source |
---|---|
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
2 * Software engineering by |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
3 * Björnsen Beratende Ingenieure GmbH |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
5 * |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
6 * This file is Free Software under the GNU AGPL (>=v3) |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
8 * documentation coming with Dive4Elements River for details. |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
9 */ |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
10 package org.dive4elements.river.jfree; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
11 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
12 import java.awt.Color; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
13 import java.util.ArrayList; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
14 import java.util.List; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
15 |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
16 import org.dive4elements.artifactdatabase.state.Facet; |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
17 import org.dive4elements.artifacts.CallMeta; |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
18 import org.dive4elements.river.exports.LegendAggregator; |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
19 import org.dive4elements.river.java2d.ShapeUtils; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
20 import org.dive4elements.river.themes.ThemeDocument; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
21 import org.jfree.chart.LegendItem; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
22 import org.jfree.chart.plot.XYPlot; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
23 import org.jfree.data.xy.XYSeries; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
24 import org.jfree.data.xy.XYSeriesCollection; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
25 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
26 /** |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
27 * @author Domenico Nardi Tironi |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
28 */ |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
29 public class StripedAreaDataset extends XYSeriesCollection implements StyledXYDataset { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
30 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
31 public static final class Stripe { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
32 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
33 private final String label; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
34 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
35 private final Color color; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
36 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
37 private final double lower; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
38 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
39 private final double upper; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
40 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
41 public Stripe(final String label, final Color color, final double lower, final double upper) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
42 this.label = label; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
43 this.color = color; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
44 this.lower = lower; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
45 this.upper = upper; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
46 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
47 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
48 public String getLabel() { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
49 return this.label; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
50 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
51 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
52 public Color getColor() { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
53 return this.color; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
54 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
55 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
56 public double getLower() { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
57 return this.lower; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
58 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
59 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
60 public double getUpper() { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
61 return this.upper; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
62 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
63 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
64 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
65 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
66 private static final long serialVersionUID = 1L; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
67 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
68 private final List<Stripe> stripes = new ArrayList<>(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
69 |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
70 /** |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
71 * A 'type' that allows to categorize themes by it. Tyically this is simply the facet-name of the originating |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
72 * {@link Facet}. |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
73 */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
74 private final String themeType; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
75 |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
76 private final ThemeDocument theme; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
77 |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
78 public StripedAreaDataset(final String themeType, final ThemeDocument theme) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
79 this.themeType = themeType; |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
80 this.theme = theme; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
81 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
82 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
83 public void addStripe(final Stripe stripe) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
84 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
85 this.stripes.add(stripe); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
86 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
87 final XYSeries stripeSeries = new XYSeries(stripe.getLabel()); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
88 // REMARK: we need at least one item, so the renderer method is called |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
89 stripeSeries.add(Double.NaN, Double.NaN); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
90 super.addSeries(stripeSeries); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
91 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
92 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
93 @Override |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
94 public void addSeries(final XYSeries series) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
95 throw new UnsupportedOperationException(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
96 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
97 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
98 Stripe getStripe(final int series) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
99 return this.stripes.get(series); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
100 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
101 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
102 @Override |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
103 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
104 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
105 final StripedAreaDatasetRenderer renderer = createRenderer(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
106 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
107 plot.setRenderer(datasetIndex, renderer); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
108 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
109 final int seriesCount = getSeriesCount(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
110 for (int i = 0; i < seriesCount; i++) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
111 final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i); |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
112 if (legendItem != null) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
113 legendBuilder.addLegendItem(this.themeType, legendItem); |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
114 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
115 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
116 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
117 private StripedAreaDatasetRenderer createRenderer() { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
118 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
119 final int transparency = this.theme.parseAreaTransparency(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
120 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
121 final StripedAreaDatasetRenderer renderer = new StripedAreaDatasetRenderer(); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
122 for (int i = 0; i < this.stripes.size(); i++) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
123 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
124 final Color alphaPaint = ShapeUtils.withAlpha(this.stripes.get(i).getColor(), transparency); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
125 renderer.setSeriesPaint(i, alphaPaint); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
126 } |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
127 |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
128 return renderer; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
129 } |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
130 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
131 @Override |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
132 public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
133 /* not implemented at the moment */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
134 } |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
diff
changeset
|
135 } |