net.sf.jasperreports.engine.design.JRDesignChart 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 - 2019 TIBCO Software 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.design;
import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import net.sf.jasperreports.charts.design.JRDesignAreaPlot;
import net.sf.jasperreports.charts.design.JRDesignBar3DPlot;
import net.sf.jasperreports.charts.design.JRDesignBarPlot;
import net.sf.jasperreports.charts.design.JRDesignBubblePlot;
import net.sf.jasperreports.charts.design.JRDesignCandlestickPlot;
import net.sf.jasperreports.charts.design.JRDesignCategoryDataset;
import net.sf.jasperreports.charts.design.JRDesignGanttDataset;
import net.sf.jasperreports.charts.design.JRDesignHighLowDataset;
import net.sf.jasperreports.charts.design.JRDesignHighLowPlot;
import net.sf.jasperreports.charts.design.JRDesignLinePlot;
import net.sf.jasperreports.charts.design.JRDesignMeterPlot;
import net.sf.jasperreports.charts.design.JRDesignMultiAxisPlot;
import net.sf.jasperreports.charts.design.JRDesignPie3DPlot;
import net.sf.jasperreports.charts.design.JRDesignPieDataset;
import net.sf.jasperreports.charts.design.JRDesignPiePlot;
import net.sf.jasperreports.charts.design.JRDesignScatterPlot;
import net.sf.jasperreports.charts.design.JRDesignThermometerPlot;
import net.sf.jasperreports.charts.design.JRDesignTimeSeriesDataset;
import net.sf.jasperreports.charts.design.JRDesignTimeSeriesPlot;
import net.sf.jasperreports.charts.design.JRDesignValueDataset;
import net.sf.jasperreports.charts.design.JRDesignXyDataset;
import net.sf.jasperreports.charts.design.JRDesignXyzDataset;
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.JRDefaultStyleProvider;
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.base.JRBaseChart;
import net.sf.jasperreports.engine.base.JRBaseLineBox;
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 JRDesignChart extends JRDesignElement implements JRChart
{
public static final String EXCEPTION_MESSAGE_KEY_UNSUPPORTED_CHART_TYPE = "charts.chart.type.unsupported";
/**
*
*/
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
/*
* Chart properties
*/
public static final String PROPERTY_ANCHOR_NAME_EXPRESSION = "anchorNameExpression";
public static final String PROPERTY_BOOKMARK_LEVEL = "bookmarkLevel";
public static final String PROPERTY_BOOKMARK_LEVEL_EXPRESSION = "bookmarkLevelExpression";
public static final String PROPERTY_EVALUATION_GROUP = "evaluationGroup";
public static final String PROPERTY_EVALUATION_TIME = "evaluationTime";
public static final String PROPERTY_CHART_TYPE = "chartType";
public static final String PROPERTY_CUSTOMIZER_CLASS = "customizerClass";
public static final String PROPERTY_DATASET = "dataset";
public static final String PROPERTY_LEGEND_FONT = "legendFont";
public static final String PROPERTY_SUBTITLE_EXPRESSION = "subtitleExpression";
public static final String PROPERTY_SUBTITLE_FONT = "subtitleFont";
public static final String PROPERTY_TITLE_EXPRESSION = "titleExpression";
public static final String PROPERTY_TITLE_FONT = "titleFont";
/**
*
*/
protected byte chartType;
/**
*
*/
protected Boolean showLegend;
protected EvaluationTimeEnum evaluationTimeValue = EvaluationTimeEnum.NOW;
protected String linkType;
protected String linkTarget;
protected Color titleColor;
protected Color subtitleColor;
protected Color legendColor;
protected Color legendBackgroundColor;
protected String renderType;
protected String theme;
/**
*
*/
protected JRFont titleFont;
protected JRFont subtitleFont;
protected JRFont legendFont;
protected EdgeEnum legendPositionValue;
protected EdgeEnum titlePositionValue;
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;
private List hyperlinkParameters;
protected JRChartDataset dataset;
protected JRChartPlot plot;
/**
*
*/
protected JRLineBox lineBox;
/**
* The bookmark level for the anchor associated with this chart.
* @see JRAnchor#getBookmarkLevel()
*/
protected int bookmarkLevel = JRAnchor.NO_BOOKMARK;
/**
*
*/
public JRDesignChart(JRDefaultStyleProvider defaultStyleProvider, byte chartType)
{
super(defaultStyleProvider);
setChartType(chartType);
hyperlinkParameters = new ArrayList();
lineBox = new JRBaseLineBox(this);
}
@Override
public Boolean getShowLegend()
{
return this.showLegend;
}
@Override
public void setShowLegend(Boolean isShowLegend)
{
Boolean old = this.showLegend;
this.showLegend = isShowLegend;
getEventSupport().firePropertyChange(JRBaseChart.PROPERTY_SHOW_LEGEND, old, this.showLegend);
}
@Override
public String getRenderType()
{
return renderType;
}
@Override
public void setRenderType(String renderType)
{
String old = this.renderType;
this.renderType = renderType;
getEventSupport().firePropertyChange(JRBaseChart.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(JRBaseChart.PROPERTY_THEME, old, this.theme);
}
@Override
public EvaluationTimeEnum getEvaluationTimeValue()
{
return evaluationTimeValue;
}
/**
*
*/
public void setEvaluationTime(EvaluationTimeEnum evaluationTimeValue)
{
Object old = this.evaluationTimeValue;
this.evaluationTimeValue = evaluationTimeValue;
getEventSupport().firePropertyChange(PROPERTY_EVALUATION_TIME, old, this.evaluationTimeValue);
}
@Override
public JRGroup getEvaluationGroup()
{
return evaluationGroup;
}
/**
*
*/
public void setEvaluationGroup(JRGroup group)
{
Object old = this.evaluationGroup;
this.evaluationGroup = group;
getEventSupport().firePropertyChange(PROPERTY_EVALUATION_GROUP, old, this.evaluationGroup);
}
@Override
public JRLineBox getLineBox()
{
return lineBox;
}
@Override
public JRFont getTitleFont()
{
return titleFont;
}
/**
*
*/
public void setTitleFont(JRFont font)//FIXMEFONT embedded fonts should never be null so these font setting methods should be deprecated; check iR impact
{
Object old = this.titleFont;
this.titleFont = font;
getEventSupport().firePropertyChange(PROPERTY_TITLE_FONT, old, this.titleFont);
}
@Override
public EdgeEnum getTitlePositionValue()
{
return titlePositionValue;
}
@Override
public void setTitlePosition(EdgeEnum titlePositionValue)
{
EdgeEnum old = this.titlePositionValue;
this.titlePositionValue = titlePositionValue;
getEventSupport().firePropertyChange(JRBaseChart.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(JRBaseChart.PROPERTY_TITLE_COLOR, old, this.titleColor);
}
@Override
public JRFont getSubtitleFont()
{
return subtitleFont;
}
/**
*
*/
public void setSubtitleFont(JRFont font)
{
Object old = this.subtitleFont;
this.subtitleFont = font;
getEventSupport().firePropertyChange(PROPERTY_SUBTITLE_FONT, old, this.subtitleFont);
}
@Override
public Color getSubtitleColor()
{
return getStyleResolver().getSubtitleColor(this);
}
@Override
public Color getOwnSubtitleColor()
{
return subtitleColor;
}
@Override
public void setSubtitleColor(Color subtitleColor)
{
Object old = this.subtitleColor;
this.subtitleColor = subtitleColor;
getEventSupport().firePropertyChange(JRBaseChart.PROPERTY_SUBTITLE_COLOR, old, this.subtitleColor);
}
@Override
public Color getOwnLegendColor()
{
return legendColor;
}
@Override
public Color getLegendColor()
{
return getStyleResolver().getLegendColor(this);
}
@Override
public void setLegendColor(Color legendColor)
{
Object old = this.legendColor;
this.legendColor = legendColor;
getEventSupport().firePropertyChange(JRBaseChart.PROPERTY_LEGEND_COLOR, old, this.legendColor);
}
@Override
public Color getOwnLegendBackgroundColor()
{
return legendBackgroundColor;
}
@Override
public Color getLegendBackgroundColor()
{
return getStyleResolver().getLegendBackgroundColor(this);
}
@Override
public void setLegendBackgroundColor(Color legendBackgroundColor)
{
Object old = this.legendBackgroundColor;
this.legendBackgroundColor = legendBackgroundColor;
getEventSupport().firePropertyChange(JRBaseChart.PROPERTY_LEGEND_BACKGROUND_COLOR, old, this.legendBackgroundColor);
}
@Override
public JRFont getLegendFont()
{
return legendFont;
}
/**
*
*/
public void setLegendFont(JRFont legendFont)
{
Object old = this.legendFont;
this.legendFont = legendFont;
getEventSupport().firePropertyChange(PROPERTY_LEGEND_FONT, old, this.legendFont);
}
@Override
public EdgeEnum getLegendPositionValue()
{
return legendPositionValue;
}
@Override
public void setLegendPosition(EdgeEnum legendPositionValue)
{
EdgeEnum old = this.legendPositionValue;
this.legendPositionValue = legendPositionValue;
getEventSupport().firePropertyChange(JRBaseChart.PROPERTY_LEGEND_POSITION, old, this.legendPositionValue);
}
/**
* @deprecated Replaced by {@link #getHyperlinkTypeValue()}.
*/
public byte getHyperlinkType()
{
return getHyperlinkTypeValue().getValue();
}
@Override
public HyperlinkTypeEnum getHyperlinkTypeValue()
{
return JRHyperlinkHelper.getHyperlinkTypeValue(this);
}
/**
* Sets the link type as a built-in hyperlink type.
*
* @param hyperlinkType the built-in hyperlink type
* @see #getLinkType()
*/
public void setHyperlinkType(HyperlinkTypeEnum hyperlinkType)
{
setLinkType(JRHyperlinkHelper.getLinkType(hyperlinkType));
}
@Override
public byte getHyperlinkTarget()
{
return JRHyperlinkHelper.getHyperlinkTarget(this);
}
/**
*
*/
public void setHyperlinkTarget(HyperlinkTargetEnum hyperlinkTarget)
{
setLinkTarget(JRHyperlinkHelper.getLinkTarget(hyperlinkTarget));
}
@Override
public JRExpression getTitleExpression()
{
return titleExpression;
}
/**
*
*/
public void setTitleExpression(JRExpression expression)
{
Object old = this.titleExpression;
this.titleExpression = expression;
getEventSupport().firePropertyChange(PROPERTY_TITLE_EXPRESSION, old, this.titleExpression);
}
@Override
public JRExpression getSubtitleExpression()
{
return subtitleExpression;
}
/**
*
*/
public void setSubtitleExpression(JRExpression expression)
{
Object old = this.subtitleExpression;
this.subtitleExpression = expression;
getEventSupport().firePropertyChange(PROPERTY_SUBTITLE_EXPRESSION, old, this.subtitleExpression);
}
@Override
public JRExpression getAnchorNameExpression()
{
return anchorNameExpression;
}
/**
*
*/
public void setAnchorNameExpression(JRExpression anchorNameExpression)
{
Object old = this.anchorNameExpression;
this.anchorNameExpression = anchorNameExpression;
getEventSupport().firePropertyChange(PROPERTY_ANCHOR_NAME_EXPRESSION, old, this.anchorNameExpression);
}
@Override
public JRExpression getBookmarkLevelExpression()
{
return bookmarkLevelExpression;
}
/**
*
*/
public void setBookmarkLevelExpression(JRExpression bookmarkLevelExpression)
{
Object old = this.bookmarkLevelExpression;
this.bookmarkLevelExpression = bookmarkLevelExpression;
getEventSupport().firePropertyChange(PROPERTY_BOOKMARK_LEVEL_EXPRESSION, old, this.bookmarkLevelExpression);
}
@Override
public JRExpression getHyperlinkReferenceExpression()
{
return hyperlinkReferenceExpression;
}
/**
*
*/
public void setHyperlinkReferenceExpression(JRExpression hyperlinkReferenceExpression)
{
Object old = this.hyperlinkReferenceExpression;
this.hyperlinkReferenceExpression = hyperlinkReferenceExpression;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_HYPERLINK_REFERENCE_EXPRESSION, old, this.hyperlinkReferenceExpression);
}
@Override
public JRExpression getHyperlinkWhenExpression()
{
return hyperlinkWhenExpression;
}
/**
*
*/
public void setHyperlinkWhenExpression(JRExpression hyperlinkWhenExpression)
{
Object old = this.hyperlinkWhenExpression;
this.hyperlinkWhenExpression = hyperlinkWhenExpression;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_HYPERLINK_WHEN_EXPRESSION, old, this.hyperlinkWhenExpression);
}
@Override
public JRExpression getHyperlinkAnchorExpression()
{
return hyperlinkAnchorExpression;
}
/**
*
*/
public void setHyperlinkAnchorExpression(JRExpression hyperlinkAnchorExpression)
{
Object old = this.hyperlinkAnchorExpression;
this.hyperlinkAnchorExpression = hyperlinkAnchorExpression;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_HYPERLINK_ANCHOR_EXPRESSION, old, this.hyperlinkAnchorExpression);
}
@Override
public JRExpression getHyperlinkPageExpression()
{
return hyperlinkPageExpression;
}
/**
*
*/
public void setHyperlinkPageExpression(JRExpression hyperlinkPageExpression)
{
Object old = this.hyperlinkPageExpression;
this.hyperlinkPageExpression = hyperlinkPageExpression;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_HYPERLINK_PAGE_EXPRESSION, old, this.hyperlinkPageExpression);
}
@Override
public JRChartDataset getDataset()
{
return dataset;
}
@Override
public JRChartPlot getPlot()
{
return plot;
}
@Override
public byte getChartType()
{
return chartType;
}
/**
*
*/
public void setChartType(byte chartType)
{
byte old = this.chartType;
this.chartType = chartType;
switch(chartType) {
case CHART_TYPE_AREA:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignAreaPlot(plot, this);
break;
case CHART_TYPE_BAR:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignBarPlot(plot, this);
break;
case CHART_TYPE_BAR3D:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignBar3DPlot(plot, this);
break;
case CHART_TYPE_BUBBLE:
dataset = new JRDesignXyzDataset(dataset);
plot = new JRDesignBubblePlot(plot, this);
break;
case CHART_TYPE_CANDLESTICK:
dataset = new JRDesignHighLowDataset(dataset);
plot = new JRDesignCandlestickPlot(plot, this);
break;
case CHART_TYPE_HIGHLOW:
dataset = new JRDesignHighLowDataset(dataset);
plot = new JRDesignHighLowPlot(plot, this);
break;
case CHART_TYPE_LINE:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignLinePlot(plot, this);
break;
case CHART_TYPE_METER:
dataset = new JRDesignValueDataset(dataset);
plot = new JRDesignMeterPlot(plot, this);
break;
case CHART_TYPE_MULTI_AXIS:
dataset = null;
plot = new JRDesignMultiAxisPlot(plot, this);
break;
case CHART_TYPE_PIE:
dataset = new JRDesignPieDataset(dataset);
plot = new JRDesignPiePlot(plot, this);
break;
case CHART_TYPE_PIE3D:
dataset = new JRDesignPieDataset(dataset);
plot = new JRDesignPie3DPlot(plot, this);
break;
case CHART_TYPE_SCATTER:
dataset = new JRDesignXyDataset(dataset);
plot = new JRDesignScatterPlot(plot, this);
break;
case CHART_TYPE_STACKEDBAR:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignBarPlot(plot, this);
break;
case CHART_TYPE_STACKEDBAR3D:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignBar3DPlot(plot, this);
break;
case CHART_TYPE_THERMOMETER:
dataset = new JRDesignValueDataset(dataset);
plot = new JRDesignThermometerPlot(plot, this);
break;
case CHART_TYPE_TIMESERIES:
dataset = new JRDesignTimeSeriesDataset(dataset);//other datasets could be supported
plot = new JRDesignTimeSeriesPlot(plot, this);
break;
case CHART_TYPE_XYAREA:
dataset = new JRDesignXyDataset(dataset);
plot = new JRDesignAreaPlot(plot, this);
break;
case CHART_TYPE_XYBAR:
plot = new JRDesignBarPlot(plot, this);
break;
case CHART_TYPE_XYLINE:
dataset = new JRDesignXyDataset(dataset);
plot = new JRDesignLinePlot(plot, this);
break;
case CHART_TYPE_STACKEDAREA:
dataset = new JRDesignCategoryDataset(dataset);
plot = new JRDesignAreaPlot(plot, this);
break;
case CHART_TYPE_GANTT:
dataset = new JRDesignGanttDataset(dataset);
plot = new JRDesignBarPlot(plot, this);
break;
default:
throw
new JRRuntimeException(
EXCEPTION_MESSAGE_KEY_UNSUPPORTED_CHART_TYPE,
(Object[])null);
}
getEventSupport().firePropertyChange(PROPERTY_CHART_TYPE, old, this.chartType);
}
public void setDataset(JRChartDataset ds)
{
Object old = this.dataset;
dataset = ds;
getEventSupport().firePropertyChange(PROPERTY_DATASET, old, this.dataset);
}
@Override
public void collectExpressions(JRExpressionCollector collector)
{
collector.collect(this);
}
@Override
public void visit(JRVisitor visitor)
{
visitor.visitChart(this);
}
@Override
public int getBookmarkLevel()
{
return bookmarkLevel;
}
/**
* Sets the boomark level for the anchor associated with this chart.
*
* @param bookmarkLevel the bookmark level (starting from 1)
* or {@link JRAnchor#NO_BOOKMARK NO_BOOKMARK} if no bookmark should be created
*/
public void setBookmarkLevel(int bookmarkLevel)
{
int old = this.bookmarkLevel;
this.bookmarkLevel = bookmarkLevel;
getEventSupport().firePropertyChange(PROPERTY_BOOKMARK_LEVEL, old, this.bookmarkLevel);
}
@Override
public String getCustomizerClass()
{
return customizerClass;
}
/**
* Sets a user specified chart customizer class name.
* @see net.sf.jasperreports.engine.JRChartCustomizer
*/
public void setCustomizerClass(String customizerClass)
{
Object old = this.customizerClass;
this.customizerClass = customizerClass;
getEventSupport().firePropertyChange(PROPERTY_CUSTOMIZER_CLASS, old, this.customizerClass);
}
@Override
public ModeEnum getModeValue()
{
return getStyleResolver().getMode(this, ModeEnum.TRANSPARENT);
}
@Override
public String getLinkType()
{
return linkType;
}
/**
* Sets the hyperlink type.
*
* The type can be one of the built-in types
* (Reference, LocalAnchor, LocalPage, RemoteAnchor, RemotePage),
* or can be an arbitrary type.
*
* @param type the hyperlink type
*/
public void setLinkType(String type)
{
Object old = this.linkType;
this.linkType = type;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_LINK_TYPE, old, this.linkType);
}
@Override
public String getLinkTarget()
{
return linkTarget;
}
/**
* Sets the hyperlink target.
*
* The target can be one of the built-in target names
* (Self, Blank, Top, Parent),
* or can be an arbitrary target name.
*
* @param target the hyperlink target
*/
public void setLinkTarget(String target)
{
Object old = this.linkTarget;
this.linkTarget = target;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_LINK_TARGET, old, this.linkTarget);
}
@Override
public JRHyperlinkParameter[] getHyperlinkParameters()
{
JRHyperlinkParameter[] parameters;
if (hyperlinkParameters.isEmpty())
{
parameters = null;
}
else
{
parameters = new JRHyperlinkParameter[hyperlinkParameters.size()];
hyperlinkParameters.toArray(parameters);
}
return parameters;
}
/**
* Returns the list of custom hyperlink parameters.
*
* @return the list of custom hyperlink parameters
*/
public List getHyperlinkParametersList()
{
return hyperlinkParameters;
}
/**
* Adds a custom hyperlink parameter.
*
* @param parameter the parameter to add
*/
public void addHyperlinkParameter(JRHyperlinkParameter parameter)
{
hyperlinkParameters.add(parameter);
getEventSupport().fireCollectionElementAddedEvent(JRDesignHyperlink.PROPERTY_HYPERLINK_PARAMETERS,
parameter, hyperlinkParameters.size() - 1);
}
/**
* Removes a custom hyperlink parameter.
*
* @param parameter the parameter to remove
*/
public void removeHyperlinkParameter(JRHyperlinkParameter parameter)
{
int idx = hyperlinkParameters.indexOf(parameter);
if (idx >= 0)
{
hyperlinkParameters.remove(idx);
getEventSupport().fireCollectionElementRemovedEvent(JRDesignHyperlink.PROPERTY_HYPERLINK_PARAMETERS,
parameter, idx);
}
}
/**
* Removes a custom hyperlink parameter.
*
* If multiple parameters having the specified name exist, all of them
* will be removed
*
*
* @param parameterName the parameter name
*/
public void removeHyperlinkParameter(String parameterName)
{
for (ListIterator it = hyperlinkParameters.listIterator(); it.hasNext();)
{
JRHyperlinkParameter parameter = it.next();
if (parameter.getName() != null && parameter.getName().equals(parameterName))
{
it.remove();
getEventSupport().fireCollectionElementRemovedEvent(JRDesignHyperlink.PROPERTY_HYPERLINK_PARAMETERS,
parameter, it.nextIndex());
}
}
}
@Override
public JRExpression getHyperlinkTooltipExpression()
{
return hyperlinkTooltipExpression;
}
/**
* Sets the expression which will be used to generate the hyperlink tooltip.
*
* @param hyperlinkTooltipExpression the expression which will be used to generate the hyperlink tooltip
* @see #getHyperlinkTooltipExpression()
*/
public void setHyperlinkTooltipExpression(JRExpression hyperlinkTooltipExpression)
{
Object old = this.hyperlinkTooltipExpression;
this.hyperlinkTooltipExpression = hyperlinkTooltipExpression;
getEventSupport().firePropertyChange(JRDesignHyperlink.PROPERTY_HYPERLINK_TOOLTIP_EXPRESSION, old, this.hyperlinkTooltipExpression);
}
@Override
public Color getDefaultLineColor()
{
return getForecolor();
}
@Override
public Object clone()
{
JRDesignChart clone = (JRDesignChart)super.clone();
clone.lineBox = lineBox.clone(clone);
clone.hyperlinkParameters = JRCloneUtils.cloneList(hyperlinkParameters);
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 titlePosition;
/**
* @deprecated
*/
private byte legendPosition;
/**
* @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;
}
}
}
}