Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/TimeseriesChartGenerator.java @ 4044:7eebd9e58641
Add chart legend entries for interpolated series (#838).
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 05 Oct 2012 23:21:18 +0200 |
parents | 7cc05da7e35c |
children |
comparison
equal
deleted
inserted
replaced
4043:eb5564662e19 | 4044:7eebd9e58641 |
---|---|
14 import java.text.DateFormat; | 14 import java.text.DateFormat; |
15 import java.text.ParseException; | 15 import java.text.ParseException; |
16 import java.util.ArrayList; | 16 import java.util.ArrayList; |
17 import java.util.Date; | 17 import java.util.Date; |
18 import java.util.HashMap; | 18 import java.util.HashMap; |
19 import java.util.Iterator; | |
19 import java.util.List; | 20 import java.util.List; |
20 import java.util.Map; | 21 import java.util.Map; |
21 | 22 |
22 import javax.swing.ImageIcon; | 23 import javax.swing.ImageIcon; |
23 | 24 |
24 import org.apache.log4j.Logger; | 25 import org.apache.log4j.Logger; |
25 import org.jfree.chart.ChartFactory; | 26 import org.jfree.chart.ChartFactory; |
26 import org.jfree.chart.JFreeChart; | 27 import org.jfree.chart.JFreeChart; |
28 import org.jfree.chart.LegendItem; | |
29 import org.jfree.chart.LegendItemCollection; | |
27 import org.jfree.chart.annotations.XYAnnotation; | 30 import org.jfree.chart.annotations.XYAnnotation; |
28 import org.jfree.chart.annotations.XYImageAnnotation; | 31 import org.jfree.chart.annotations.XYImageAnnotation; |
29 import org.jfree.chart.annotations.XYTextAnnotation; | 32 import org.jfree.chart.annotations.XYTextAnnotation; |
30 import org.jfree.chart.axis.ValueAxis; | 33 import org.jfree.chart.axis.ValueAxis; |
31 import org.jfree.chart.plot.Marker; | 34 import org.jfree.chart.plot.Marker; |
756 | 759 |
757 public void addAttribute(String seriesKey, String name) { | 760 public void addAttribute(String seriesKey, String name) { |
758 attributes.put(seriesKey, name); | 761 attributes.put(seriesKey, name); |
759 } | 762 } |
760 | 763 |
764 private LegendItem getLegendItemFor(XYPlot plot, String interSeriesKey) { | |
765 LegendItemCollection litems = plot.getLegendItems(); | |
766 Iterator<LegendItem> iter = litems.iterator(); | |
767 while(iter.hasNext()) { | |
768 LegendItem item = iter.next(); | |
769 if(interSeriesKey.startsWith(item.getSeriesKey().toString())) { | |
770 return item; | |
771 } | |
772 } | |
773 return null; | |
774 } | |
775 | |
761 protected void applySeriesAttributes(XYPlot plot) { | 776 protected void applySeriesAttributes(XYPlot plot) { |
762 int count = plot.getDatasetCount(); | 777 int count = plot.getDatasetCount(); |
763 for (int i = 0; i < count; i++) { | 778 for (int i = 0; i < count; i++) { |
764 XYDataset data = plot.getDataset(i); | 779 XYDataset data = plot.getDataset(i); |
765 if (data == null) { | 780 if (data == null) { |
766 continue; | 781 continue; |
767 } | 782 } |
783 | |
768 int seriesCount = data.getSeriesCount(); | 784 int seriesCount = data.getSeriesCount(); |
769 for (int j = 0; j < seriesCount; j++) { | 785 for (int j = 0; j < seriesCount; j++) { |
770 StyledTimeSeries series = | 786 StyledTimeSeries series = |
771 (StyledTimeSeries)getSeriesOf(data, j); | 787 (StyledTimeSeries)getSeriesOf(data, j); |
772 String key = series.getKey().toString(); | 788 String key = series.getKey().toString(); |
789 | |
773 if (attributes.containsKey(key)) { | 790 if (attributes.containsKey(key)) { |
774 // Interpolated points are drawn unfilled | 791 // Interpolated points are drawn unfilled |
775 if (attributes.get(key).equals("interpolate")) { | 792 if (attributes.get(key).equals("interpolate")) { |
776 XYLineAndShapeRenderer renderer = | 793 XYLineAndShapeRenderer renderer = |
777 series.getStyle().getRenderer(); | 794 series.getStyle().getRenderer(); |
778 renderer.setSeriesPaint( | 795 renderer.setSeriesPaint( |
779 j, | 796 j, |
780 renderer.getSeriesFillPaint(j)); | 797 renderer.getSeriesFillPaint(j)); |
781 renderer.setSeriesShapesFilled(j, false); | 798 renderer.setSeriesShapesFilled(j, false); |
799 | |
800 LegendItem legendItem = getLegendItemFor(plot, key); | |
801 if(legendItem != null) { | |
802 LegendItem interLegend = new LegendItem( | |
803 legendItem.getLabel(), | |
804 legendItem.getDescription(), | |
805 legendItem.getToolTipText(), | |
806 legendItem.getURLText(), | |
807 legendItem.isShapeVisible(), | |
808 legendItem.getShape(), | |
809 false, // shapeFilled? | |
810 legendItem.getFillPaint(), | |
811 true, // shapeOutlineVisible? | |
812 renderer.getSeriesFillPaint(j), | |
813 legendItem.getOutlineStroke(), | |
814 legendItem.isLineVisible(), | |
815 legendItem.getLine(), | |
816 legendItem.getLineStroke(), | |
817 legendItem.getLinePaint() | |
818 ); | |
819 interLegend.setSeriesKey(series.getKey()); | |
820 logger.debug("applySeriesAttributes: draw unfilled legend item"); | |
821 plot.getLegendItems().add(interLegend); | |
822 } | |
782 } | 823 } |
783 } | 824 } |
825 | |
784 if (attributes.containsKey(key)) { | 826 if (attributes.containsKey(key)) { |
785 if(attributes.get(key).equals("outline")) { | 827 if(attributes.get(key).equals("outline")) { |
786 XYLineAndShapeRenderer renderer = | 828 XYLineAndShapeRenderer renderer = |
787 series.getStyle().getRenderer(); | 829 series.getStyle().getRenderer(); |
788 renderer.setSeriesPaint( | 830 renderer.setSeriesPaint( |