net.sf.jasperreports.engine.base.JRBaseChart Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasperreports Show documentation
Show all versions of jasperreports Show documentation
Free Java Reporting Library
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2023 Cloud Software Group, Inc. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
package net.sf.jasperreports.engine.base;
import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import net.sf.jasperreports.charts.JRAreaPlot;
import net.sf.jasperreports.charts.JRBar3DPlot;
import net.sf.jasperreports.charts.JRBarPlot;
import net.sf.jasperreports.charts.JRBubblePlot;
import net.sf.jasperreports.charts.JRCandlestickPlot;
import net.sf.jasperreports.charts.JRCategoryDataset;
import net.sf.jasperreports.charts.JRGanttDataset;
import net.sf.jasperreports.charts.JRHighLowDataset;
import net.sf.jasperreports.charts.JRHighLowPlot;
import net.sf.jasperreports.charts.JRLinePlot;
import net.sf.jasperreports.charts.JRMeterPlot;
import net.sf.jasperreports.charts.JRMultiAxisPlot;
import net.sf.jasperreports.charts.JRPie3DPlot;
import net.sf.jasperreports.charts.JRPieDataset;
import net.sf.jasperreports.charts.JRPiePlot;
import net.sf.jasperreports.charts.JRScatterPlot;
import net.sf.jasperreports.charts.JRThermometerPlot;
import net.sf.jasperreports.charts.JRTimePeriodDataset;
import net.sf.jasperreports.charts.JRTimeSeriesDataset;
import net.sf.jasperreports.charts.JRTimeSeriesPlot;
import net.sf.jasperreports.charts.JRValueDataset;
import net.sf.jasperreports.charts.JRXyDataset;
import net.sf.jasperreports.charts.JRXyzDataset;
import net.sf.jasperreports.charts.type.EdgeEnum;
import net.sf.jasperreports.engine.JRAnchor;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRChartDataset;
import net.sf.jasperreports.engine.JRChartPlot;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.JRFont;
import net.sf.jasperreports.engine.JRGroup;
import net.sf.jasperreports.engine.JRHyperlinkHelper;
import net.sf.jasperreports.engine.JRHyperlinkParameter;
import net.sf.jasperreports.engine.JRLineBox;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JRVisitor;
import net.sf.jasperreports.engine.type.EvaluationTimeEnum;
import net.sf.jasperreports.engine.type.HyperlinkTargetEnum;
import net.sf.jasperreports.engine.type.HyperlinkTypeEnum;
import net.sf.jasperreports.engine.type.ModeEnum;
import net.sf.jasperreports.engine.util.JRCloneUtils;
/**
* @author Teodor Danciu ([email protected])
*/
public class JRBaseChart extends JRBaseElement implements JRChart
{
/**
*
*/
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
public static final String EXCEPTION_MESSAGE_KEY_CHART_TYPE_NOT_SUPPORTED = "charts.chart.type.not.supported";
/*
* Chart properties
*/
public static final String PROPERTY_LEGEND_BACKGROUND_COLOR = "legendBackgroundColor";
public static final String PROPERTY_LEGEND_COLOR = "legendColor";
public static final String PROPERTY_LEGEND_POSITION = "legendPosition";
public static final String PROPERTY_SHOW_LEGEND = "isShowLegend";
public static final String PROPERTY_SUBTITLE_COLOR = "subtitleColor";
public static final String PROPERTY_TITLE_COLOR = "titleColor";
public static final String PROPERTY_TITLE_POSITION = "titlePosition";
public static final String PROPERTY_RENDER_TYPE = "renderType";
public static final String PROPERTY_THEME = "theme";
/**
*
*/
protected byte chartType;
/**
*
*/
protected Boolean showLegend;
protected EvaluationTimeEnum evaluationTimeValue = EvaluationTimeEnum.NOW;
protected String linkType;
protected String linkTarget;
private JRHyperlinkParameter[] hyperlinkParameters;
protected Color titleColor;
protected Color subtitleColor;
protected Color legendColor;
protected Color legendBackgroundColor;
protected EdgeEnum legendPositionValue;
protected EdgeEnum titlePositionValue;
protected String renderType;
protected String theme;
/**
*
*/
protected JRLineBox lineBox;
protected JRFont titleFont;
protected JRFont subtitleFont;
protected JRFont legendFont;
protected String customizerClass;
/**
*
*/
protected JRGroup evaluationGroup;
protected JRExpression titleExpression;
protected JRExpression subtitleExpression;
protected JRExpression anchorNameExpression;
protected JRExpression bookmarkLevelExpression;
protected JRExpression hyperlinkReferenceExpression;
protected JRExpression hyperlinkWhenExpression;
protected JRExpression hyperlinkAnchorExpression;
protected JRExpression hyperlinkPageExpression;
private JRExpression hyperlinkTooltipExpression;
protected JRChartDataset dataset;
protected JRChartPlot plot;
/**
* The bookmark level for the anchor associated with this chart.
* @see JRAnchor#getBookmarkLevel()
*/
protected int bookmarkLevel = JRAnchor.NO_BOOKMARK;
/**
*
*/
protected JRBaseChart(JRChart chart, JRBaseObjectFactory factory)
{
super(chart, factory);
chartType = chart.getChartType();
switch(chartType) {
case CHART_TYPE_AREA:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
break;
case CHART_TYPE_BAR:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
break;
case CHART_TYPE_BAR3D:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getBar3DPlot((JRBar3DPlot) chart.getPlot());
break;
case CHART_TYPE_BUBBLE:
dataset = factory.getXyzDataset((JRXyzDataset) chart.getDataset());
plot = factory.getBubblePlot((JRBubblePlot) chart.getPlot());
break;
case CHART_TYPE_CANDLESTICK:
dataset = factory.getHighLowDataset((JRHighLowDataset) chart.getDataset());
plot = factory.getCandlestickPlot((JRCandlestickPlot) chart.getPlot());
break;
case CHART_TYPE_HIGHLOW:
dataset = factory.getHighLowDataset((JRHighLowDataset) chart.getDataset());
plot = factory.getHighLowPlot((JRHighLowPlot) chart.getPlot());
break;
case CHART_TYPE_LINE:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getLinePlot((JRLinePlot) chart.getPlot());
break;
case CHART_TYPE_METER:
dataset = factory.getValueDataset((JRValueDataset) chart.getDataset());
plot = factory.getMeterPlot((JRMeterPlot) chart.getPlot());
break;
case CHART_TYPE_MULTI_AXIS:
dataset = null;
plot = factory.getMultiAxisPlot((JRMultiAxisPlot) chart.getPlot());
break;
case CHART_TYPE_PIE:
dataset = factory.getPieDataset((JRPieDataset) chart.getDataset());
plot = factory.getPiePlot((JRPiePlot) chart.getPlot());
break;
case CHART_TYPE_PIE3D:
dataset = factory.getPieDataset((JRPieDataset) chart.getDataset());
plot = factory.getPie3DPlot((JRPie3DPlot) chart.getPlot());
break;
case CHART_TYPE_SCATTER:
dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
plot = factory.getScatterPlot((JRScatterPlot) chart.getPlot());
break;
case CHART_TYPE_STACKEDBAR:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
break;
case CHART_TYPE_STACKEDBAR3D:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getBar3DPlot((JRBar3DPlot) chart.getPlot());
break;
case CHART_TYPE_THERMOMETER:
dataset = factory.getValueDataset((JRValueDataset) chart.getDataset());
plot = factory.getThermometerPlot((JRThermometerPlot) chart.getPlot());
break;
case CHART_TYPE_TIMESERIES:
dataset = factory.getTimeSeriesDataset((JRTimeSeriesDataset)chart.getDataset());
plot = factory.getTimeSeriesPlot( (JRTimeSeriesPlot)chart.getPlot() );
break;
case CHART_TYPE_XYAREA:
dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
break;
case CHART_TYPE_XYBAR:
switch (chart.getDataset().getDatasetType()){
case JRChartDataset.TIMESERIES_DATASET:
dataset = factory.getTimeSeriesDataset((JRTimeSeriesDataset) chart.getDataset());
break;
case JRChartDataset.TIMEPERIOD_DATASET:
dataset = factory.getTimePeriodDataset((JRTimePeriodDataset) chart.getDataset() );
break;
case JRChartDataset.XY_DATASET:
dataset = factory.getXyDataset( (JRXyDataset)chart.getDataset() );
break;
default:
}
plot = factory.getBarPlot((JRBarPlot)chart.getPlot());
break;
case CHART_TYPE_XYLINE:
dataset = factory.getXyDataset((JRXyDataset) chart.getDataset());
plot = factory.getLinePlot((JRLinePlot) chart.getPlot());
break;
case CHART_TYPE_STACKEDAREA:
dataset = factory.getCategoryDataset((JRCategoryDataset) chart.getDataset());
plot = factory.getAreaPlot((JRAreaPlot) chart.getPlot());
break;
case CHART_TYPE_GANTT:
dataset = factory.getGanttDataset((JRGanttDataset) chart.getDataset());
plot = factory.getBarPlot((JRBarPlot) chart.getPlot());
break;
default:
throw
new JRRuntimeException(
JRBaseChart.EXCEPTION_MESSAGE_KEY_CHART_TYPE_NOT_SUPPORTED,
new Object[]{chartType}
);
}
showLegend = chart.getShowLegend();
evaluationTimeValue = chart.getEvaluationTimeValue();
linkType = chart.getLinkType();
linkTarget = chart.getLinkTarget();
titlePositionValue = chart.getTitlePositionValue();
titleColor = chart.getOwnTitleColor();
subtitleColor = chart.getOwnSubtitleColor();
legendColor = chart.getOwnLegendColor();
legendBackgroundColor = chart.getOwnLegendBackgroundColor();
legendPositionValue = chart.getLegendPositionValue();
renderType = chart.getRenderType();
theme = chart.getTheme();
titleFont = factory.getFont(this, chart.getTitleFont());
subtitleFont = factory.getFont(this, chart.getSubtitleFont());
legendFont = factory.getFont(this, chart.getLegendFont());
evaluationGroup = factory.getGroup(chart.getEvaluationGroup());
titleExpression = factory.getExpression(chart.getTitleExpression());
subtitleExpression = factory.getExpression(chart.getSubtitleExpression());
bookmarkLevelExpression = factory.getExpression(chart.getBookmarkLevelExpression());
anchorNameExpression = factory.getExpression(chart.getAnchorNameExpression());
hyperlinkReferenceExpression = factory.getExpression(chart.getHyperlinkReferenceExpression());
hyperlinkWhenExpression = factory.getExpression(chart.getHyperlinkWhenExpression());
hyperlinkAnchorExpression = factory.getExpression(chart.getHyperlinkAnchorExpression());
hyperlinkPageExpression = factory.getExpression(chart.getHyperlinkPageExpression());
hyperlinkTooltipExpression = factory.getExpression(chart.getHyperlinkTooltipExpression());
bookmarkLevel = chart.getBookmarkLevel();
hyperlinkParameters = JRBaseHyperlink.copyHyperlinkParameters(chart, factory);
customizerClass = chart.getCustomizerClass();
lineBox = chart.getLineBox().clone(this);
}
@Override
public Boolean getShowLegend()
{
return this.showLegend;
}
@Override
public void setShowLegend(Boolean isShowLegend)
{
Boolean old = this.showLegend;
this.showLegend = isShowLegend;
getEventSupport().firePropertyChange(PROPERTY_SHOW_LEGEND, old, this.showLegend);
}
@Override
public EvaluationTimeEnum getEvaluationTimeValue()
{
return evaluationTimeValue;
}
@Override
public JRGroup getEvaluationGroup()
{
return evaluationGroup;
}
@Override
public JRLineBox getLineBox()
{
return lineBox;
}
@Override
public JRFont getTitleFont()
{
return titleFont;
}
@Override
public EdgeEnum getTitlePositionValue()
{
return titlePositionValue;
}
@Override
public void setTitlePosition(EdgeEnum titlePositionValue)
{
EdgeEnum old = this.titlePositionValue;
this.titlePositionValue = titlePositionValue;
getEventSupport().firePropertyChange(PROPERTY_TITLE_POSITION, old, this.titlePositionValue);
}
@Override
public Color getTitleColor()
{
return getStyleResolver().getTitleColor(this);
}
@Override
public Color getOwnTitleColor()
{
return titleColor;
}
@Override
public void setTitleColor(Color titleColor)
{
Object old = this.titleColor;
this.titleColor = titleColor;
getEventSupport().firePropertyChange(PROPERTY_TITLE_COLOR, old, this.titleColor);
}
@Override
public JRFont getSubtitleFont()
{
return subtitleFont;
}
@Override
public Color getOwnSubtitleColor()
{
return subtitleColor;
}
@Override
public Color getSubtitleColor()
{
return getStyleResolver().getSubtitleColor(this);
}
@Override
public void setSubtitleColor(Color subtitleColor)
{
Object old = this.subtitleColor;
this.subtitleColor = subtitleColor;
getEventSupport().firePropertyChange(PROPERTY_SUBTITLE_COLOR, old, this.subtitleColor);
}
@Override
public Color getLegendBackgroundColor() {
return getStyleResolver().getLegendBackgroundColor(this);
}
@Override
public Color getOwnLegendBackgroundColor() {
return legendBackgroundColor;
}
@Override
public Color getOwnLegendColor() {
return legendColor;
}
@Override
public Color getLegendColor() {
return getStyleResolver().getLegendColor(this);
}
@Override
public JRFont getLegendFont() {
return legendFont;
}
@Override
public void setLegendBackgroundColor(Color legendBackgroundColor) {
Object old = this.legendBackgroundColor;
this.legendBackgroundColor = legendBackgroundColor;
getEventSupport().firePropertyChange(PROPERTY_LEGEND_BACKGROUND_COLOR, old, this.legendBackgroundColor);
}
@Override
public void setLegendColor(Color legendColor) {
Object old = this.legendColor;
this.legendColor = legendColor;
getEventSupport().firePropertyChange(PROPERTY_LEGEND_COLOR, old, this.legendColor);
}
@Override
public EdgeEnum getLegendPositionValue()
{
return legendPositionValue;
}
@Override
public void setLegendPosition(EdgeEnum legendPositionValue)
{
EdgeEnum old = this.legendPositionValue;
this.legendPositionValue = legendPositionValue;
getEventSupport().firePropertyChange(PROPERTY_LEGEND_POSITION, old, this.legendPositionValue);
}
@Override
public HyperlinkTypeEnum getHyperlinkTypeValue()
{
return JRHyperlinkHelper.getHyperlinkTypeValue(this);
}
@Override
public byte getHyperlinkTarget()
{
return JRHyperlinkHelper.getHyperlinkTarget(this);
}
@Override
public JRExpression getTitleExpression()
{
return titleExpression;
}
@Override
public JRExpression getSubtitleExpression()
{
return subtitleExpression;
}
@Override
public JRExpression getBookmarkLevelExpression()
{
return bookmarkLevelExpression;
}
@Override
public JRExpression getAnchorNameExpression()
{
return anchorNameExpression;
}
@Override
public JRExpression getHyperlinkReferenceExpression()
{
return hyperlinkReferenceExpression;
}
@Override
public JRExpression getHyperlinkWhenExpression()
{
return hyperlinkWhenExpression;
}
@Override
public JRExpression getHyperlinkAnchorExpression()
{
return hyperlinkAnchorExpression;
}
@Override
public JRExpression getHyperlinkPageExpression()
{
return hyperlinkPageExpression;
}
@Override
public JRChartDataset getDataset()
{
return dataset;
}
@Override
public JRChartPlot getPlot()
{
return plot;
}
@Override
public byte getChartType()
{
return chartType;
}
@Override
public String getRenderType()
{
return renderType;
}
@Override
public void setRenderType(String renderType)
{
String old = this.renderType;
this.renderType = renderType;
getEventSupport().firePropertyChange(PROPERTY_RENDER_TYPE, old, this.renderType);
}
@Override
public String getTheme()
{
return theme;
}
@Override
public void setTheme(String theme)
{
String old = this.theme;
this.theme = theme;
getEventSupport().firePropertyChange(PROPERTY_THEME, old, this.theme);
}
@Override
public void collectExpressions(JRExpressionCollector collector)
{
collector.collect(this);
}
@Override
public void visit(JRVisitor visitor)
{
visitor.visitChart(this);
}
@Override
public int getBookmarkLevel()
{
return bookmarkLevel;
}
@Override
public String getCustomizerClass()
{
return customizerClass;
}
@Override
public ModeEnum getModeValue()
{
return getStyleResolver().getMode(this, ModeEnum.TRANSPARENT);
}
@Override
public String getLinkType()
{
return linkType;
}
@Override
public String getLinkTarget()
{
return linkTarget;
}
@Override
public JRHyperlinkParameter[] getHyperlinkParameters()
{
return hyperlinkParameters;
}
@Override
public JRExpression getHyperlinkTooltipExpression()
{
return hyperlinkTooltipExpression;
}
@Override
public Color getDefaultLineColor()
{
return getForecolor();
}
@Override
public Object clone()
{
JRBaseChart clone = (JRBaseChart)super.clone();
clone.lineBox = lineBox.clone(clone);
clone.hyperlinkParameters = JRCloneUtils.cloneArray(hyperlinkParameters);
clone.titleFont = JRCloneUtils.nullSafeClone((JRBaseFont)titleFont);
clone.subtitleFont = JRCloneUtils.nullSafeClone((JRBaseFont)subtitleFont);
clone.legendFont = JRCloneUtils.nullSafeClone((JRBaseFont)legendFont);
clone.titleExpression = JRCloneUtils.nullSafeClone(titleExpression);
clone.subtitleExpression = JRCloneUtils.nullSafeClone(subtitleExpression);
clone.anchorNameExpression = JRCloneUtils.nullSafeClone(anchorNameExpression);
clone.bookmarkLevelExpression = JRCloneUtils.nullSafeClone(bookmarkLevelExpression);
clone.hyperlinkReferenceExpression = JRCloneUtils.nullSafeClone(hyperlinkReferenceExpression);
clone.hyperlinkWhenExpression = JRCloneUtils.nullSafeClone(hyperlinkWhenExpression);
clone.hyperlinkAnchorExpression = JRCloneUtils.nullSafeClone(hyperlinkAnchorExpression);
clone.hyperlinkPageExpression = JRCloneUtils.nullSafeClone(hyperlinkPageExpression);
clone.hyperlinkTooltipExpression = JRCloneUtils.nullSafeClone(hyperlinkTooltipExpression);
clone.dataset = JRCloneUtils.nullSafeClone(dataset);
clone.plot = plot == null ? null : (JRChartPlot) plot.clone(clone);
return clone;
}
/*
* These fields are only for serialization backward compatibility.
*/
private int PSEUDO_SERIAL_VERSION_UID = JRConstants.PSEUDO_SERIAL_VERSION_UID; //NOPMD
/**
* @deprecated
*/
private boolean isShowLegend;
/**
* @deprecated
*/
private byte legendPosition;
/**
* @deprecated
*/
private byte titlePosition;
/**
* @deprecated
*/
private byte hyperlinkType;
/**
* @deprecated
*/
private byte hyperlinkTarget;
/**
* @deprecated
*/
private byte evaluationTime;
/**
* @deprecated
*/
private Byte legendPositionByte;
/**
* @deprecated
*/
private Byte titlePositionByte;
@SuppressWarnings("deprecation")
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
if (linkType == null)
{
linkType = JRHyperlinkHelper.getLinkType(HyperlinkTypeEnum.getByValue(hyperlinkType));
}
if (linkTarget == null)
{
linkTarget = JRHyperlinkHelper.getLinkTarget(HyperlinkTargetEnum.getByValue(hyperlinkTarget));
}
if (PSEUDO_SERIAL_VERSION_UID < JRConstants.PSEUDO_SERIAL_VERSION_UID_3_7_2)
{
evaluationTimeValue = EvaluationTimeEnum.getByValue(evaluationTime);
if (PSEUDO_SERIAL_VERSION_UID < JRConstants.PSEUDO_SERIAL_VERSION_UID_3_1_3)
{
legendPositionValue = EdgeEnum.getByValue(legendPosition);
titlePositionValue = EdgeEnum.getByValue(titlePosition);
showLegend = isShowLegend;
}
else
{
legendPositionValue = EdgeEnum.getByValue(legendPositionByte);
titlePositionValue = EdgeEnum.getByValue(titlePositionByte);
legendPositionByte = null;
titlePositionByte = null;
}
}
}
}