1 package de.laures.cewolf.cpp;
5 import org.jfree.chart.JFreeChart;
6 import org.jfree.chart.axis.CategoryAxis;
7 import org.jfree.chart.axis.CategoryLabelPositions;
8 import org.jfree.chart.plot.CategoryPlot;
9 import org.jfree.data.category.CategoryDataset;
11 import de.laures.cewolf.ChartPostProcessor;
14 * A cewolf post-processor for rotating and/or removing the labels on the X-Axis
16 * rotate_at: make the labels vertical
17 * skip_at: print only some of the labels (so they don't overlap)
18 * remove_at: don't print any labels
21 * <chart:chartpostprocessor id="labelRotation">
22 * <chart:param name="rotate_at" value='<%= new Integer(10) %>'/>
23 * <chart:param name="skip_at" value='<%= new Integer(50) %>'/>
24 * <chart:param name="remove_at" value='<%= new Integer(100) %>'/>
25 * </chart:chartpostprocessor>
31 public class RotatedAxisLabels implements ChartPostProcessor {
33 public void processChart(Object chart, Map params) {
34 CategoryPlot plot = (CategoryPlot) ((JFreeChart) chart).getPlot();
36 CategoryAxis axis = plot.getDomainAxis();
38 Number rotateThreshold = (Number) params.get("rotate_at");
39 Number skipThreshold = (Number) params.get("skip_at");
40 Number removeThreshold = (Number) params.get("remove_at");
42 CategoryDataset dataset = plot.getDataset();
43 int iCategoryCount = dataset.getRowCount();
45 if (rotateThreshold != null)
47 if (iCategoryCount >= rotateThreshold.intValue())
49 axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
53 axis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
58 if (skipThreshold != null)
60 //this method does nothing in jfreechart .9.18
61 //axis.setSkipCategoryLabelsToFit(iCategoryCount >= skipThreshold.intValue());
64 if (removeThreshold != null)
66 axis.setTickLabelsVisible(iCategoryCount < removeThreshold.intValue());