Package org.pentaho.plugin.jfreereport.reportcharts

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

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

package org.pentaho.plugin.jfreereport.reportcharts;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYZDataset;

public class BubbleChartExpression extends XYChartExpression
{
  private static final long serialVersionUID = 7934486966108227105L;

  private double maxBubbleSize;
  private String bubbleLabelContent; //$NON-NLS-1$
  private String xFormat; //$NON-NLS-1$
  private String yFormat; //$NON-NLS-1$
  private String zFormat; //$NON-NLS-1$

  public BubbleChartExpression()
  {
    bubbleLabelContent = "{0}: ({1}, {2}, {3})";
    zFormat = "";
    yFormat = "";
    xFormat = "";
    maxBubbleSize = 0;
  }

  protected JFreeChart computeXYChart(final XYDataset dataset)
  {

    // Make sure we have a proper dataset
    final XYZDataset xyzDataset;
    final double maxZValue;
    if (dataset instanceof ExtendedXYZDataset)
    {
      final ExtendedXYZDataset exyzDataset = (ExtendedXYZDataset) dataset;
      xyzDataset = exyzDataset;
      maxZValue = exyzDataset.getMaxZValue();
    }
    else if (dataset instanceof XYZDataset)
    {
      xyzDataset = (XYZDataset) dataset;
      maxZValue = precomputeMaxZ(xyzDataset);
    }
    else
    {
      xyzDataset = null;
      maxZValue = 0;
    }

    final JFreeChart rtn = ChartFactory.createBubbleChart
        (computeTitle(), getDomainTitle(), getRangeTitle(), xyzDataset,
            computePlotOrientation(), isShowLegend(), false, false);

    final BubbleRenderer renderer = new BubbleRenderer();
    renderer.setMaxSize(getMaxBubbleSize());
    renderer.setMaxZ(maxZValue);
    rtn.getXYPlot().setRenderer(renderer);
    configureLogarithmicAxis(rtn.getXYPlot());
    return rtn;
  }

  private double precomputeMaxZ(final XYZDataset dataset)
  {
    double retval = Double.MIN_VALUE;
    for (int series = 0; series < dataset.getSeriesCount(); series++)
    {
      final int itemcount = dataset.getItemCount(series);
      for (int item = 0; item < itemcount; item++)
      {
        final double value = dataset.getZValue(series, item);
        if (retval < value)
        {
          retval = value;
        }
      }
    }
    return retval;
  }

  protected void configureChart(final JFreeChart chart)
  {
    super.configureChart(chart);
    /*
     * We don't handle these in reports yet ...
     renderer.setToolTipGenerator(new StandardXYZToolTipGenerator(getBubbleLabelContent(),
     new DecimalFormat(getXFormat()),
     new DecimalFormat(getYFormat()),
     new DecimalFormat(getZFormat())));
    
     renderer.setURLGenerator(new StandardBubbleURLGenerator());
     */
  }

  public double getMaxBubbleSize()
  {
    return maxBubbleSize;
  }

  public void setMaxBubbleSize(final double maxBubbleSize)
  {
    this.maxBubbleSize = maxBubbleSize;
  }

  public String getBubbleLabelContent()
  {
    return bubbleLabelContent;
  }

  /**
   * @param bubbleLabelContent Definition of the bubble labels' content. e.g. "{0}: ({1}, {2}, {3})"
   *                           {0} = series name
   *                           {1} = x value
   *                           {2} = y value
   *                           {3} = z value
   */
  public void setBubbleLabelContent(final String bubbleLabelContent)
  {
    this.bubbleLabelContent = bubbleLabelContent;
  }

  public String getXFormat()
  {
    return xFormat;
  }

  /**
   * @param format Definition of the bubble labels' x value number format.
   *               e.g. "#,##0.0#" or "#,##0.00 EUR" or "##0.00 %"
   */
  public void setXFormat(final String format)
  {
    xFormat = format;
  }

  public String getYFormat()
  {
    return yFormat;
  }

  /**
   * @param format Definition of the bubble labels' y value number format.
   *               e.g. "#,##0.0#" or "#,##0.00 EUR" or "##0.00 %"
   */
  public void setYFormat(final String format)
  {
    yFormat = format;
  }

  public String getZFormat()
  {
    return zFormat;
  }

  /**
   * @param format Definition of the bubble labels' z value number format.
   *               e.g. "#,##0.0#" or "#,##0.00 EUR" or "##0.00 %"
   */
  public void setZFormat(final String format)
  {
    zFormat = format;
  }

  /**
   * @return
   * @deprecated Not used anywhere.
   */
  public double getMaxZValue()
  {
    return 0;
  }

}
TOP

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

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.