# HG changeset patch # User Christian Lins # Date 1349472078 -7200 # Node ID 7eebd9e586418204821eb2caf029a42bf6d2d850 # Parent eb5564662e199dd7b9c4645e1306a445a238935b Add chart legend entries for interpolated series (#838). diff -r eb5564662e19 -r 7eebd9e58641 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Oct 05 15:36:42 2012 +0200 +++ b/flys-artifacts/ChangeLog Fri Oct 05 23:21:18 2012 +0200 @@ -1,3 +1,8 @@ +2012-10-05 Christian Lins + + * src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java: + Add chart legend entries for interpolated series (#838). + 2012-10-05 Felix Wolfsteller * doc/conf/meta-data.xml: Fix typo. diff -r eb5564662e19 -r 7eebd9e58641 flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java Fri Oct 05 15:36:42 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java Fri Oct 05 23:21:18 2012 +0200 @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -24,6 +25,8 @@ import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; +import org.jfree.chart.LegendItem; +import org.jfree.chart.LegendItemCollection; import org.jfree.chart.annotations.XYAnnotation; import org.jfree.chart.annotations.XYImageAnnotation; import org.jfree.chart.annotations.XYTextAnnotation; @@ -758,6 +761,18 @@ attributes.put(seriesKey, name); } + private LegendItem getLegendItemFor(XYPlot plot, String interSeriesKey) { + LegendItemCollection litems = plot.getLegendItems(); + Iterator iter = litems.iterator(); + while(iter.hasNext()) { + LegendItem item = iter.next(); + if(interSeriesKey.startsWith(item.getSeriesKey().toString())) { + return item; + } + } + return null; + } + protected void applySeriesAttributes(XYPlot plot) { int count = plot.getDatasetCount(); for (int i = 0; i < count; i++) { @@ -765,22 +780,49 @@ if (data == null) { continue; } + int seriesCount = data.getSeriesCount(); for (int j = 0; j < seriesCount; j++) { StyledTimeSeries series = (StyledTimeSeries)getSeriesOf(data, j); String key = series.getKey().toString(); + if (attributes.containsKey(key)) { // Interpolated points are drawn unfilled if (attributes.get(key).equals("interpolate")) { XYLineAndShapeRenderer renderer = - series.getStyle().getRenderer(); + series.getStyle().getRenderer(); renderer.setSeriesPaint( j, renderer.getSeriesFillPaint(j)); renderer.setSeriesShapesFilled(j, false); + + LegendItem legendItem = getLegendItemFor(plot, key); + if(legendItem != null) { + LegendItem interLegend = new LegendItem( + legendItem.getLabel(), + legendItem.getDescription(), + legendItem.getToolTipText(), + legendItem.getURLText(), + legendItem.isShapeVisible(), + legendItem.getShape(), + false, // shapeFilled? + legendItem.getFillPaint(), + true, // shapeOutlineVisible? + renderer.getSeriesFillPaint(j), + legendItem.getOutlineStroke(), + legendItem.isLineVisible(), + legendItem.getLine(), + legendItem.getLineStroke(), + legendItem.getLinePaint() + ); + interLegend.setSeriesKey(series.getKey()); + logger.debug("applySeriesAttributes: draw unfilled legend item"); + plot.getLegendItems().add(interLegend); + } } } + if (attributes.containsKey(key)) { if(attributes.get(key).equals("outline")) { XYLineAndShapeRenderer renderer = diff -r eb5564662e19 -r 7eebd9e58641 flys-artifacts/src/main/java/de/intevation/flys/jfree/FLYSAnnotation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/jfree/FLYSAnnotation.java Fri Oct 05 15:36:42 2012 +0200 +++ b/flys-artifacts/src/main/java/de/intevation/flys/jfree/FLYSAnnotation.java Fri Oct 05 23:21:18 2012 +0200 @@ -1,20 +1,19 @@ package de.intevation.flys.jfree; +import de.intevation.flys.artifacts.model.HYKFactory; + import java.util.Collections; import java.util.List; +import org.jfree.chart.annotations.XYTextAnnotation; import org.w3c.dom.Document; -import org.jfree.chart.annotations.XYTextAnnotation; - -import de.intevation.flys.artifacts.model.HYKFactory; - /** * List of Text- Annotations with name and theme. */ public class FLYSAnnotation { - /* 'Other' Text Annotations. */ + /** 'Other' Text Annotations. */ protected List textAnnotations; /** Annotations at axis. */