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(

http://dive4elements.wald.intevation.org