org.pentaho.plugin.jfreereport.reportcharts.BarChartExpression.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.plugin.jfreereport.reportcharts.BarChartExpression.java

Source

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2017 Hitachi Vantara..  All rights reserved.
*/

package org.pentaho.plugin.jfreereport.reportcharts;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.chart.renderer.category.StackedBarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.pentaho.plugin.jfreereport.reportcharts.backport.FormattedCategoryAxis;
import org.pentaho.plugin.jfreereport.reportcharts.backport.FormattedCategoryAxis3D;

import java.awt.*;

/**
 * This class is for backward compatibility with previous build of the expression. Instead of using this class, use
 * CategoricalChartExpression.
 *
 * @author mbatchel
 */
public class BarChartExpression extends StackedCategoricalChartExpression {
    private static final long serialVersionUID = 7082583397390897215L;
    private Double maxBarWidth;
    private boolean stackedBarRenderPercentages;
    private Double itemMargin;
    private boolean shadowVisible;
    private Color shadowColor;
    private int shadowXOffset;
    private int shadowYOffset;

    public BarChartExpression() {
    }

    public Double getItemMargin() {
        return itemMargin;
    }

    public void setItemMargin(final Double itemMargin) {
        this.itemMargin = itemMargin;
    }

    public Double getMaxBarWidth() {
        return maxBarWidth;
    }

    public void setMaxBarWidth(final Double value) {
        maxBarWidth = value;
    }

    public boolean isStackedBarRenderPercentages() {
        return stackedBarRenderPercentages;
    }

    public void setStackedBarRenderPercentages(final boolean value) {
        stackedBarRenderPercentages = value;
    }

    public JFreeChart computeCategoryChart(final CategoryDataset categoryDataset) {
        final PlotOrientation orientation = computePlotOrientation();

        final JFreeChart chart;
        if (isThreeD()) {
            if (isStacked()) {
                chart = ChartFactory.createStackedBarChart3D(computeTitle(), getCategoryAxisLabel(),
                        getValueAxisLabel(), categoryDataset, orientation, isShowLegend(), false, false);
            } else {
                chart = ChartFactory.createBarChart3D(computeTitle(), getCategoryAxisLabel(), getValueAxisLabel(),
                        categoryDataset, orientation, isShowLegend(), false, false);
            }
            chart.getCategoryPlot().setDomainAxis(new FormattedCategoryAxis3D(getCategoryAxisLabel(),
                    getCategoricalAxisMessageFormat(), getRuntime().getResourceBundleFactory().getLocale()));
        } else {
            if (isStacked()) {
                chart = ChartFactory.createStackedBarChart(computeTitle(), getCategoryAxisLabel(),
                        getValueAxisLabel(), categoryDataset, orientation, isShowLegend(), false, false);
            } else {
                chart = ChartFactory.createBarChart(computeTitle(), getCategoryAxisLabel(), getValueAxisLabel(),
                        categoryDataset, orientation, isShowLegend(), false, false);
            }
            chart.getCategoryPlot().setDomainAxis(new FormattedCategoryAxis(getCategoryAxisLabel(),
                    getCategoricalAxisMessageFormat(), getRuntime().getResourceBundleFactory().getLocale()));
        }

        final CategoryPlot plot = (CategoryPlot) chart.getPlot();
        configureLogarithmicAxis(plot);

        return chart;
    }

    protected void configureChart(final JFreeChart chart) {
        final CategoryPlot cpl = chart.getCategoryPlot();
        final CategoryItemRenderer renderer = cpl.getRenderer();
        final BarRenderer br = (BarRenderer) renderer;
        if (isAutoRange()) {
            br.setIncludeBaseInRange(false);
        }
        super.configureChart(chart);
        br.setDrawBarOutline(isChartSectionOutline());
        if (maxBarWidth != null) {
            br.setMaximumBarWidth(maxBarWidth.doubleValue());
        }

        if (itemMargin != null) {
            br.setItemMargin(itemMargin.doubleValue());
        }

        if ((isStacked()) && stackedBarRenderPercentages && (br instanceof StackedBarRenderer)) {
            final StackedBarRenderer sbr = (StackedBarRenderer) br;
            sbr.setRenderAsPercentages(true);
        }

        br.setShadowVisible(shadowVisible);
        if (shadowColor != null) {
            br.setShadowPaint(shadowColor);
        }
        br.setShadowXOffset(shadowXOffset);
        br.setShadowYOffset(shadowYOffset);
    }

    public boolean isShadowVisible() {
        return shadowVisible;
    }

    public void setShadowVisible(final boolean shadowVisible) {
        this.shadowVisible = shadowVisible;
    }

    public Color getShadowColor() {
        return shadowColor;
    }

    public void setShadowColor(final Color shadowColor) {
        this.shadowColor = shadowColor;
    }

    public int getShadowXOffset() {
        return shadowXOffset;
    }

    public void setShadowXOffset(final int shadowXOffset) {
        this.shadowXOffset = shadowXOffset;
    }

    public int getShadowYOffset() {
        return shadowYOffset;
    }

    public void setShadowYOffset(final int shadowYOffset) {
        this.shadowYOffset = shadowYOffset;
    }

    /**
     * @return
     * @deprecated Use the property chartSectionOutline instead.
     */
    public boolean isDrawBarOutline() {
        return isChartSectionOutline();
    }

    /**
     * @param value
     * @deprecated Use the property chartSectionOutline instead.
     */
    public void setDrawBarOutline(final boolean value) {
        setChartSectionOutline(value);
    }
}