Mercurial > dive4elements > river
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); }