diff 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 diff
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.java	Mon Oct 22 18:26:05 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StripedAreaDataset.java	Tue Oct 23 16:26:48 2018 +0200
@@ -10,15 +10,15 @@
 package org.dive4elements.river.jfree;
 
 import java.awt.Color;
-import java.awt.Font;
 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.LegendItemCollection;
 import org.jfree.chart.plot.XYPlot;
 import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
@@ -67,9 +67,16 @@
 
     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 ThemeDocument theme) {
+    public StripedAreaDataset(final String themeType, final ThemeDocument theme) {
+        this.themeType = themeType;
         this.theme = theme;
     }
 
@@ -93,28 +100,18 @@
     }
 
     @Override
-    public void applyTheme(final CallMeta callMeta, final XYPlot plot, final int datasetIndex, final Font legendFont) {
+    public void applyTheme(final CallMeta callMeta, final XYPlot plot, final LegendAggregator legendBuilder, final int datasetIndex) {
 
         final StripedAreaDatasetRenderer renderer = createRenderer();
 
         plot.setRenderer(datasetIndex, renderer);
 
-        final LegendItemCollection newItems = new LegendItemCollection();
-        final LegendItemCollection oldItems = plot.getFixedLegendItems();
-
         final int seriesCount = getSeriesCount();
         for (int i = 0; i < seriesCount; i++) {
             final LegendItem legendItem = renderer.getLegendItem(datasetIndex, i);
-            if (legendItem != null) {
-                legendItem.setLabelFont(legendFont);
-                newItems.add(legendItem);
-            }
+            if (legendItem != null)
+                legendBuilder.addLegendItem(this.themeType, legendItem);
         }
-
-        if (oldItems != null)
-            newItems.addAll(oldItems);
-
-        plot.setFixedLegendItems(newItems);
     }
 
     private StripedAreaDatasetRenderer createRenderer() {
@@ -130,4 +127,9 @@
 
         return renderer;
     }
+
+    @Override
+    public void applyAggregatedLegendTheme(final LegendItem item, final ThemeDocument legendTheme) {
+        /* not implemented at the moment */
+    }
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org