/*!
* 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-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.plugin.jfreereport.reportcharts;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.ThermometerPlot;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.ValueDataset;
import java.awt.*;
@SuppressWarnings( "UnusedDeclaration" )
public class ThermometerChartExpression extends AbstractChartExpression {
private int bulbRadius;
private int columnRadius;
private ThermometerUnit thermometerUnits;
private int criticalRangeHigh;
private int criticalRangeLow;
private int warningRangeHigh;
private int warningRangeLow;
private int normalRangeHigh;
private int normalRangeLow;
private Color mercuryPaint;
private Color thermometerPaint;
private Color warningRangeColor;
private Color criticalRangeColor;
private Color normalRangeColor;
public ThermometerChartExpression() {
this.bulbRadius = ThermometerPlotDefaults.getDefaultBulbRadius();
this.columnRadius = ThermometerPlotDefaults.getDefaultColumnRadius();
this.thermometerUnits = null;
criticalRangeHigh = 100;
criticalRangeLow = 75;
warningRangeHigh = 75;
warningRangeLow = 30;
normalRangeHigh = 30;
normalRangeLow = 0;
}
public Color getWarningRangeColor() {
return warningRangeColor;
}
public void setWarningRangeColor( final Color warningRangeColor ) {
this.warningRangeColor = warningRangeColor;
}
public Color getCriticalRangeColor() {
return criticalRangeColor;
}
public void setCriticalRangeColor( final Color criticalRangeColor ) {
this.criticalRangeColor = criticalRangeColor;
}
public Color getNormalRangeColor() {
return normalRangeColor;
}
public void setNormalRangeColor( final Color normalRangeColor ) {
this.normalRangeColor = normalRangeColor;
}
public int getBulbRadius() {
return this.bulbRadius;
}
public void setBulbRadius( final int bulbRadius ) {
this.bulbRadius = bulbRadius;
}
public int getColumnRadius() {
return this.columnRadius;
}
public void setColumnRadius( final int columnRadius ) {
this.columnRadius = columnRadius;
}
public ThermometerUnit getThermometerUnits() {
return this.thermometerUnits;
}
public void setThermometerUnits( final ThermometerUnit thermometerUnits ) {
this.thermometerUnits = thermometerUnits;
}
public int getCriticalRangeHigh() {
return this.criticalRangeHigh;
}
public void setCriticalRangeHigh( final int criticalRangeHigh ) {
this.criticalRangeHigh = criticalRangeHigh;
}
public int getCriticalRangeLow() {
return this.criticalRangeLow;
}
public void setCriticalRangeLow( final int criticalRangeLow ) {
this.criticalRangeLow = criticalRangeLow;
}
public int getWarningRangeHigh() {
return this.warningRangeHigh;
}
public void setWarningRangeHigh( final int warningRangeHigh ) {
this.warningRangeHigh = warningRangeHigh;
}
public int getWarningRangeLow() {
return this.warningRangeLow;
}
public void setWarningRangeLow( final int warningRangeLow ) {
this.warningRangeLow = warningRangeLow;
}
public int getNormalRangeHigh() {
return this.normalRangeHigh;
}
public void setNormalRangeHigh( final int normalRangeHigh ) {
this.normalRangeHigh = normalRangeHigh;
}
public int getNormalRangeLow() {
return this.normalRangeLow;
}
public void setNormalRangeLow( final int normalRangeLow ) {
this.normalRangeLow = normalRangeLow;
}
public Color getMercuryPaint() {
return mercuryPaint;
}
public void setMercuryPaint( final Color mercuryPaint ) {
this.mercuryPaint = mercuryPaint;
}
public Color getThermometerPaint() {
return thermometerPaint;
}
public void setThermometerPaint( final Color thermometerPaint ) {
this.thermometerPaint = thermometerPaint;
}
protected JFreeChart computeChart( final Dataset dataset ) {
ValueDataset thermometerDataset = null;
if ( dataset instanceof ValueDataset ) {
thermometerDataset = (ValueDataset) dataset;
}
final ThermometerPlot plot = new ThermometerPlot( thermometerDataset );
return new JFreeChart( computeTitle(), JFreeChart.DEFAULT_TITLE_FONT, plot, true );
}
protected void configureChart( final JFreeChart chart ) {
super.configureChart( chart );
final Plot plot = chart.getPlot();
final ThermometerPlot thermometerPlot = (ThermometerPlot) plot;
if ( isShowBorder() == false || isChartSectionOutline() == false ) {
chart.setBorderVisible( false );
thermometerPlot.setOutlineVisible( false );
}
if ( getThermometerUnits() != null ) {
thermometerPlot.setUnits( getThermometerUnits().getUnitConstant() );
}
thermometerPlot
.setLowerBound( Math.min( getCriticalRangeLow(), Math.min( getNormalRangeLow(), getWarningRangeLow() ) ) );
thermometerPlot
.setUpperBound( Math.max( getCriticalRangeHigh(), Math.max( getNormalRangeHigh(), getWarningRangeHigh() ) ) );
thermometerPlot.setBulbRadius( getBulbRadius() );
thermometerPlot.setColumnRadius( getColumnRadius() );
thermometerPlot.setSubrange( ThermometerPlot.CRITICAL, getCriticalRangeLow(), getCriticalRangeHigh() );
thermometerPlot.setSubrange( ThermometerPlot.WARNING, getWarningRangeLow(), getWarningRangeHigh() );
thermometerPlot.setSubrange( ThermometerPlot.NORMAL, getNormalRangeLow(), getNormalRangeHigh() );
if ( getMercuryPaint() != null ) {
thermometerPlot.setMercuryPaint( getMercuryPaint() );
}
if ( getThermometerPaint() != null ) {
thermometerPlot.setThermometerPaint( getThermometerPaint() );
}
if ( getCriticalRangeColor() != null ) {
thermometerPlot.setSubrangePaint( ThermometerPlot.CRITICAL, getCriticalRangeColor() );
}
if ( getWarningRangeColor() != null ) {
thermometerPlot.setSubrangePaint( ThermometerPlot.WARNING, getWarningRangeColor() );
}
if ( getNormalRangeColor() != null ) {
thermometerPlot.setSubrangePaint( ThermometerPlot.NORMAL, getNormalRangeColor() );
}
}
private static class ThermometerPlotDefaults extends ThermometerPlot {
public static int getDefaultBulbRadius() {
return ThermometerPlot.DEFAULT_BULB_RADIUS;
}
public static int getDefaultColumnRadius() {
return ThermometerPlot.DEFAULT_COLUMN_RADIUS;
}
}
}