Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/jfree/AxisDataset.java @ 9555:ef5754ba5573
Implemented legend aggregation based on type of themes.
Added theme-editor style configuration for aggregated legend entries.
Only configured themes get aggregated.
author | gernotbelger |
---|---|
date | Tue, 23 Oct 2018 16:26:48 +0200 |
parents | d8e753d0fdb9 |
children |
rev | line source |
---|---|
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
1 /* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
2 * Software engineering by Intevation GmbH |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
3 * |
8858 | 4 * This file is Free Software under the GNU AGPL (>=v3) |
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the | |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
7 */ |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
8 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
9 package org.dive4elements.river.jfree; |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
10 |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
11 import java.util.ArrayList; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
12 import java.util.List; |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
13 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
14 import org.jfree.data.Range; |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
15 import org.jfree.data.RangeInfo; |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
16 import org.jfree.data.time.TimeSeriesCollection; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
17 import org.jfree.data.xy.XYDataset; |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
18 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
19 /** |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
20 * Axis datasets. |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
21 */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
22 public class AxisDataset { |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
23 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
24 /** List of assigned datasets (in order). */ |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
25 private final List<XYDataset> datasets = new ArrayList<>(); |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
26 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
27 /** Range to use to include all given datasets. */ |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
28 private Range range; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
29 |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
9496
diff
changeset
|
30 private boolean rangeDirty; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
31 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
32 /** Add a dataset to internal list for this axis. */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
33 public void addDataset(final XYDataset dataset) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
34 this.datasets.add(dataset); |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
35 this.rangeDirty = true; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
36 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
37 |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
38 public void setRange(final Range val) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
39 this.range = val; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
40 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
41 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
42 /** Get Range for the range axis of this dataset. */ |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
43 public Range getRange() { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
44 if (this.range != null && !this.rangeDirty) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
45 return this.range; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
46 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
47 /* Calculate the min / max of all series */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
48 for (final XYDataset dataset : this.datasets) { |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
49 Range newRange = null; |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
50 if (dataset instanceof StyledAreaSeriesCollection) { |
8885
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
51 final StyledAreaSeriesCollection areaSeries = (StyledAreaSeriesCollection) dataset; |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
52 if (areaSeries.shouldCalculateRange()) |
8885
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
53 newRange = areaSeries.getRangeBounds(false); |
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
54 else { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
55 /* |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
56 * For most area themes, we do not include areas in the range calculation because |
8885
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
57 * they are used with very large / small values to draw areas |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
58 * with axis boundaries |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
59 */ |
8885
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
60 continue; |
e5f688820951
Some minor changes on chart: allow area-themes to consider range; allow for axis-margins
gernotbelger
parents:
8858
diff
changeset
|
61 } |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
62 } else if (dataset instanceof RangeInfo) { |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
63 /* The usual case for most series */ |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
64 newRange = ((RangeInfo) dataset).getRangeBounds(false); |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
65 } else if (dataset instanceof TimeSeriesCollection) { |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
66 /* Lalala <3 Jfreechart's class hirarchy */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
67 newRange = ((TimeSeriesCollection) dataset).getRangeBounds(false); |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
68 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
69 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
70 /* Now we only expand as we also only add new data */ |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
71 if (this.range == null) { |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
72 this.range = newRange; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
73 } else { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
74 this.range = Range.combine(this.range, newRange); |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
75 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
76 } |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
77 this.rangeDirty = false; |
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
78 return this.range; |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
79 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
80 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
81 /** Get Array of Datasets. */ |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
82 public XYDataset[] getDatasets() { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
83 return this.datasets.toArray(new XYDataset[this.datasets.size()]); |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
84 } |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
85 |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
86 /** True if no datasets given. */ |
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
87 public boolean isEmpty() { |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
88 return this.datasets.isEmpty(); |
7034
557cb3a3d772
Combine AxisDataset implementations and remove / simplify handling code.
Andre Heinecke <aheinecke@intevation.de>
parents:
diff
changeset
|
89 } |
9496
d8e753d0fdb9
stripedArea introduced for Assessment Scheme/Bewertungsschema
gernotbelger
parents:
8885
diff
changeset
|
90 } |