diff flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java @ 3183:05c84d65988a

Extracted legenditemaggregation from xychartgenerator. flys-artifacts/trunk@4798 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Tue, 26 Jun 2012 12:48:26 +0000
parents f1e09a003f78
children 12440c6b8b66
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java	Tue Jun 26 10:55:39 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java	Tue Jun 26 12:48:26 2012 +0000
@@ -11,9 +11,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.w3c.dom.Document;
@@ -260,6 +258,7 @@
         addAnnotationsToRenderer(plot);
 
         aggregateLegendEntries(plot);
+        // LegendItemAggregator benutzen und so umbauen, dass er eine Liste von LegendItems frisst.
 
         return chart;
     }
@@ -1305,10 +1304,6 @@
      * @param plot The plot for which to modify the legend.
      */
     public void aggregateLegendEntries(XYPlot plot) {
-        LegendItemCollection old = plot.getLegendItems();
-        // Find "similar" entries if aggregation is enabled.
-
-        int maxListSize = 0;
         int AGGR_THRESHOLD = 0;
 
         Integer threshold = getChartSettings().getLegendSection()
@@ -1316,72 +1311,7 @@
 
         AGGR_THRESHOLD = (threshold != null) ? threshold.intValue() : 0;
 
-        if (AGGR_THRESHOLD > old.getItemCount() || AGGR_THRESHOLD <= 0){
-            return;
-        }
-
-        HashMap<String, List<LegendItem>> entries = new LinkedHashMap<String, List<LegendItem>>();
-        for (Iterator i = old.iterator(); i.hasNext();) {
-            LegendItem item = (LegendItem) i.next();
-            String hash = legendItemHash(item);
-            List<LegendItem> itemList = entries.get(hash);
-            if (itemList == null) {
-                itemList = new ArrayList<LegendItem>();
-            }
-            itemList.add(item);
-
-            if (itemList.size() > maxListSize) {
-                maxListSize = itemList.size();
-            }
-
-            entries.put(legendItemHash(item), itemList);
-        }
-
-        if (maxListSize < AGGR_THRESHOLD) {
-            // No need to do anything.
-            return;
-        }
-
-        // Run over collected entries, merge their names and create new
-        // entry if needed.
-        LegendItemCollection newLegend = new LegendItemCollection();
-        for (Map.Entry<String, List<LegendItem>> cursor: entries.entrySet()) {
-            List<LegendItem> itemList = cursor.getValue();
-            if (itemList.size() >= AGGR_THRESHOLD) {
-                // Now do merging.
-                LegendItem item = (LegendItem) itemList.get(0);
-                // Unfortunately we cannot clone and just setDescription, as this
-                // method was added in JFreeChart 1.0.14 (we are at .13).
-
-                // Remove the shapes of all but the first items,
-                // to prevent "overfill" of legenditemblock.
-                for (int i = 0; i < itemList.size(); i++) {
-                    if (i != 0) {
-                        LegendItem litem = itemList.get(i);
-
-                        // Make shape and line really small.
-                        LegendItem merged = new LegendItem(
-                            ", " + litem.getLabel(), litem.getDescription(), litem.getToolTipText(),
-                            litem.getURLText(), false, SPACE,
-                            false, litem.getFillPaint(), false,
-                            litem.getOutlinePaint(), litem.getOutlineStroke(), false,
-                            SPACE, litem.getLineStroke(), litem.getLinePaint());
-                        newLegend.add(merged);
-                    }
-                    else {
-                        newLegend.add(itemList.get(i));
-                    }
-                }
-            }
-            else {
-                // Do not merge entries.
-                for (LegendItem li: itemList) {
-                    newLegend.add(li);
-                }
-            }
-        }
-
-        plot.setFixedLegendItems (newLegend);
+        LegendProcessor.aggregateLegendEntries(plot, AGGR_THRESHOLD);
     }
 
 

http://dive4elements.wald.intevation.org