Package org.pentaho.plugin.jfreereport.reportcharts

Source Code of org.pentaho.plugin.jfreereport.reportcharts.MultiPieChartExpression

/*
* 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) 2006 - 2009 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.plugin.jfreereport.reportcharts;

import java.awt.Font;
import java.awt.Color;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.MultiplePiePlot;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.util.TableOrder;
import org.pentaho.reporting.libraries.base.util.StringUtils;

public class MultiPieChartExpression extends AbstractChartExpression
{
  private static final long serialVersionUID = -7796999107015376070L;
  private boolean multipieByRow;
  private String multipieLabelFormat;
  private Color shadowPaint;
  private Double shadowXOffset;
  private Double shadowYOffset;
  private Font pieTitleFont;
  private String pieNoDataMessage;
 
  public MultiPieChartExpression()
  {
    multipieLabelFormat = "{2}";
    multipieByRow = true;
  }

  public String getPieNoDataMessage()
  {
    return pieNoDataMessage;
  }

  public void setPieNoDataMessage(final String pieNoDataMessage)
  {
    this.pieNoDataMessage = pieNoDataMessage;
  }

  public Font getPieTitleFont()
  {
    return pieTitleFont;
  }

  public void setPieTitleFont(final Font pieTitleFont)
  {
    this.pieTitleFont = pieTitleFont;
  }

  public String getMultipieLabelFormat()
  {
    return multipieLabelFormat;
  }

  public void setMultipieLabelFormat(final String value)
  {
    multipieLabelFormat = value;
  }

  public boolean isMultipieByRow()
  {
    return multipieByRow;
  }

  public void setMultipieByRow(final boolean value)
  {
    multipieByRow = value;
  }

  public Color getShadowPaint()
  {
    return shadowPaint;
  }

  public void setShadowPaint(final Color shadowPaint)
  {
    this.shadowPaint = shadowPaint;
  }

  public Double getShadowXOffset()
  {
    return shadowXOffset;
  }

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

  public Double getShadowYOffset()
  {
    return shadowYOffset;
  }

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

  protected JFreeChart computeChart(final Dataset dataset)
  {
    final CategoryDataset categoryDataset;
    if (dataset instanceof CategoryDataset == false)
    {
      categoryDataset = null;
    }
    else
    {
      categoryDataset = (CategoryDataset) dataset;
    }

    final TableOrder order;
    if (isMultipieByRow())
    {
      order = TableOrder.BY_ROW;
    }
    else
    {
      order = TableOrder.BY_COLUMN;
    }

    if (isThreeD())
    {
      return ChartFactory.createMultiplePieChart3D(computeTitle(), categoryDataset, order, isShowLegend(), false, false);
    }
    else
    {
      return ChartFactory.createMultiplePieChart(computeTitle(), categoryDataset, order, isShowLegend(), false, false);
    }
  }

  protected void configureSubChart(final JFreeChart chart)
  {
    final TextTitle chartTitle = chart.getTitle();
    if (chartTitle != null)
    {
      if (getPieTitleFont() != null)
      {
        chartTitle.setFont(getPieTitleFont());
      }
      else
      {
        final Font titleFont = Font.decode(getTitleFont());
        chartTitle.setFont(titleFont);
      }
    }

    if (isAntiAlias() == false)
    {
      chart.setAntiAlias(false);
    }

    final LegendTitle chLegend = chart.getLegend();
    if (chLegend != null)
    {
      final RectangleEdge loc = translateEdge(getLegendLocation().toLowerCase());
      if (loc != null)
      {
        chLegend.setPosition(loc);
      }
      if (getLegendFont() != null)
      {
        chLegend.setItemFont(Font.decode(getLegendFont()));
      }
      if (!isDrawLegendBorder())
      {
        chLegend.setBorder(BlockBorder.NONE);
      }
      if (getLegendBackgroundColor() != null)
      {
        chLegend.setBackgroundPaint(getLegendBackgroundColor());
      }
      if (getLegendTextColor() != null)
      {
        chLegend.setItemPaint(getLegendTextColor());
      }
    }

    final Plot plot = chart.getPlot();
    plot.setNoDataMessageFont(Font.decode(getLabelFont()));

    final String pieNoData = getPieNoDataMessage();
    if (pieNoData != null)
    {
      plot.setNoDataMessage(pieNoData);
    }
    else
    {
      final String message = getNoDataMessage();
      if (message != null)
      {
        plot.setNoDataMessage(message);
      }
    }
  }

  protected void configureChart(final JFreeChart chart)
  {
    super.configureChart(chart);

    final Plot plot = chart.getPlot();
    final MultiplePiePlot mpp = (MultiplePiePlot) plot;
    final JFreeChart pc = mpp.getPieChart();
    configureSubChart(pc);

    final PiePlot pp = (PiePlot) pc.getPlot();
    if (StringUtils.isEmpty(getTooltipFormula()) == false)
    {
      pp.setToolTipGenerator(new FormulaPieTooltipGenerator(getRuntime(), getTooltipFormula()));
    }
    if (StringUtils.isEmpty(getUrlFormula()) == false)
    {
      pp.setURLGenerator(new FormulaPieURLGenerator(getRuntime(), getUrlFormula()));
    }

    if (shadowPaint != null)
    {
      pp.setShadowPaint(shadowPaint);
    }
    if (shadowXOffset != null)
    {
      pp.setShadowXOffset(shadowXOffset.doubleValue());
    }
    if (shadowYOffset != null)
    {
      pp.setShadowYOffset(shadowYOffset.doubleValue());
    }

    final CategoryDataset c = mpp.getDataset();
    if (c != null)
    {
      final String[] colors = getSeriesColor();
      final int keysSize = c.getColumnKeys().size();
      for (int i = 0; i < colors.length; i++)
      {
        if (keysSize > i)
        {
          pp.setSectionPaint(c.getColumnKey(i), parseColorFromString(colors[i]));
        }
      }
    }

    if (StringUtils.isEmpty(getLabelFont()) == false)
    {
      pp.setLabelFont(Font.decode(getLabelFont()));
    }

    if (Boolean.FALSE.equals(getItemsLabelVisible()))
    {
      pp.setLabelGenerator(null);
    }
    else
    {
      final StandardPieSectionLabelGenerator labelGen = new StandardPieSectionLabelGenerator(multipieLabelFormat);
      pp.setLabelGenerator(labelGen);
    }
  }
}
TOP

Related Classes of org.pentaho.plugin.jfreereport.reportcharts.MultiPieChartExpression

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.