Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/exports/LegendAggregator.java @ 9638:6c1ebf2220f5
# 19b (check for usages of WaterlevelExporter.getWforGaugeAndQ) -> cleanup: removing calc.extreme.curve
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Thu, 31 Oct 2019 17:37:53 +0100 |
parents | f8308db94634 |
children |
rev | line source |
---|---|
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
2 * Software engineering by |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
3 * Björnsen Beratende Ingenieure GmbH |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
5 * |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
6 * This file is Free Software under the GNU AGPL (>=v3) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
8 * documentation coming with Dive4Elements River for details. |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
9 */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
10 package org.dive4elements.river.exports; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
11 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
12 import java.awt.Font; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
13 import java.awt.Paint; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
14 import java.awt.Shape; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
15 import java.awt.Stroke; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
16 import java.util.AbstractMap.SimpleEntry; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
17 import java.util.ArrayList; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
18 import java.util.HashMap; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
19 import java.util.HashSet; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
20 import java.util.Iterator; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
21 import java.util.List; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
22 import java.util.Map; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
23 import java.util.Map.Entry; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
24 import java.util.Set; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
25 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
26 import org.dive4elements.artifacts.CallContext; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
27 import org.dive4elements.river.artifacts.context.RiverContext; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
28 import org.dive4elements.river.artifacts.resources.Resources; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
29 import org.dive4elements.river.jfree.StyledSeries; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
30 import org.dive4elements.river.jfree.StyledXYDataset; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
31 import org.dive4elements.river.themes.Theme; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
32 import org.dive4elements.river.themes.ThemeDocument; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
33 import org.dive4elements.river.themes.ThemeFactory; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
34 import org.jfree.chart.LegendItem; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
35 import org.jfree.chart.LegendItemCollection; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
36 import org.jfree.chart.plot.XYPlot; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
37 import org.jfree.data.general.Dataset; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
38 import org.jfree.data.xy.XYSeries; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
39 import org.jfree.data.xy.XYSeriesCollection; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
40 import org.w3c.dom.Document; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
41 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
42 /** |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
43 * Builds and adds legend entries to the plot. |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
44 * |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
45 * @author Gernot Belger |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
46 */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
47 public class LegendAggregator { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
48 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
49 private static final String NULL_THEME_TYPE = ""; //$NON-NLS-1$ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
50 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
51 private static final String I10N_MERGED = "legend.aggregator.merged"; //$NON-NLS-1$ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
52 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
53 private final List<Map.Entry<LegendItem, String>> legendItems = new ArrayList<>(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
54 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
55 private final Map<String, List<LegendItem>> itemsPerThemeType = new HashMap<>(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
56 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
57 private final Font labelFont; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
58 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
59 private final int aggregationThreshold; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
60 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
61 public LegendAggregator(final int aggregationThreshold, final Font labelFont) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
62 this.aggregationThreshold = aggregationThreshold; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
63 this.labelFont = labelFont; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
64 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
65 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
66 public void addLegendItem(final String themeType, final LegendItem item) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
67 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
68 item.setLabelFont(this.labelFont); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
69 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
70 this.legendItems.add(new SimpleEntry<>(item, themeType)); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
71 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
72 final List<LegendItem> perThemeType = getItemsPerThemeType(themeType); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
73 perThemeType.add(item); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
74 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
75 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
76 private List<LegendItem> getItemsPerThemeType(final String themeType) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
77 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
78 final String key = themeType == null ? NULL_THEME_TYPE : themeType; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
79 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
80 if (!this.itemsPerThemeType.containsKey(key)) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
81 this.itemsPerThemeType.put(key, new ArrayList<LegendItem>()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
82 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
83 return this.itemsPerThemeType.get(key); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
84 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
85 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
86 /** |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
87 * Apply the gathered items to the plot. Use only once. |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
88 */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
89 public void apply(final CallContext context, final XYPlot plot) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
90 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
91 final LegendItemCollection aggregatedItems = new LegendItemCollection(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
92 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
93 /* marker set for types that are already aggregated */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
94 final Set<String> aggregatedTypes = new HashSet<>(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
95 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
96 for (final Entry<LegendItem, String> entry : this.legendItems) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
97 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
98 final LegendItem item = entry.getKey(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
99 final String themeType = entry.getValue(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
100 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
101 /* ignore already aggregated items */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
102 if (aggregatedTypes.contains(themeType)) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
103 continue; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
104 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
105 /* aggregate known types if count over threshold */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
106 final Theme legendTheme = getLegendTheme(context, themeType); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
107 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
108 if (legendTheme != null && getItemsPerThemeType(themeType).size() > this.aggregationThreshold) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
109 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
110 final String labelDescription = Resources.getMsg(context.getMeta(), legendTheme.getDescription()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
111 final String labelMerged = Resources.getMsg(context.getMeta(), I10N_MERGED); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
112 final String label = String.format("%s (%s)", labelDescription, labelMerged); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
113 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
114 final List<LegendItem> items = findDistinctItems(getItemsPerThemeType(themeType)); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
115 /* add items for each distinct shape, only the last one gets the label */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
116 for (final Iterator<LegendItem> iterator = items.iterator(); iterator.hasNext();) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
117 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
118 final LegendItem legendItem = iterator.next(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
119 final String itemLabel = iterator.hasNext() ? "," : label; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
120 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
121 /* create and add aggregated item(s) */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
122 final LegendItem aggregatedItem = createAggregatedItem(legendItem, legendTheme, itemLabel); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
123 aggregatedItems.add(aggregatedItem); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
124 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
125 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
126 /* mark as handles */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
127 aggregatedTypes.add(themeType); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
128 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
129 } else { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
130 /* simply add normal items */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
131 aggregatedItems.add(item); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
132 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
133 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
134 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
135 plot.setFixedLegendItems(aggregatedItems); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
136 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
137 this.itemsPerThemeType.clear(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
138 this.legendItems.clear(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
139 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
140 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
141 /** |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
142 * Extract distinct items, curently only those that are different regarding their shape |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
143 */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
144 private List<LegendItem> findDistinctItems(final List<LegendItem> items) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
145 |
9612 | 146 final Map<Shape, LegendItem> shapeMap = new HashMap<>(); |
9555
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
147 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
148 for (final LegendItem item : items) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
149 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
150 final Shape shape = item.isShapeVisible() ? item.getShape() : null; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
151 if (!shapeMap.containsKey(shape)) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
152 shapeMap.put(shape, item); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
153 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
154 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
155 return new ArrayList<>(shapeMap.values()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
156 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
157 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
158 private LegendItem createAggregatedItem(final LegendItem item, final Theme legendTheme, final String label) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
159 /* clone properties from current item */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
160 final String description = item.getDescription(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
161 final String tooltipText = item.getToolTipText(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
162 final String urlText = item.getURLText(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
163 final boolean shapeVisible = item.isShapeVisible(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
164 final Shape shape = item.getShape(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
165 final boolean shapeFilled = item.isShapeFilled(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
166 final Paint fillPaint = item.getFillPaint(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
167 final boolean shapeOutlineVisible = item.isShapeOutlineVisible(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
168 final Paint outlinePaint = item.getOutlinePaint(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
169 final Stroke outlineStroke = item.getOutlineStroke(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
170 final boolean lineVisible = item.isLineVisible(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
171 final Shape line = item.getLine(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
172 final Stroke lineStroke = item.getLineStroke(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
173 final Paint linePaint = item.getLinePaint(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
174 final LegendItem aggregatedItem = new LegendItem(label, description, tooltipText, urlText, shapeVisible, shape, shapeFilled, fillPaint, |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
175 shapeOutlineVisible, outlinePaint, outlineStroke, lineVisible, line, lineStroke, linePaint); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
176 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
177 aggregatedItem.setDataset(item.getDataset()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
178 aggregatedItem.setDatasetIndex(item.getDatasetIndex()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
179 aggregatedItem.setFillPaintTransformer(item.getFillPaintTransformer()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
180 aggregatedItem.setLabelFont(item.getLabelFont()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
181 aggregatedItem.setLabelPaint(item.getLabelPaint()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
182 aggregatedItem.setSeriesIndex(item.getSeriesIndex()); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
183 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
184 /* let styled dataset apply specific theme configuration */ |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
185 applyThemeToLegend(aggregatedItem, legendTheme); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
186 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
187 return aggregatedItem; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
188 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
189 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
190 private void applyThemeToLegend(final LegendItem item, final Theme legendTheme) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
191 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
192 final Dataset dataset = item.getDataset(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
193 if (dataset == null) |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
194 return; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
195 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
196 final Document xml = legendTheme.toXML(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
197 final ThemeDocument themeDocument = new ThemeDocument(xml); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
198 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
199 if (dataset instanceof StyledXYDataset) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
200 final StyledXYDataset styledDataset = (StyledXYDataset) dataset; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
201 styledDataset.applyAggregatedLegendTheme(item, themeDocument); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
202 return; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
203 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
204 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
205 if (dataset instanceof XYSeriesCollection) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
206 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
207 final int seriesIndex = item.getSeriesIndex(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
208 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
209 final XYSeriesCollection seriesCollection = (XYSeriesCollection) dataset; |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
210 if (seriesIndex >= 0 && seriesIndex < seriesCollection.getSeriesCount()) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
211 final XYSeries series = seriesCollection.getSeries(seriesIndex); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
212 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
213 if (series instanceof StyledSeries) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
214 ((StyledSeries) series).applyAggregatedLegendTheme(item, themeDocument); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
215 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
216 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
217 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
218 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
219 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
220 private Theme getLegendTheme(final CallContext context, final String themeType) { |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
221 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
222 final RiverContext flysContext = context instanceof RiverContext ? (RiverContext) context : (RiverContext) context.globalContext(); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
223 |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
224 return ThemeFactory.getLegendTheme(flysContext, themeType); |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
225 } |
ef5754ba5573
Implemented legend aggregation based on type of themes.
gernotbelger
parents:
diff
changeset
|
226 } |