/*
* Copyright 2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.jsfcomp.chartcreator.utils;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import net.sf.jsfcomp.chartcreator.model.ChartAxisData;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.XYDataset;
/**
* @author Rogerio Araujo (latest modification by $Author: cagatay_civici $)
* @version $Revision: 745 $ $Date: 2007-05-08 10:16:19 +0300 (Tue, 08 May 2007) $
*/
public class ChartAxisUtils {
//Generic axis creation methods
public static ValueAxis createDateAxis(JFreeChart chart, ChartAxisData chartAxisData)
{
DateAxis dateAxis = new DateAxis(chartAxisData.getLabel());
if(chartAxisData.getFormat() != null)
dateAxis.setDateFormatOverride(new SimpleDateFormat(chartAxisData.getFormat()));
dateAxis.setTickUnit(DateAxis.DEFAULT_DATE_TICK_UNIT);
return dateAxis;
}
public static ValueAxis createNumberAxis(JFreeChart chart, ChartAxisData chartAxisData)
{
NumberAxis numberAxis = new NumberAxis(chartAxisData.getLabel());
if(chartAxisData.getFormat() != null)
numberAxis.setNumberFormatOverride(new DecimalFormat(chartAxisData.getFormat()));
return numberAxis;
}
//XYSeries axis methods
public static void createXYSeriesAxis(JFreeChart chart, ChartAxisData chartAxisData, int axisIndex)
{
ValueAxis axis = null;
if(chartAxisData.getType() != null)
{
if(chartAxisData.getType().equals("number"))
axis = createNumberAxis(chart, chartAxisData);
else if(chartAxisData.getType().equals("date"))
axis = createDateAxis(chart, chartAxisData);
if(chartAxisData.getTickLabelFontSize() > 0)
{
Font tickFont = CategoryAxis.DEFAULT_TICK_LABEL_FONT.deriveFont(chartAxisData.getTickLabelFontSize());
axis.setTickLabelFont(tickFont);
}
axis.setTickLabelsVisible(chartAxisData.isTickLabels());
axis.setTickMarksVisible(chartAxisData.isTickMarks());
axis.setVerticalTickLabels(chartAxisData.isVerticalTickLabels());
}
XYPlot plot = chart.getXYPlot();
if(chartAxisData.isDomain())
{
plot.setDomainAxis(plot.getDomainAxisCount() - 1, axis);
}
else
{
plot.setRangeAxis(axisIndex, axis);
XYDataset dataset = (XYDataset) chartAxisData.getDatasource();
plot.setRenderer(axisIndex, new StandardXYItemRenderer());
plot.setDataset(axisIndex, dataset);
plot.mapDatasetToRangeAxis(axisIndex, axisIndex);
}
setXYSeriesAxisColors(chartAxisData, plot.getRenderer(axisIndex));
}
public static void setXYSeriesAxisColors(ChartAxisData chartAxisData, XYItemRenderer axisRenderer)
{
if(chartAxisData.getColors() != null) {
String[] colors = chartAxisData.getColors().split(",");
for (int i = 0; i < colors.length; i++) {
axisRenderer.setSeriesPaint(i, ChartUtils.getColor(colors[i].trim()));
}
}
}
//CategorySeries axis methods
public static void createCategorySeriesAxis(JFreeChart chart, ChartAxisData chartAxisData, int axisIndex)
{
CategoryPlot plot = chart.getCategoryPlot();
if(chartAxisData.isDomain())
{
CategoryAxis axis = new CategoryAxis(chartAxisData.getLabel());
axis.setTickLabelsVisible(chartAxisData.isTickLabels());
axis.setTickMarksVisible(chartAxisData.isTickMarks());
if(chartAxisData.getTickLabelFontSize() > 0)
{
Font tickFont = CategoryAxis.DEFAULT_TICK_LABEL_FONT.deriveFont(chartAxisData.getTickLabelFontSize());
axis.setTickLabelFont(tickFont);
}
if(chartAxisData.isVerticalTickLabels())
{
axis.setCategoryLabelPositions(
CategoryLabelPositions.UP_90
);
}
plot.setDomainAxis(plot.getDomainAxisCount() - 1, axis);
}
else {
ValueAxis axis = createNumberAxis(chart, chartAxisData);
axis.setTickLabelsVisible(chartAxisData.isTickLabels());
axis.setTickMarksVisible(chartAxisData.isTickMarks());
if(chartAxisData.getTickLabelFontSize() > 0)
{
Font tickFont = CategoryAxis.DEFAULT_TICK_LABEL_FONT.deriveFont(chartAxisData.getTickLabelFontSize());
axis.setTickLabelFont(tickFont);
}
plot.setRangeAxis(axis);
}
}
}