Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.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 |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.jfree; import java.awt.Color; import java.util.ArrayList; import java.util.List; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.exports.LegendAggregator; import org.dive4elements.river.java2d.ShapeUtils; import org.dive4elements.river.themes.ThemeDocument; import org.jfree.chart.LegendItem; import org.jfree.chart.plot.XYPlot; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /** * @author Domenico Nardi Tironi */ public class StripedAreaDataset extends XYSeriesCollection implements StyledXYDataset { public static final class Stripe { private final String label; private final Color color; private final double lower; private final double upper; public Stripe(final String label, final Color color, final double lower, final double upper) { this.label = label; this.color = color; this.lower = lower; this.upper = upper; } public String getLabel() { return this.label; } public Color getColor() { return this.color; } public double getLower() { return this.lower; } public double getUpper() { return this.upper; } } private static final long serialVersionUID = 1L; private final List<Stripe> stripes = new ArrayList<>(); /** * A 'type' that allows to categorize themes by it. Tyically this is simply the facet-name of the originating * {@link Facet}. */ private final String themeType; private final ThemeDocument theme; public StripedAreaDataset(final String themeType, final ThemeDocument theme) { this.themeType = themeType; this.theme = theme; } public void addStripe(final Stripe stripe) { this.stripes.add(stripe); final XYSeries stripeSeries = new XYSeries(stripe.getLabel()); // REMARK: we need at least one item, so the renderer method is called stripeSeries.add(Double.NaN, Double.NaN); super.addSeries(stripeSeries); } @Override public void addSeries(final XYSeries series) { throw new UnsupportedOperationException(); } Stripe getStripe(final int series) { return this.stripes.get(series); } @Override public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) { final StripedAreaDatasetRenderer renderer = createRenderer(); plot.setRenderer(datasetIndex, renderer); final int seriesCount = getSeriesCount(); for (int i = 0; i < seriesCount; i++) { final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i); if (legendItem != null) legendBuilder.addLegendItem(this.themeType, legendItem); } } private StripedAreaDatasetRenderer createRenderer() { final int transparency = this.theme.parseAreaTransparency(); final StripedAreaDatasetRenderer renderer = new StripedAreaDatasetRenderer(); for (int i = 0; i < this.stripes.size(); i++) { final Color alphaPaint = ShapeUtils.withAlpha(this.stripes.get(i).getColor(), transparency); renderer.setSeriesPaint(i, alphaPaint); } return renderer; } @Override public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) { /* not implemented at the moment */ } }