comparison artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.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 6b2496d71936
comparison
equal deleted inserted replaced
9554:33ce8eba9806 9555:ef5754ba5573
8 8
9 package org.dive4elements.river.jfree; 9 package org.dive4elements.river.jfree;
10 10
11 import java.awt.BasicStroke; 11 import java.awt.BasicStroke;
12 import java.awt.Color; 12 import java.awt.Color;
13 import java.awt.Font;
14 import java.awt.Paint; 13 import java.awt.Paint;
15 import java.awt.Stroke; 14 import java.awt.Stroke;
16 import java.awt.TexturePaint; 15 import java.awt.TexturePaint;
17 import java.awt.geom.Ellipse2D; 16 import java.awt.geom.Ellipse2D;
18 import java.awt.geom.Rectangle2D; 17 import java.awt.geom.Rectangle2D;
19 import java.awt.image.BufferedImage; 18 import java.awt.image.BufferedImage;
20 19
21 import org.apache.log4j.Logger; 20 import org.apache.log4j.Logger;
21 import org.dive4elements.artifactdatabase.state.Facet;
22 import org.dive4elements.artifacts.CallMeta; 22 import org.dive4elements.artifacts.CallMeta;
23 import org.dive4elements.river.artifacts.resources.Resources; 23 import org.dive4elements.river.artifacts.resources.Resources;
24 import org.dive4elements.river.exports.LegendAggregator;
24 import org.dive4elements.river.java2d.ShapeUtils; 25 import org.dive4elements.river.java2d.ShapeUtils;
25 import org.dive4elements.river.themes.ThemeDocument; 26 import org.dive4elements.river.themes.ThemeDocument;
26 import org.dive4elements.river.utils.Formatter; 27 import org.dive4elements.river.utils.Formatter;
27 import org.jfree.chart.LegendItem; 28 import org.jfree.chart.LegendItem;
28 import org.jfree.chart.LegendItemCollection;
29 import org.jfree.chart.plot.XYPlot; 29 import org.jfree.chart.plot.XYPlot;
30 import org.jfree.data.xy.XYSeriesCollection; 30 import org.jfree.data.xy.XYSeriesCollection;
31 31
32 /** 32 /**
33 * One or more dataseries to draw a polygon (either "open up/downwards", or 33 * One or more dataseries to draw a polygon (either "open up/downwards", or
53 53
54 /** Theme-document with attributes about actual visual representation. */ 54 /** Theme-document with attributes about actual visual representation. */
55 private final ThemeDocument theme; 55 private final ThemeDocument theme;
56 56
57 /** 57 /**
58 * A 'type' that allows to categorize themes by it. Tyically this is simply the facet-name of the originating
59 * {@link Facet}.
60 */
61 private final String themeType;
62
63 /**
58 * @param theme 64 * @param theme
59 * the theme-document. 65 * the theme-document.
60 */ 66 * @param string
61 public StyledAreaSeriesCollection(final ThemeDocument theme) { 67 */
68 public StyledAreaSeriesCollection(final String themeType, final ThemeDocument theme) {
69 this.themeType = themeType;
62 this.theme = theme; 70 this.theme = theme;
63 this.mode = FILL_MODE.BETWEEN; 71 this.mode = FILL_MODE.BETWEEN;
72 }
73
74 public String getThemeType() {
75 return this.themeType;
64 } 76 }
65 77
66 /** Gets the Fill mode. */ 78 /** Gets the Fill mode. */
67 private FILL_MODE getMode() { 79 private FILL_MODE getMode() {
68 return this.mode; 80 return this.mode;
72 public void setMode(final FILL_MODE fMode) { 84 public void setMode(final FILL_MODE fMode) {
73 this.mode = fMode; 85 this.mode = fMode;
74 } 86 }
75 87
76 @Override 88 @Override
77 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final int datasetIndex, final Font legendFont) { 89 public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) {
78
79 final LegendItemCollection lic = new LegendItemCollection();
80 final LegendItemCollection anno = plot.getFixedLegendItems();
81 90
82 log.debug("Registering an 'area'renderer at idx: " + datasetIndex); 91 log.debug("Registering an 'area'renderer at idx: " + datasetIndex);
83 92
84 final StableXYDifferenceRenderer dRenderer = new StableXYDifferenceRenderer(); 93 final StableXYDifferenceRenderer dRenderer = new StableXYDifferenceRenderer();
85 94
96 105
97 dRenderer.setAreaLabelTemplate(Resources.getMsg(callMeta, "area.label.template", "Area=%sm2")); 106 dRenderer.setAreaLabelTemplate(Resources.getMsg(callMeta, "area.label.template", "Area=%sm2"));
98 107
99 final LegendItem legendItem = dRenderer.getLegendItem(datasetIndex, 0); 108 final LegendItem legendItem = dRenderer.getLegendItem(datasetIndex, 0);
100 if (legendItem != null) { 109 if (legendItem != null) {
101 legendItem.setLabelFont(legendFont); 110 legendBuilder.addLegendItem(this.themeType, legendItem);
102 lic.add(legendItem); 111 } else {
103 } else { 112 log.warn("Could not get LegengItem for renderer: " + datasetIndex + ", series-idx " + 0);
104 log.warn("Could not get LegentItem for renderer: " + datasetIndex + ", series-idx " + 0); 113 }
105 }
106
107 if (anno != null) {
108 lic.addAll(anno);
109 }
110
111 plot.setFixedLegendItems(lic);
112 } 114 }
113 115
114 /** 116 /**
115 * Returns a transparently textured paint. 117 * Returns a transparently textured paint.
116 * 118 *
272 } 274 }
273 275
274 public boolean shouldCalculateRange() { 276 public boolean shouldCalculateRange() {
275 return this.theme.parseCalculateRange(); 277 return this.theme.parseCalculateRange();
276 } 278 }
279
280 @Override
281 public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) {
282 /* not implemented */
283 }
277 } 284 }
278 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org