Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/LegendProcessor.java @ 3785:a5f65e8983be
Merged revisions 5501-5502,5504-5508,5511-5513,5516-5519 via svnmerge from
file:///home/clients/bsh/bsh-generischer-viewer/Material/SVN/flys-artifacts/trunk
........
r5501 | felix | 2012-09-18 11:49:45 +0200 (Di, 18 Sep 2012) | 1 line
fix issue865 - missing showarea theme prop.
........
r5502 | clins | 2012-09-18 12:18:30 +0200 (Di, 18 Sep 2012) | 1 line
Add robustness checks to prevent NPEs
........
r5504 | felix | 2012-09-18 14:03:15 +0200 (Di, 18 Sep 2012) | 1 line
i18n for area label (fix issue487).
........
r5505 | clins | 2012-09-18 16:19:59 +0200 (Di, 18 Sep 2012) | 1 line
Update themes to show point descriptions
........
r5506 | rrenkert | 2012-09-18 17:00:30 +0200 (Di, 18 Sep 2012) | 3 lines
Removed incorrect characteristic diameter.
........
r5507 | rrenkert | 2012-09-18 17:03:20 +0200 (Di, 18 Sep 2012) | 3 lines
Fixed some stupid bugs in bed quality data factory and calculation.
........
r5508 | teichmann | 2012-09-18 17:45:49 +0200 (Di, 18 Sep 2012) | 1 line
The usual whitespace and import cleanups.
........
r5511 | teichmann | 2012-09-18 18:24:51 +0200 (Di, 18 Sep 2012) | 1 line
Use generics aware Collections.emptyList().
........
r5512 | teichmann | 2012-09-18 20:36:52 +0200 (Di, 18 Sep 2012) | 1 line
Some more little steps towards "Auslagerung extremer Wasserspiegellagen".
........
r5513 | clins | 2012-09-18 23:38:19 +0200 (Di, 18 Sep 2012) | 1 line
A and B facets of fix analyis are now deactivated by default
........
r5516 | bricks | 2012-09-19 10:45:51 +0200 (Mi, 19 Sep 2012) | 2 lines
Add the gauge station to the GaugeOverviewInfoService xml response
........
r5517 | rrenkert | 2012-09-19 10:50:23 +0200 (Mi, 19 Sep 2012) | 3 lines
Added CSV export to bed quality calculation.
........
r5518 | bricks | 2012-09-19 11:04:04 +0200 (Mi, 19 Sep 2012) | 2 lines
Fix date in changelog entry
........
r5519 | teichmann | 2012-09-19 11:17:14 +0200 (Mi, 19 Sep 2012) | 1 line
Removed trailing whitespace.
........
flys-artifacts/tags/2.9.1@5531 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 19 Sep 2012 14:58:31 +0000 |
parents | 075f1ba25758 |
children | 7cc05da7e35c |
line wrap: on
line source
package de.intevation.flys.exports; import java.awt.geom.Line2D; 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.jfree.chart.JFreeChart; import org.jfree.chart.LegendItem; import org.jfree.chart.LegendItemCollection; import org.jfree.chart.plot.XYPlot; /** Class to process Plots legends. */ public abstract class LegendProcessor { /** (Empty) shape for aggregated Legend Items. */ private static final Line2D.Double SPACE = new Line2D.Double(0,0,0,0); /** Prevent instantiations. */ private LegendProcessor() { } /** * Create a hash from a legenditem. * This hash can then be used to merge legend items labels. * @return hash for given legenditem to identify mergeables. */ protected static String legendItemHash(LegendItem li) { // TODO Do proper implementation. Ensure that only mergable sets are created. // getFillPaint() // getFillPaintTransformer() // getLabel() // getLine() // getLinePaint() // getLineStroke() // getOutminePaint() // getOutlineStroke() // Shape getShape() // String getToolTipText() // String getURLText() // boolean isLineVisible() // boolean isShapeFilled() // boolean isShapeOutlineVisible() // boolean isShapeVisible() String hash = li.getLinePaint().toString(); String label = li.getLabel(); /*if (label.startsWith("W (") || label.startsWith("W(")) { hash += "-W-"; } else if (label.startsWith("Q(") || label.startsWith("Q (")) { hash += "-Q-"; }*/ // WQ.java holds example of using regex Matcher/Pattern. return hash; } /** * Create new legend entries, dependent on settings. * @param plot The plot for which to modify the legend. * @param threshold How many items are needed for aggregation to * be triggered? */ public static void aggregateLegendEntries(XYPlot plot, int threshold) { LegendItemCollection old = plot.getLegendItems(); // Find "similar" entries if aggregation is enabled. int maxListSize = 0; int AGGR_THRESHOLD = threshold; 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); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :