annotate artifacts/src/main/java/org/dive4elements/river/exports/LegendAggregator.java @ 9612:f8308db94634

#20 UI, Diagramme
author dnt_bjoernsen <d.tironi@bjoernsen.de>
date Wed, 09 Oct 2019 16:17:16 +0200
parents ef5754ba5573
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
f8308db94634 #20 UI, Diagramme
dnt_bjoernsen <d.tironi@bjoernsen.de>
parents: 9555
diff changeset
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 }

http://dive4elements.wald.intevation.org