package org.codehaus.mojo.dashboard.report.plugin.chart;
/*
* Copyright 2006 David Vicente
*
* 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.
*/
import java.awt.Color;
import java.awt.Paint;
import java.text.NumberFormat;
import java.util.Locale;
import org.codehaus.mojo.dashboard.report.plugin.utils.ChartUtils;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.ui.RectangleInsets;
/**
*
* @author <a href="dvicente72@gmail.com">David Vicente</a>
*
*/
public class BarChartRenderer extends AbstractChartRenderer
{
private static final double NUMBER_AXIS_RANGE = 1.0D;
public BarChartRenderer( IChartStrategy strategy )
{
super( strategy );
}
public BarChartRenderer( IChartStrategy strategy, int width, int height )
{
super( strategy, width, height );
}
public void createChart()
{
CategoryDataset categorydataset = (CategoryDataset) this.datasetStrategy.getDataset();
report =
ChartFactory.createBarChart( this.datasetStrategy.getTitle(), this.datasetStrategy.getYAxisLabel(),
this.datasetStrategy.getXAxisLabel(), categorydataset,
PlotOrientation.HORIZONTAL, true, true, false );
// report.setBackgroundPaint( Color.lightGray );
report.setPadding( new RectangleInsets( 5.0d, 5.0d, 5.0d, 5.0d ) );
CategoryPlot categoryplot = (CategoryPlot) report.getPlot();
categoryplot.setBackgroundPaint( Color.white );
categoryplot.setRangeGridlinePaint( Color.lightGray );
categoryplot.setDomainGridlinePaint( Color.lightGray );
categoryplot.setRangeAxisLocation( AxisLocation.BOTTOM_OR_LEFT );
NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
if ( datasetStrategy instanceof CoberturaBarChartStrategy || datasetStrategy instanceof CloverBarChartStrategy
|| datasetStrategy instanceof MultiCloverBarChartStrategy )
{
numberaxis.setRange( 0.0D, BarChartRenderer.NUMBER_AXIS_RANGE );
numberaxis.setNumberFormatOverride( NumberFormat.getPercentInstance() );
}
else
{
numberaxis.setStandardTickUnits( NumberAxis.createIntegerTickUnits() );
}
numberaxis.setLowerMargin( 0.0D );
CategoryAxis axis = categoryplot.getDomainAxis();
axis.setLowerMargin( 0.02 ); // two percent
axis.setCategoryMargin( 0.10 ); // ten percent
axis.setUpperMargin( 0.02 ); // two percent
BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
barrenderer.setItemMargin( 0.10 );
barrenderer.setDrawBarOutline( false );
barrenderer.setBaseItemLabelsVisible( true );
if ( datasetStrategy instanceof CoberturaBarChartStrategy || datasetStrategy instanceof CloverBarChartStrategy
|| datasetStrategy instanceof MultiCloverBarChartStrategy )
{
barrenderer.setBaseItemLabelGenerator( new StandardCategoryItemLabelGenerator(
"{2}",
NumberFormat.getPercentInstance( Locale.getDefault() ) ) );
}
else
{
barrenderer.setBaseItemLabelGenerator( new StandardCategoryItemLabelGenerator() );
}
int height =
( categorydataset.getColumnCount() * ChartUtils.STANDARD_BARCHART_ENTRY_HEIGHT * categorydataset.getRowCount() );
if ( height > ChartUtils.MINIMUM_HEIGHT )
{
super.setHeight( height );
}
else
{
super.setHeight( ChartUtils.MINIMUM_HEIGHT );
}
Paint[] paints = this.datasetStrategy.getPaintColor();
for ( int i = 0; i < categorydataset.getRowCount() && i < paints.length; i++ )
{
barrenderer.setSeriesPaint( i, paints[i] );
}
}
}