package net.sf.jasperreports.engine.fill; import java.awt.Color; import java.awt.Font; import java.awt.Paint; import java.awt.geom.Rectangle2D; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Iterator; import java.util.List; import java.util.SortedSet; 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.JRDataRange; 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.JRValueDisplay; import net.sf.jasperreports.charts.JRXyDataset; import net.sf.jasperreports.charts.JRXyzDataset; import net.sf.jasperreports.charts.fill.JRFillAreaPlot; import net.sf.jasperreports.charts.fill.JRFillBar3DPlot; import net.sf.jasperreports.charts.fill.JRFillBarPlot; import net.sf.jasperreports.charts.fill.JRFillCategoryDataset; import net.sf.jasperreports.charts.fill.JRFillChartAxis; import net.sf.jasperreports.charts.fill.JRFillHighLowDataset; import net.sf.jasperreports.charts.fill.JRFillLinePlot; import net.sf.jasperreports.charts.fill.JRFillMeterPlot; import net.sf.jasperreports.charts.fill.JRFillMultiAxisPlot; import net.sf.jasperreports.charts.fill.JRFillPie3DPlot; import net.sf.jasperreports.charts.fill.JRFillPieDataset; import net.sf.jasperreports.charts.fill.JRFillPiePlot; import net.sf.jasperreports.charts.fill.JRFillThermometerPlot; import net.sf.jasperreports.charts.fill.JRFillTimePeriodDataset; import net.sf.jasperreports.charts.fill.JRFillTimeSeriesDataset; import net.sf.jasperreports.charts.fill.JRFillXyDataset; import net.sf.jasperreports.charts.fill.JRFillXyzDataset; import net.sf.jasperreports.charts.util.CategoryChartHyperlinkProvider; import net.sf.jasperreports.charts.util.ChartHyperlinkProvider; import net.sf.jasperreports.charts.util.ChartRendererFactory; import net.sf.jasperreports.charts.util.HighLowChartHyperlinkProvider; import net.sf.jasperreports.charts.util.JRMeterInterval; import net.sf.jasperreports.charts.util.PieChartHyperlinkProvider; import net.sf.jasperreports.charts.util.PieLabelGenerator; import net.sf.jasperreports.charts.util.TimePeriodChartHyperlinkProvider; import net.sf.jasperreports.charts.util.TimeSeriesChartHyperlinkProvider; import net.sf.jasperreports.charts.util.XYChartHyperlinkProvider; import net.sf.jasperreports.engine.JRAbstractChartCustomizer; import net.sf.jasperreports.engine.JRBox; import net.sf.jasperreports.engine.JRBoxContainer; import net.sf.jasperreports.engine.JRChart; import net.sf.jasperreports.engine.JRChartCustomizer; import net.sf.jasperreports.engine.JRChartDataset; import net.sf.jasperreports.engine.JRChartPlot; import net.sf.jasperreports.engine.JRCommonElement; import net.sf.jasperreports.engine.JRElement; import net.sf.jasperreports.engine.JRException; 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.JRHyperlink; import net.sf.jasperreports.engine.JRHyperlinkParameter; import net.sf.jasperreports.engine.JRLineBox; import net.sf.jasperreports.engine.JRPen; import net.sf.jasperreports.engine.JRPrintElement; import net.sf.jasperreports.engine.JRPrintHyperlinkParameters; import net.sf.jasperreports.engine.JRPrintImage; import net.sf.jasperreports.engine.JRRenderable; import net.sf.jasperreports.engine.JRRuntimeException; import net.sf.jasperreports.engine.JRStyle; import net.sf.jasperreports.engine.JRStyleContainer; import net.sf.jasperreports.engine.JRVisitor; import net.sf.jasperreports.engine.base.JRBaseFont; import net.sf.jasperreports.engine.util.JRClassLoader; import net.sf.jasperreports.engine.util.JRFontUtil; import net.sf.jasperreports.engine.util.JRPenUtil; import net.sf.jasperreports.engine.util.JRProperties; import net.sf.jasperreports.engine.util.JRSingletonCache; import net.sf.jasperreports.engine.util.JRStyleResolver; import net.sf.jasperreports.engine.util.LineBoxWrapper; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.Axis; import org.jfree.chart.axis.AxisLocation; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.CategoryItemLabelGenerator; import org.jfree.chart.labels.PieSectionLabelGenerator; import org.jfree.chart.labels.XYItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.DefaultDrawingSupplier; import org.jfree.chart.plot.DialShape; import org.jfree.chart.plot.DrawingSupplier; import org.jfree.chart.plot.MeterInterval; import org.jfree.chart.plot.MeterPlot; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.plot.Plot; import org.jfree.chart.plot.ThermometerPlot; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.renderer.category.StackedBarRenderer3D; import org.jfree.chart.renderer.xy.CandlestickRenderer; import org.jfree.chart.renderer.xy.HighLowRenderer; import org.jfree.chart.renderer.xy.XYBubbleRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.chart.title.LegendTitle; import org.jfree.chart.title.TextTitle; import org.jfree.chart.title.Title; import org.jfree.data.Range; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.PieDataset; import org.jfree.data.general.ValueDataset; import org.jfree.data.xy.IntervalXYDataset; import org.jfree.data.xy.OHLCDataset; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYZDataset; import org.jfree.ui.RectangleEdge; public class JRFillChart extends JRFillElement implements JRChart { private static final Color TRANSPARENT_PAINT = new Color(0, 0, 0, 0); private static final JRSingletonCache chartRendererFactoryCache = new JRSingletonCache(ChartRendererFactory.class); protected byte chartType = 0; protected JRFont titleFont = null; protected JRFont subtitleFont = null; protected JRFont legendFont = null; protected JRGroup evaluationGroup = null; protected JRFillChartDataset dataset = null; protected JRChartPlot plot = null; protected JRRenderable renderer = null; private String anchorName = null; private String hyperlinkReference = null; private String hyperlinkAnchor = null; private Integer hyperlinkPage = null; private String hyperlinkTooltip; private JRPrintHyperlinkParameters hyperlinkParameters; protected String customizerClass; protected JRChartCustomizer chartCustomizer; protected String renderType; protected JFreeChart chart; protected ChartHyperlinkProvider chartHyperlinkProvider; protected JRFillChart(JRBaseFiller filler, JRChart chart, JRFillObjectFactory factory) { super(filler, (JRElement)chart, factory); this.chartType = chart.getChartType(); switch (this.chartType) { case 1: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getAreaPlot((JRAreaPlot)chart.getPlot()); break; case 3: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getBarPlot((JRBarPlot)chart.getPlot()); break; case 2: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getBar3DPlot((JRBar3DPlot)chart.getPlot()); break; case 4: this.dataset = (JRFillChartDataset)factory.getXyzDataset((JRXyzDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getBubblePlot((JRBubblePlot)chart.getPlot()); break; case 5: this.dataset = (JRFillChartDataset)factory.getHighLowDataset((JRHighLowDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getCandlestickPlot((JRCandlestickPlot)chart.getPlot()); break; case 6: this.dataset = (JRFillChartDataset)factory.getHighLowDataset((JRHighLowDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getHighLowPlot((JRHighLowPlot)chart.getPlot()); break; case 7: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getLinePlot((JRLinePlot)chart.getPlot()); break; case 17: this.dataset = (JRFillChartDataset)factory.getValueDataset((JRValueDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getMeterPlot((JRMeterPlot)chart.getPlot()); break; case 19: this.plot = (JRChartPlot)factory.getMultiAxisPlot((JRMultiAxisPlot)chart.getPlot()); this.dataset = ((JRFillMultiAxisPlot)this.plot).getMainDataset(); break; case 9: this.dataset = (JRFillChartDataset)factory.getPieDataset((JRPieDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getPiePlot((JRPiePlot)chart.getPlot()); break; case 8: this.dataset = (JRFillChartDataset)factory.getPieDataset((JRPieDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getPie3DPlot((JRPie3DPlot)chart.getPlot()); break; case 10: this.dataset = (JRFillChartDataset)factory.getXyDataset((JRXyDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getScatterPlot((JRScatterPlot)chart.getPlot()); break; case 12: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getBarPlot((JRBarPlot)chart.getPlot()); break; case 11: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getBar3DPlot((JRBar3DPlot)chart.getPlot()); break; case 18: this.dataset = (JRFillChartDataset)factory.getValueDataset((JRValueDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getThermometerPlot((JRThermometerPlot)chart.getPlot()); break; case 16: this.dataset = (JRFillChartDataset)factory.getTimeSeriesDataset((JRTimeSeriesDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getTimeSeriesPlot((JRTimeSeriesPlot)chart.getPlot()); break; case 13: this.dataset = (JRFillChartDataset)factory.getXyDataset((JRXyDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getAreaPlot((JRAreaPlot)chart.getPlot()); break; case 14: switch (chart.getDataset().getDatasetType()) { case 6: this.dataset = (JRFillChartDataset)factory.getTimeSeriesDataset((JRTimeSeriesDataset)chart.getDataset()); break; case 5: this.dataset = (JRFillChartDataset)factory.getTimePeriodDataset((JRTimePeriodDataset)chart.getDataset()); break; case 3: this.dataset = (JRFillChartDataset)factory.getXyDataset((JRXyDataset)chart.getDataset()); break; } this.plot = (JRChartPlot)factory.getBarPlot((JRBarPlot)chart.getPlot()); break; case 15: this.dataset = (JRFillChartDataset)factory.getXyDataset((JRXyDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getLinePlot((JRLinePlot)chart.getPlot()); break; case 20: this.dataset = (JRFillChartDataset)factory.getCategoryDataset((JRCategoryDataset)chart.getDataset()); this.plot = (JRChartPlot)factory.getAreaPlot((JRAreaPlot)chart.getPlot()); break; default: throw new JRRuntimeException("Chart type not supported."); } this.titleFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)chart, chart.getTitleFont()); this.subtitleFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)chart, chart.getSubtitleFont()); this.legendFont = (JRFont)new JRBaseFont(null, null, (JRStyleContainer)chart, chart.getLegendFont()); this.evaluationGroup = factory.getGroup(chart.getEvaluationGroup()); this.customizerClass = chart.getCustomizerClass(); if (this.customizerClass != null && this.customizerClass.length() > 0) { try { Class myClass = JRClassLoader.loadClassForName(this.customizerClass); this.chartCustomizer = myClass.newInstance(); } catch (Exception e) { throw new JRRuntimeException("Could not create chart customizer instance.", e); } if (this.chartCustomizer instanceof JRAbstractChartCustomizer) ((JRAbstractChartCustomizer)this.chartCustomizer).init(filler, this); } this.renderType = chart.getRenderType(); if (this.renderType == null) this.renderType = JRProperties.getProperty(getParentProperties(), "net.sf.jasperreports.chart.render.type"); } public byte getMode() { return JRStyleResolver.getMode((JRCommonElement)this, (byte)2); } public boolean isShowLegend() { return ((JRChart)this.parent).isShowLegend(); } public void setShowLegend(boolean isShowLegend) {} public String getRenderType() { return this.renderType; } public void setRenderType(String renderType) {} public byte getEvaluationTime() { return ((JRChart)this.parent).getEvaluationTime(); } public JRGroup getEvaluationGroup() { return this.evaluationGroup; } public JRBox getBox() { return (JRBox)new LineBoxWrapper(getLineBox()); } public JRLineBox getLineBox() { return ((JRBoxContainer)this.parent).getLineBox(); } public byte getBorder() { return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getPen()); } public Byte getOwnBorder() { return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getPen()); } public void setBorder(byte border) { JRPenUtil.setLinePenFromPen(border, (JRPen)getLineBox().getPen()); } public void setBorder(Byte border) { JRPenUtil.setLinePenFromPen(border, (JRPen)getLineBox().getPen()); } public Color getBorderColor() { return getLineBox().getPen().getLineColor(); } public Color getOwnBorderColor() { return getLineBox().getPen().getOwnLineColor(); } public void setBorderColor(Color borderColor) { getLineBox().getPen().setLineColor(borderColor); } public int getPadding() { return getLineBox().getPadding().intValue(); } public Integer getOwnPadding() { return getLineBox().getOwnPadding(); } public void setPadding(int padding) { getLineBox().setPadding(padding); } public void setPadding(Integer padding) { getLineBox().setPadding(padding); } public byte getTopBorder() { return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getTopPen()); } public Byte getOwnTopBorder() { return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getTopPen()); } public void setTopBorder(byte topBorder) { JRPenUtil.setLinePenFromPen(topBorder, (JRPen)getLineBox().getTopPen()); } public void setTopBorder(Byte topBorder) { JRPenUtil.setLinePenFromPen(topBorder, (JRPen)getLineBox().getTopPen()); } public Color getTopBorderColor() { return getLineBox().getTopPen().getLineColor(); } public Color getOwnTopBorderColor() { return getLineBox().getTopPen().getOwnLineColor(); } public void setTopBorderColor(Color topBorderColor) { getLineBox().getTopPen().setLineColor(topBorderColor); } public int getTopPadding() { return getLineBox().getTopPadding().intValue(); } public Integer getOwnTopPadding() { return getLineBox().getOwnTopPadding(); } public void setTopPadding(int topPadding) { getLineBox().setTopPadding(topPadding); } public void setTopPadding(Integer topPadding) { getLineBox().setTopPadding(topPadding); } public byte getLeftBorder() { return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getLeftPen()); } public Byte getOwnLeftBorder() { return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getLeftPen()); } public void setLeftBorder(byte leftBorder) { JRPenUtil.setLinePenFromPen(leftBorder, (JRPen)getLineBox().getLeftPen()); } public void setLeftBorder(Byte leftBorder) { JRPenUtil.setLinePenFromPen(leftBorder, (JRPen)getLineBox().getLeftPen()); } public Color getLeftBorderColor() { return getLineBox().getLeftPen().getLineColor(); } public Color getOwnLeftBorderColor() { return getLineBox().getLeftPen().getOwnLineColor(); } public void setLeftBorderColor(Color leftBorderColor) { getLineBox().getLeftPen().setLineColor(leftBorderColor); } public int getLeftPadding() { return getLineBox().getLeftPadding().intValue(); } public Integer getOwnLeftPadding() { return getLineBox().getOwnLeftPadding(); } public void setLeftPadding(int leftPadding) { getLineBox().setLeftPadding(leftPadding); } public void setLeftPadding(Integer leftPadding) { getLineBox().setLeftPadding(leftPadding); } public byte getBottomBorder() { return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getBottomPen()); } public Byte getOwnBottomBorder() { return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getBottomPen()); } public void setBottomBorder(byte bottomBorder) { JRPenUtil.setLinePenFromPen(bottomBorder, (JRPen)getLineBox().getBottomPen()); } public void setBottomBorder(Byte bottomBorder) { JRPenUtil.setLinePenFromPen(bottomBorder, (JRPen)getLineBox().getBottomPen()); } public Color getBottomBorderColor() { return getLineBox().getBottomPen().getLineColor(); } public Color getOwnBottomBorderColor() { return getLineBox().getBottomPen().getOwnLineColor(); } public void setBottomBorderColor(Color bottomBorderColor) { getLineBox().getBottomPen().setLineColor(bottomBorderColor); } public int getBottomPadding() { return getLineBox().getBottomPadding().intValue(); } public Integer getOwnBottomPadding() { return getLineBox().getOwnBottomPadding(); } public void setBottomPadding(int bottomPadding) { getLineBox().setBottomPadding(bottomPadding); } public void setBottomPadding(Integer bottomPadding) { getLineBox().setBottomPadding(bottomPadding); } public byte getRightBorder() { return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getRightPen()); } public Byte getOwnRightBorder() { return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getRightPen()); } public void setRightBorder(byte rightBorder) { JRPenUtil.setLinePenFromPen(rightBorder, (JRPen)getLineBox().getRightPen()); } public void setRightBorder(Byte rightBorder) { JRPenUtil.setLinePenFromPen(rightBorder, (JRPen)getLineBox().getRightPen()); } public Color getRightBorderColor() { return getLineBox().getRightPen().getLineColor(); } public Color getOwnRightBorderColor() { return getLineBox().getRightPen().getOwnLineColor(); } public void setRightBorderColor(Color rightBorderColor) { getLineBox().getRightPen().setLineColor(rightBorderColor); } public int getRightPadding() { return getLineBox().getRightPadding().intValue(); } public Integer getOwnRightPadding() { return getLineBox().getOwnRightPadding(); } public void setRightPadding(int rightPadding) { getLineBox().setRightPadding(rightPadding); } public void setRightPadding(Integer rightPadding) { getLineBox().setRightPadding(rightPadding); } public JRFont getTitleFont() { return this.titleFont; } public byte getTitlePosition() { return ((JRChart)this.parent).getTitlePosition(); } public void setTitlePosition(byte titlePosition) {} public Color getTitleColor() { return JRStyleResolver.getTitleColor(this); } public Color getOwnTitleColor() { return ((JRChart)this.parent).getOwnTitleColor(); } public void setTitleColor(Color titleColor) {} public JRFont getSubtitleFont() { return this.subtitleFont; } public Color getOwnSubtitleColor() { return ((JRChart)this.parent).getOwnSubtitleColor(); } public Color getSubtitleColor() { return JRStyleResolver.getSubtitleColor(this); } public void setSubtitleColor(Color subtitleColor) {} public Color getOwnLegendColor() { return ((JRChart)this.parent).getOwnLegendColor(); } public Color getLegendColor() { return JRStyleResolver.getLegendColor(this); } public void setLegendColor(Color legendColor) {} public Color getOwnLegendBackgroundColor() { return ((JRChart)this.parent).getOwnLegendBackgroundColor(); } public Color getLegendBackgroundColor() { return JRStyleResolver.getLegendBackgroundColor(this); } public void setLegendBackgroundColor(Color legendBackgroundColor) {} public JRFont getLegendFont() { return this.legendFont; } public byte getLegendPosition() { return ((JRChart)this.parent).getLegendPosition(); } public void setLegendPosition(byte legendPosition) {} public JRExpression getTitleExpression() { return ((JRChart)this.parent).getTitleExpression(); } public JRExpression getSubtitleExpression() { return ((JRChart)this.parent).getSubtitleExpression(); } public byte getHyperlinkType() { return ((JRChart)this.parent).getHyperlinkType(); } public byte getHyperlinkTarget() { return ((JRChart)this.parent).getHyperlinkTarget(); } public JRExpression getAnchorNameExpression() { return ((JRChart)this.parent).getAnchorNameExpression(); } public JRExpression getHyperlinkReferenceExpression() { return ((JRChart)this.parent).getHyperlinkReferenceExpression(); } public JRExpression getHyperlinkAnchorExpression() { return ((JRChart)this.parent).getHyperlinkAnchorExpression(); } public JRExpression getHyperlinkPageExpression() { return ((JRChart)this.parent).getHyperlinkPageExpression(); } public JRChartDataset getDataset() { return this.dataset; } public void setDataset(JRFillChartDataset dataset) { this.dataset = dataset; } public JRChartPlot getPlot() { return this.plot; } protected JRRenderable getRenderer() { return this.renderer; } protected String getAnchorName() { return this.anchorName; } protected String getHyperlinkReference() { return this.hyperlinkReference; } protected String getHyperlinkAnchor() { return this.hyperlinkAnchor; } protected Integer getHyperlinkPage() { return this.hyperlinkPage; } protected String getHyperlinkTooltip() { return this.hyperlinkTooltip; } public Color getDefaultLineColor() { return getForecolor(); } protected JRTemplateImage getJRTemplateImage() { JRStyle style = getStyle(); JRTemplateImage template = (JRTemplateImage)getTemplate(style); if (template == null) { template = new JRTemplateImage(this.band.getOrigin(), this.filler.getJasperPrint().getDefaultStyleProvider(), this); transferProperties(template); registerTemplate(style, template); } return template; } protected void rewind() {} protected void evaluate(byte evaluation) throws JRException { reset(); evaluatePrintWhenExpression(evaluation); if (isPrintWhenExpressionNull() || (!isPrintWhenExpressionNull() && isPrintWhenTrue())) if (getEvaluationTime() == 1) evaluateRenderer(evaluation); } protected void evaluateRenderer(byte evaluation) throws JRException { evaluateChart(evaluation); Rectangle2D rectangle = new Rectangle2D.Double(0.0D, 0.0D, getWidth(), getHeight()); this.renderer = getChartRendererFactory(getRenderType()).getRenderer(this.chart, this.chartHyperlinkProvider, rectangle); } protected static ChartRendererFactory getChartRendererFactory(String renderType) { ChartRendererFactory chartRendererFactory = null; String factoryClass = JRProperties.getProperty("net.sf.jasperreports.chart.renderer.factory." + renderType); if (factoryClass == null) throw new JRRuntimeException("No chart renderer factory specifyed for '" + renderType + "' render type."); try { chartRendererFactory = (ChartRendererFactory)chartRendererFactoryCache.getCachedInstance(factoryClass); } catch (JRException e) { throw new JRRuntimeException(e); } return chartRendererFactory; } protected JFreeChart evaluateChart(byte evaluation) throws JRException { evaluateProperties(evaluation); evaluateDatasetRun(evaluation); switch (this.chartType) { case 1: evaluateAreaChart(evaluation); break; case 3: evaluateBarChart(evaluation); break; case 2: evaluateBar3DChart(evaluation); break; case 4: evaluateBubbleChart(evaluation); break; case 5: evaluateCandlestickChart(evaluation); break; case 6: evaluateHighLowChart(evaluation); break; case 7: evaluateLineChart(evaluation); break; case 17: evaluateMeterChart(evaluation); break; case 19: evaluateMultiAxisChart(evaluation); break; case 9: evaluatePieChart(evaluation); break; case 8: evaluatePie3DChart(evaluation); break; case 10: evaluateScatterChart(evaluation); break; case 12: evaluateStackedBarChart(evaluation); break; case 11: evaluateStackedBar3DChart(evaluation); break; case 18: evaluateThermometerChart(evaluation); break; case 16: evaluateTimeSeriesChart(evaluation); break; case 13: evaluateXyAreaChart(evaluation); break; case 14: evaluateXYBarChart(evaluation); break; case 15: evaluateXyLineChart(evaluation); break; case 20: evaluateStackedAreaChart(evaluation); break; default: throw new JRRuntimeException("Chart type " + getChartType() + " not supported."); } if (this.chartCustomizer != null) this.chartCustomizer.customize(this.chart, this); this.anchorName = (String)evaluateExpression(getAnchorNameExpression(), evaluation); this.hyperlinkReference = (String)evaluateExpression(getHyperlinkReferenceExpression(), evaluation); this.hyperlinkAnchor = (String)evaluateExpression(getHyperlinkAnchorExpression(), evaluation); this.hyperlinkPage = (Integer)evaluateExpression(getHyperlinkPageExpression(), evaluation); this.hyperlinkTooltip = (String)evaluateExpression(getHyperlinkTooltipExpression(), evaluation); this.hyperlinkParameters = JRFillHyperlinkHelper.evaluateHyperlinkParameters((JRHyperlink)this, this.expressionEvaluator, evaluation); return this.chart; } protected boolean prepare(int availableStretchHeight, boolean isOverflow) { boolean willOverflow = false; if (isPrintWhenExpressionNull() || (!isPrintWhenExpressionNull() && isPrintWhenTrue())) { setToPrint(true); } else { setToPrint(false); } if (!isToPrint()) return willOverflow; boolean isToPrint = true; boolean isReprinted = false; if (getEvaluationTime() == 1) { if (isOverflow && isAlreadyPrinted() && !isPrintWhenDetailOverflows()) isToPrint = false; if (isToPrint && availableStretchHeight < getRelativeY() - getY() - getBandBottomY()) { isToPrint = false; willOverflow = true; } if (isToPrint && isOverflow && isPrintWhenDetailOverflows() && (isAlreadyPrinted() || (!isAlreadyPrinted() && !isPrintRepeatedValues()))) isReprinted = true; if (isToPrint && isRemoveLineWhenBlank() && getRenderer() == null) isToPrint = false; } else { if (isOverflow && isAlreadyPrinted() && !isPrintWhenDetailOverflows()) isToPrint = false; if (isToPrint && availableStretchHeight < getRelativeY() - getY() - getBandBottomY()) { isToPrint = false; willOverflow = true; } if (isToPrint && isOverflow && isPrintWhenDetailOverflows() && (isAlreadyPrinted() || (!isAlreadyPrinted() && !isPrintRepeatedValues()))) isReprinted = true; } setToPrint(isToPrint); setReprinted(isReprinted); return willOverflow; } protected JRPrintElement fill() { JRTemplatePrintImage printImage = new JRTemplatePrintImage(getJRTemplateImage()); printImage.setX(getX()); printImage.setY(getRelativeY()); printImage.setWidth(getWidth()); printImage.setHeight(getStretchHeight()); byte evaluationType = getEvaluationTime(); if (evaluationType == 1) { copy(printImage); } else { this.filler.addBoundElement(this, printImage, evaluationType, getEvaluationGroup(), this.band); } return printImage; } protected void copy(JRPrintImage printImage) { printImage.setRenderer(getRenderer()); printImage.setAnchorName(getAnchorName()); printImage.setHyperlinkReference(getHyperlinkReference()); printImage.setHyperlinkAnchor(getHyperlinkAnchor()); printImage.setHyperlinkPage(getHyperlinkPage()); printImage.setHyperlinkTooltip(getHyperlinkTooltip()); printImage.setBookmarkLevel(getBookmarkLevel()); printImage.setHyperlinkParameters(this.hyperlinkParameters); transferProperties((JRPrintElement)printImage); } public byte getChartType() { return this.chartType; } public void collectExpressions(JRExpressionCollector collector) { collector.collect(this); } public void visit(JRVisitor visitor) { visitor.visitChart(this); } private void configureChart(JRChartPlot jrPlot, byte evaluation) throws JRException { if (getMode() == 1) { this.chart.setBackgroundPaint(getBackcolor()); } else { this.chart.setBackgroundPaint(TRANSPARENT_PAINT); } RectangleEdge titleEdge = getEdge(getTitlePosition()); if (this.chart.getTitle() != null) { TextTitle title = this.chart.getTitle(); title.setPaint(getTitleColor()); title.setFont(new Font(JRFontUtil.getAttributes(getTitleFont()))); title.setPosition(titleEdge); } String subtitleText = (String)evaluateExpression(getSubtitleExpression(), evaluation); if (subtitleText != null) { TextTitle subtitle = new TextTitle(subtitleText); subtitle.setPaint(getSubtitleColor()); subtitle.setFont(new Font(JRFontUtil.getAttributes(getSubtitleFont()))); subtitle.setPosition(titleEdge); this.chart.addSubtitle((Title)subtitle); } LegendTitle legend = this.chart.getLegend(); if (legend != null) { legend.setItemPaint(getLegendColor()); if (getOwnLegendBackgroundColor() == null) { legend.setBackgroundPaint(TRANSPARENT_PAINT); } else { legend.setBackgroundPaint(getLegendBackgroundColor()); } this.chart.getLegend().setItemFont(new Font(JRFontUtil.getAttributes(getLegendFont()))); this.chart.getLegend().setPosition(getEdge(getLegendPosition())); } configurePlot(this.chart.getPlot(), jrPlot); } private void configurePlot(Plot p, JRChartPlot jrPlot) { p.setOutlinePaint(TRANSPARENT_PAINT); if (getPlot().getOwnBackcolor() == null) { p.setBackgroundPaint(TRANSPARENT_PAINT); } else { p.setBackgroundPaint(getPlot().getBackcolor()); } p.setBackgroundAlpha(getPlot().getBackgroundAlpha()); p.setForegroundAlpha(getPlot().getForegroundAlpha()); SortedSet seriesColors = getPlot().getSeriesColors(); if (p instanceof CategoryPlot) { CategoryAxis axis = ((CategoryPlot)p).getDomainAxis(); double labelRotation = getPlot().getLabelRotation(); if (labelRotation == 90.0D) { axis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_90); } else if (labelRotation == -90.0D) { axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90); } else if (labelRotation < 0.0D) { axis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(-labelRotation / 180.0D * Math.PI)); } else if (labelRotation > 0.0D) { axis.setCategoryLabelPositions(CategoryLabelPositions.createDownRotationLabelPositions(labelRotation / 180.0D * Math.PI)); } } if (seriesColors != null) if (seriesColors.size() == 1) { Paint[] colors = new Paint[DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE.length + 1]; colors[0] = ((JRChartPlot.JRSeriesColor)seriesColors.first()).getColor(); for (int i = 0; i < DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE.length; i++) colors[i + 1] = DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE[i]; p.setDrawingSupplier((DrawingSupplier)new DefaultDrawingSupplier(colors, DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE)); } else if (seriesColors.size() > 1) { Color[] colors = new Color[seriesColors.size()]; JRChartPlot.JRSeriesColor[] colorSequence = new JRChartPlot.JRSeriesColor[seriesColors.size()]; seriesColors.toArray((Object[])colorSequence); for (int i = 0; i < colorSequence.length; i++) colors[i] = colorSequence[i].getColor(); p.setDrawingSupplier((DrawingSupplier)new DefaultDrawingSupplier((Paint[])colors, DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE)); } } private void configureAxisSeriesColors(CategoryItemRenderer renderer, JRChartPlot jrPlot) { SortedSet seriesColors = jrPlot.getSeriesColors(); if (seriesColors != null) { Iterator iter = seriesColors.iterator(); while (iter.hasNext()) { JRChartPlot.JRSeriesColor seriesColor = iter.next(); renderer.setSeriesPaint(seriesColor.getSeriesOrder(), seriesColor.getColor()); } } } private void configureAxisSeriesColors(XYItemRenderer renderer, JRChartPlot jrPlot) { SortedSet seriesColors = jrPlot.getSeriesColors(); if (seriesColors != null) { Iterator iter = seriesColors.iterator(); while (iter.hasNext()) { JRChartPlot.JRSeriesColor seriesColor = iter.next(); renderer.setSeriesPaint(seriesColor.getSeriesOrder(), seriesColor.getColor()); } } } private void configureAxis(Axis axis, JRFont labelFont, Color labelColor, JRFont tickLabelFont, Color tickLabelColor, String tickLabelMask, Color lineColor) { axis.setLabelFont(new Font(JRFontUtil.getAttributes(labelFont))); axis.setTickLabelFont(new Font(JRFontUtil.getAttributes(tickLabelFont))); if (labelColor != null) axis.setLabelPaint(labelColor); if (tickLabelColor != null) axis.setTickLabelPaint(tickLabelColor); if (lineColor != null) { axis.setAxisLinePaint(lineColor); axis.setTickMarkPaint(lineColor); } if (tickLabelMask != null) if (axis instanceof NumberAxis) { NumberFormat fmt = NumberFormat.getInstance(); if (fmt instanceof DecimalFormat) ((DecimalFormat)fmt).applyPattern(tickLabelMask); ((NumberAxis)axis).setNumberFormatOverride(fmt); } else if (axis instanceof DateAxis) { DateFormat fmt = null; if (tickLabelMask.equals("SHORT") || tickLabelMask.equals("DateFormat.SHORT")) { fmt = DateFormat.getDateInstance(3); } else if (tickLabelMask.equals("MEDIUM") || tickLabelMask.equals("DateFormat.MEDIUM")) { fmt = DateFormat.getDateInstance(2); } else if (tickLabelMask.equals("LONG") || tickLabelMask.equals("DateFormat.LONG")) { fmt = DateFormat.getDateInstance(1); } else if (tickLabelMask.equals("FULL") || tickLabelMask.equals("DateFormat.FULL")) { fmt = DateFormat.getDateInstance(0); } else { fmt = new SimpleDateFormat(tickLabelMask); } ((DateAxis)axis).setDateFormatOverride(fmt); } } protected void evaluateAreaChart(byte evaluation) throws JRException { this.chart = ChartFactory.createAreaChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); JRFillAreaPlot areaPlot = (JRFillAreaPlot)getPlot(); configureAxis((Axis)((CategoryPlot)this.chart.getPlot()).getDomainAxis(), areaPlot.getCategoryAxisLabelFont(), areaPlot.getCategoryAxisLabelColor(), areaPlot.getCategoryAxisTickLabelFont(), areaPlot.getCategoryAxisTickLabelColor(), areaPlot.getCategoryAxisTickLabelMask(), areaPlot.getCategoryAxisLineColor()); configureAxis((Axis)((CategoryPlot)this.chart.getPlot()).getRangeAxis(), areaPlot.getValueAxisLabelFont(), areaPlot.getValueAxisLabelColor(), areaPlot.getValueAxisTickLabelFont(), areaPlot.getValueAxisTickLabelColor(), areaPlot.getCategoryAxisTickLabelMask(), areaPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateBar3DChart(byte evaluation) throws JRException { this.chart = ChartFactory.createBarChart3D((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBar3DPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRBar3DPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); CategoryPlot categoryPlot = (CategoryPlot)this.chart.getPlot(); JRFillBar3DPlot bar3DPlot = (JRFillBar3DPlot)getPlot(); BarRenderer3D barRenderer3D = new BarRenderer3D(bar3DPlot.getXOffset(), bar3DPlot.getYOffset()); categoryPlot.setRenderer((CategoryItemRenderer)barRenderer3D); barRenderer3D.setBaseItemLabelGenerator((CategoryItemLabelGenerator)((JRFillCategoryDataset)getDataset()).getLabelGenerator()); barRenderer3D.setItemLabelsVisible(bar3DPlot.isShowLabels()); configureAxis((Axis)categoryPlot.getDomainAxis(), bar3DPlot.getCategoryAxisLabelFont(), bar3DPlot.getCategoryAxisLabelColor(), bar3DPlot.getCategoryAxisTickLabelFont(), bar3DPlot.getCategoryAxisTickLabelColor(), bar3DPlot.getCategoryAxisTickLabelMask(), bar3DPlot.getCategoryAxisLineColor()); configureAxis((Axis)categoryPlot.getRangeAxis(), bar3DPlot.getValueAxisLabelFont(), bar3DPlot.getValueAxisLabelColor(), bar3DPlot.getValueAxisTickLabelFont(), bar3DPlot.getValueAxisTickLabelColor(), bar3DPlot.getValueAxisTickLabelMask(), bar3DPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateBarChart(byte evaluation) throws JRException { CategoryDataset categoryDataset = (CategoryDataset)this.dataset.getDataset(); this.chart = ChartFactory.createBarChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBarPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRBarPlot)getPlot()).getValueAxisLabelExpression(), evaluation), categoryDataset, getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); CategoryPlot categoryPlot = (CategoryPlot)this.chart.getPlot(); JRFillBarPlot barPlot = (JRFillBarPlot)getPlot(); categoryPlot.getDomainAxis().setTickMarksVisible(barPlot.isShowTickMarks()); categoryPlot.getDomainAxis().setTickLabelsVisible(barPlot.isShowTickLabels()); configureAxis((Axis)categoryPlot.getDomainAxis(), barPlot.getCategoryAxisLabelFont(), barPlot.getCategoryAxisLabelColor(), barPlot.getCategoryAxisTickLabelFont(), barPlot.getCategoryAxisTickLabelColor(), barPlot.getCategoryAxisTickLabelMask(), barPlot.getCategoryAxisLineColor()); ((NumberAxis)categoryPlot.getRangeAxis()).setTickMarksVisible(barPlot.isShowTickMarks()); ((NumberAxis)categoryPlot.getRangeAxis()).setTickLabelsVisible(barPlot.isShowTickLabels()); configureAxis((Axis)categoryPlot.getRangeAxis(), barPlot.getValueAxisLabelFont(), barPlot.getValueAxisLabelColor(), barPlot.getValueAxisTickLabelFont(), barPlot.getValueAxisTickLabelColor(), barPlot.getValueAxisTickLabelMask(), barPlot.getValueAxisLineColor()); CategoryItemRenderer categoryRenderer = categoryPlot.getRenderer(); categoryRenderer.setBaseItemLabelGenerator((CategoryItemLabelGenerator)((JRFillCategoryDataset)getDataset()).getLabelGenerator()); categoryRenderer.setItemLabelsVisible(barPlot.isShowLabels()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateBubbleChart(byte evaluation) throws JRException { this.chart = ChartFactory.createBubbleChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBubblePlot)getPlot()).getXAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRBubblePlot)getPlot()).getYAxisLabelExpression(), evaluation), (XYZDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); XYPlot xyPlot = (XYPlot)this.chart.getPlot(); JRBubblePlot bubblePlot = (JRBubblePlot)getPlot(); XYBubbleRenderer bubbleRenderer = new XYBubbleRenderer(bubblePlot.getScaleType()); xyPlot.setRenderer((XYItemRenderer)bubbleRenderer); configureAxis((Axis)xyPlot.getDomainAxis(), bubblePlot.getXAxisLabelFont(), bubblePlot.getXAxisLabelColor(), bubblePlot.getXAxisTickLabelFont(), bubblePlot.getXAxisTickLabelColor(), bubblePlot.getXAxisTickLabelMask(), bubblePlot.getXAxisLineColor()); configureAxis((Axis)xyPlot.getRangeAxis(), bubblePlot.getYAxisLabelFont(), bubblePlot.getYAxisLabelColor(), bubblePlot.getYAxisTickLabelFont(), bubblePlot.getYAxisTickLabelColor(), bubblePlot.getYAxisTickLabelMask(), bubblePlot.getYAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new XYChartHyperlinkProvider(((JRFillXyzDataset)getDataset()).getItemHyperlinks()); } protected void evaluateCandlestickChart(byte evaluation) throws JRException { this.chart = ChartFactory.createCandlestickChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRCandlestickPlot)getPlot()).getTimeAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRCandlestickPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (OHLCDataset)this.dataset.getDataset(), isShowLegend()); configureChart(getPlot(), evaluation); XYPlot xyPlot = (XYPlot)this.chart.getPlot(); JRCandlestickPlot candlestickPlot = (JRCandlestickPlot)getPlot(); CandlestickRenderer candlestickRenderer = (CandlestickRenderer)xyPlot.getRenderer(); candlestickRenderer.setDrawVolume(candlestickPlot.isShowVolume()); configureAxis((Axis)xyPlot.getDomainAxis(), candlestickPlot.getTimeAxisLabelFont(), candlestickPlot.getTimeAxisLabelColor(), candlestickPlot.getTimeAxisTickLabelFont(), candlestickPlot.getTimeAxisTickLabelColor(), candlestickPlot.getTimeAxisTickLabelMask(), candlestickPlot.getTimeAxisLineColor()); configureAxis((Axis)xyPlot.getRangeAxis(), candlestickPlot.getValueAxisLabelFont(), candlestickPlot.getValueAxisLabelColor(), candlestickPlot.getValueAxisTickLabelFont(), candlestickPlot.getValueAxisTickLabelColor(), candlestickPlot.getValueAxisTickLabelMask(), candlestickPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new HighLowChartHyperlinkProvider(((JRFillHighLowDataset)getDataset()).getItemHyperlinks()); } protected void evaluateHighLowChart(byte evaluation) throws JRException { this.chart = ChartFactory.createHighLowChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRHighLowPlot)getPlot()).getTimeAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRHighLowPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (OHLCDataset)this.dataset.getDataset(), isShowLegend()); configureChart(getPlot(), evaluation); XYPlot xyPlot = (XYPlot)this.chart.getPlot(); JRHighLowPlot highLowPlot = (JRHighLowPlot)getPlot(); HighLowRenderer hlRenderer = (HighLowRenderer)xyPlot.getRenderer(); hlRenderer.setDrawOpenTicks(highLowPlot.isShowOpenTicks()); hlRenderer.setDrawCloseTicks(highLowPlot.isShowCloseTicks()); configureAxis((Axis)xyPlot.getDomainAxis(), highLowPlot.getTimeAxisLabelFont(), highLowPlot.getTimeAxisLabelColor(), highLowPlot.getTimeAxisTickLabelFont(), highLowPlot.getTimeAxisTickLabelColor(), highLowPlot.getTimeAxisTickLabelMask(), highLowPlot.getTimeAxisLineColor()); configureAxis((Axis)xyPlot.getRangeAxis(), highLowPlot.getValueAxisLabelFont(), highLowPlot.getValueAxisLabelColor(), highLowPlot.getValueAxisTickLabelFont(), highLowPlot.getValueAxisTickLabelColor(), highLowPlot.getValueAxisTickLabelMask(), highLowPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new HighLowChartHyperlinkProvider(((JRFillHighLowDataset)getDataset()).getItemHyperlinks()); } protected void evaluateLineChart(byte evaluation) throws JRException { this.chart = ChartFactory.createLineChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRLinePlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRLinePlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); CategoryPlot categoryPlot = (CategoryPlot)this.chart.getPlot(); JRFillLinePlot linePlot = (JRFillLinePlot)getPlot(); LineAndShapeRenderer lineRenderer = (LineAndShapeRenderer)categoryPlot.getRenderer(); lineRenderer.setShapesVisible(linePlot.isShowShapes()); lineRenderer.setLinesVisible(linePlot.isShowLines()); configureAxis((Axis)categoryPlot.getDomainAxis(), linePlot.getCategoryAxisLabelFont(), linePlot.getCategoryAxisLabelColor(), linePlot.getCategoryAxisTickLabelFont(), linePlot.getCategoryAxisTickLabelColor(), linePlot.getCategoryAxisTickLabelMask(), linePlot.getCategoryAxisLineColor()); configureAxis((Axis)categoryPlot.getRangeAxis(), linePlot.getValueAxisLabelFont(), linePlot.getValueAxisLabelColor(), linePlot.getValueAxisTickLabelFont(), linePlot.getValueAxisTickLabelColor(), linePlot.getValueAxisTickLabelMask(), linePlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluatePie3DChart(byte evaluation) throws JRException { this.chart = ChartFactory.createPieChart3D((String)evaluateExpression(getTitleExpression(), evaluation), (PieDataset)this.dataset.getDataset(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); PiePlot3D piePlot3D = (PiePlot3D)this.chart.getPlot(); piePlot3D.setDepthFactor(((JRFillPie3DPlot)getPlot()).getDepthFactor()); piePlot3D.setCircular(((JRFillPie3DPlot)getPlot()).isCircular()); PieLabelGenerator pieLabelGenerator = ((JRFillPieDataset)getDataset()).getLabelGenerator(); if (pieLabelGenerator != null) piePlot3D.setLabelGenerator((PieSectionLabelGenerator)pieLabelGenerator); piePlot3D.setLabelFont(new Font(JRFontUtil.getAttributes((JRFont)new JRBaseFont(null, null, (JRStyleContainer)this, null)))); piePlot3D.setLabelPaint(getForecolor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new PieChartHyperlinkProvider(((JRFillPieDataset)getDataset()).getSectionHyperlinks()); } protected void evaluatePieChart(byte evaluation) throws JRException { this.chart = ChartFactory.createPieChart((String)evaluateExpression(getTitleExpression(), evaluation), (PieDataset)this.dataset.getDataset(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); PiePlot piePlot = (PiePlot)this.chart.getPlot(); piePlot.setCircular(((JRFillPiePlot)getPlot()).isCircular()); PieLabelGenerator pieLabelGenerator = ((JRFillPieDataset)getDataset()).getLabelGenerator(); if (pieLabelGenerator != null) piePlot.setLabelGenerator((PieSectionLabelGenerator)pieLabelGenerator); piePlot.setLabelFont(new Font(JRFontUtil.getAttributes((JRFont)new JRBaseFont(null, null, (JRStyleContainer)this, null)))); piePlot.setLabelPaint(getForecolor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new PieChartHyperlinkProvider(((JRFillPieDataset)getDataset()).getSectionHyperlinks()); } protected void evaluateScatterChart(byte evaluation) throws JRException { this.chart = ChartFactory.createScatterPlot((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRScatterPlot)getPlot()).getXAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRScatterPlot)getPlot()).getYAxisLabelExpression(), evaluation), (XYDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); XYLineAndShapeRenderer plotRenderer = (XYLineAndShapeRenderer)((XYPlot)this.chart.getPlot()).getRenderer(); JRScatterPlot scatterPlot = (JRScatterPlot)getPlot(); plotRenderer.setLinesVisible(scatterPlot.isShowLines()); plotRenderer.setShapesVisible(scatterPlot.isShowShapes()); configureAxis((Axis)this.chart.getXYPlot().getDomainAxis(), scatterPlot.getXAxisLabelFont(), scatterPlot.getXAxisLabelColor(), scatterPlot.getXAxisTickLabelFont(), scatterPlot.getXAxisTickLabelColor(), scatterPlot.getXAxisTickLabelMask(), scatterPlot.getXAxisLineColor()); configureAxis((Axis)this.chart.getXYPlot().getRangeAxis(), scatterPlot.getYAxisLabelFont(), scatterPlot.getYAxisLabelColor(), scatterPlot.getYAxisTickLabelFont(), scatterPlot.getYAxisTickLabelColor(), scatterPlot.getYAxisTickLabelMask(), scatterPlot.getYAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new XYChartHyperlinkProvider(((JRFillXyDataset)getDataset()).getItemHyperlinks()); } protected void evaluateStackedBar3DChart(byte evaluation) throws JRException { this.chart = ChartFactory.createStackedBarChart3D((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBar3DPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRBar3DPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); CategoryPlot categoryPlot = (CategoryPlot)this.chart.getPlot(); JRFillBar3DPlot bar3DPlot = (JRFillBar3DPlot)getPlot(); StackedBarRenderer3D stackedBarRenderer3D = new StackedBarRenderer3D(bar3DPlot.getXOffset(), bar3DPlot.getYOffset()); categoryPlot.setRenderer((CategoryItemRenderer)stackedBarRenderer3D); stackedBarRenderer3D.setBaseItemLabelGenerator((CategoryItemLabelGenerator)((JRFillCategoryDataset)getDataset()).getLabelGenerator()); stackedBarRenderer3D.setItemLabelsVisible(bar3DPlot.isShowLabels()); configureAxis((Axis)categoryPlot.getDomainAxis(), bar3DPlot.getCategoryAxisLabelFont(), bar3DPlot.getCategoryAxisLabelColor(), bar3DPlot.getCategoryAxisTickLabelFont(), bar3DPlot.getCategoryAxisTickLabelColor(), bar3DPlot.getCategoryAxisTickLabelMask(), bar3DPlot.getCategoryAxisLineColor()); configureAxis((Axis)categoryPlot.getRangeAxis(), bar3DPlot.getValueAxisLabelFont(), bar3DPlot.getValueAxisLabelColor(), bar3DPlot.getValueAxisTickLabelFont(), bar3DPlot.getValueAxisTickLabelColor(), bar3DPlot.getValueAxisTickLabelMask(), bar3DPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateStackedBarChart(byte evaluation) throws JRException { this.chart = ChartFactory.createStackedBarChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBarPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRBarPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); CategoryPlot categoryPlot = (CategoryPlot)this.chart.getPlot(); JRFillBarPlot barPlot = (JRFillBarPlot)getPlot(); categoryPlot.getDomainAxis().setTickMarksVisible(barPlot.isShowTickMarks()); categoryPlot.getDomainAxis().setTickLabelsVisible(barPlot.isShowTickLabels()); ((NumberAxis)categoryPlot.getRangeAxis()).setTickMarksVisible(barPlot.isShowTickMarks()); ((NumberAxis)categoryPlot.getRangeAxis()).setTickLabelsVisible(barPlot.isShowTickLabels()); CategoryItemRenderer categoryRenderer = categoryPlot.getRenderer(); categoryRenderer.setBaseItemLabelGenerator((CategoryItemLabelGenerator)((JRFillCategoryDataset)getDataset()).getLabelGenerator()); categoryRenderer.setItemLabelsVisible(((JRFillBarPlot)getPlot()).isShowLabels()); configureAxis((Axis)categoryPlot.getDomainAxis(), barPlot.getCategoryAxisLabelFont(), barPlot.getCategoryAxisLabelColor(), barPlot.getCategoryAxisTickLabelFont(), barPlot.getCategoryAxisTickLabelColor(), barPlot.getCategoryAxisTickLabelMask(), barPlot.getCategoryAxisLineColor()); configureAxis((Axis)categoryPlot.getRangeAxis(), barPlot.getValueAxisLabelFont(), barPlot.getValueAxisLabelColor(), barPlot.getValueAxisTickLabelFont(), barPlot.getValueAxisTickLabelColor(), barPlot.getValueAxisTickLabelMask(), barPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateStackedAreaChart(byte evaluation) throws JRException { this.chart = ChartFactory.createStackedAreaChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (CategoryDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); JRFillAreaPlot areaPlot = (JRFillAreaPlot)getPlot(); configureAxis((Axis)((CategoryPlot)this.chart.getPlot()).getDomainAxis(), areaPlot.getCategoryAxisLabelFont(), areaPlot.getCategoryAxisLabelColor(), areaPlot.getCategoryAxisTickLabelFont(), areaPlot.getCategoryAxisTickLabelColor(), areaPlot.getCategoryAxisTickLabelMask(), areaPlot.getCategoryAxisLineColor()); configureAxis((Axis)((CategoryPlot)this.chart.getPlot()).getRangeAxis(), areaPlot.getValueAxisLabelFont(), areaPlot.getValueAxisLabelColor(), areaPlot.getValueAxisTickLabelFont(), areaPlot.getValueAxisTickLabelColor(), areaPlot.getCategoryAxisTickLabelMask(), areaPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new CategoryChartHyperlinkProvider(((JRFillCategoryDataset)getDataset()).getItemHyperlinks()); } protected void evaluateXyAreaChart(byte evaluation) throws JRException { this.chart = ChartFactory.createXYAreaChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(((JRAreaPlot)getPlot()).getValueAxisLabelExpression(), evaluation), (XYDataset)this.dataset.getDataset(), getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); JRAreaPlot areaPlot = (JRAreaPlot)getPlot(); configureAxis((Axis)this.chart.getXYPlot().getDomainAxis(), areaPlot.getCategoryAxisLabelFont(), areaPlot.getCategoryAxisLabelColor(), areaPlot.getCategoryAxisTickLabelFont(), areaPlot.getCategoryAxisTickLabelColor(), areaPlot.getCategoryAxisTickLabelMask(), areaPlot.getCategoryAxisLineColor()); configureAxis((Axis)this.chart.getXYPlot().getRangeAxis(), areaPlot.getValueAxisLabelFont(), areaPlot.getValueAxisLabelColor(), areaPlot.getValueAxisTickLabelFont(), areaPlot.getValueAxisTickLabelColor(), areaPlot.getValueAxisTickLabelMask(), areaPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new XYChartHyperlinkProvider(((JRFillXyDataset)getDataset()).getItemHyperlinks()); } protected void evaluateXYBarChart(byte evaluation) throws JRException { IntervalXYDataset tmpDataset = (IntervalXYDataset)this.dataset.getDataset(); boolean isDate = true; if (this.dataset.getDatasetType() == 3) isDate = false; this.chart = ChartFactory.createXYBarChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(((JRBarPlot)getPlot()).getCategoryAxisLabelExpression(), evaluation), isDate, (String)evaluateExpression(((JRBarPlot)getPlot()).getValueAxisLabelExpression(), evaluation), tmpDataset, getPlot().getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); XYPlot xyPlot = (XYPlot)this.chart.getPlot(); XYItemRenderer itemRenderer = xyPlot.getRenderer(); if (getDataset().getDatasetType() == 6) { itemRenderer.setBaseItemLabelGenerator((XYItemLabelGenerator)((JRFillTimeSeriesDataset)getDataset()).getLabelGenerator()); } else if (getDataset().getDatasetType() == 5) { itemRenderer.setBaseItemLabelGenerator((XYItemLabelGenerator)((JRFillTimePeriodDataset)getDataset()).getLabelGenerator()); } else if (getDataset().getDatasetType() == 3) { itemRenderer.setBaseItemLabelGenerator((XYItemLabelGenerator)((JRFillXyDataset)getDataset()).getLabelGenerator()); } JRFillBarPlot barPlot = (JRFillBarPlot)getPlot(); itemRenderer.setBaseItemLabelsVisible(barPlot.isShowLabels()); configureAxis((Axis)xyPlot.getDomainAxis(), barPlot.getCategoryAxisLabelFont(), barPlot.getCategoryAxisLabelColor(), barPlot.getCategoryAxisTickLabelFont(), barPlot.getCategoryAxisTickLabelColor(), barPlot.getCategoryAxisTickLabelMask(), barPlot.getCategoryAxisLineColor()); configureAxis((Axis)xyPlot.getRangeAxis(), barPlot.getValueAxisLabelFont(), barPlot.getValueAxisLabelColor(), barPlot.getValueAxisTickLabelFont(), barPlot.getValueAxisTickLabelColor(), barPlot.getValueAxisTickLabelMask(), barPlot.getValueAxisLineColor()); if (getDataset().getDatasetType() == 6) { this.chartHyperlinkProvider = (ChartHyperlinkProvider)new TimeSeriesChartHyperlinkProvider(((JRFillTimeSeriesDataset)getDataset()).getItemHyperlinks()); } else if (getDataset().getDatasetType() == 5) { this.chartHyperlinkProvider = (ChartHyperlinkProvider)new TimePeriodChartHyperlinkProvider(((JRFillTimePeriodDataset)getDataset()).getItemHyperlinks()); } else if (getDataset().getDatasetType() == 3) { this.chartHyperlinkProvider = (ChartHyperlinkProvider)new XYChartHyperlinkProvider(((JRFillXyDataset)getDataset()).getItemHyperlinks()); } else { this.chartHyperlinkProvider = null; } } protected void evaluateXyLineChart(byte evaluation) throws JRException { JRLinePlot linePlot = (JRLinePlot)getPlot(); this.chart = ChartFactory.createXYLineChart((String)evaluateExpression(getTitleExpression(), evaluation), (String)evaluateExpression(linePlot.getCategoryAxisLabelExpression(), evaluation), (String)evaluateExpression(linePlot.getValueAxisLabelExpression(), evaluation), (XYDataset)this.dataset.getDataset(), linePlot.getOrientation(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); configureAxis((Axis)this.chart.getXYPlot().getDomainAxis(), linePlot.getCategoryAxisLabelFont(), linePlot.getCategoryAxisLabelColor(), linePlot.getCategoryAxisTickLabelFont(), linePlot.getCategoryAxisTickLabelColor(), linePlot.getCategoryAxisTickLabelMask(), linePlot.getCategoryAxisLineColor()); configureAxis((Axis)this.chart.getXYPlot().getRangeAxis(), linePlot.getValueAxisLabelFont(), linePlot.getValueAxisLabelColor(), linePlot.getValueAxisTickLabelFont(), linePlot.getValueAxisTickLabelColor(), linePlot.getValueAxisTickLabelMask(), linePlot.getValueAxisLineColor()); XYLineAndShapeRenderer lineRenderer = (XYLineAndShapeRenderer)this.chart.getXYPlot().getRenderer(); lineRenderer.setShapesVisible(linePlot.isShowShapes()); lineRenderer.setLinesVisible(linePlot.isShowLines()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new XYChartHyperlinkProvider(((JRFillXyDataset)getDataset()).getItemHyperlinks()); } protected void evaluateTimeSeriesChart(byte evaluation) throws JRException { String timeAxisLabel = (String)evaluateExpression(((JRTimeSeriesPlot)getPlot()).getTimeAxisLabelExpression(), evaluation); String valueAxisLabel = (String)evaluateExpression(((JRTimeSeriesPlot)getPlot()).getValueAxisLabelExpression(), evaluation); this.chart = ChartFactory.createTimeSeriesChart((String)evaluateExpression(getTitleExpression(), evaluation), timeAxisLabel, valueAxisLabel, (XYDataset)this.dataset.getDataset(), isShowLegend(), true, false); configureChart(getPlot(), evaluation); XYPlot xyPlot = (XYPlot)this.chart.getPlot(); JRTimeSeriesPlot timeSeriesPlot = (JRTimeSeriesPlot)getPlot(); XYLineAndShapeRenderer lineRenderer = (XYLineAndShapeRenderer)xyPlot.getRenderer(); lineRenderer.setLinesVisible(((JRTimeSeriesPlot)getPlot()).isShowLines()); lineRenderer.setShapesVisible(((JRTimeSeriesPlot)getPlot()).isShowShapes()); configureAxis((Axis)xyPlot.getDomainAxis(), timeSeriesPlot.getTimeAxisLabelFont(), timeSeriesPlot.getTimeAxisLabelColor(), timeSeriesPlot.getTimeAxisTickLabelFont(), timeSeriesPlot.getTimeAxisTickLabelColor(), timeSeriesPlot.getTimeAxisTickLabelMask(), timeSeriesPlot.getTimeAxisLineColor()); configureAxis((Axis)xyPlot.getRangeAxis(), timeSeriesPlot.getValueAxisLabelFont(), timeSeriesPlot.getValueAxisLabelColor(), timeSeriesPlot.getValueAxisTickLabelFont(), timeSeriesPlot.getValueAxisTickLabelColor(), timeSeriesPlot.getValueAxisTickLabelMask(), timeSeriesPlot.getValueAxisLineColor()); this.chartHyperlinkProvider = (ChartHyperlinkProvider)new TimeSeriesChartHyperlinkProvider(((JRFillTimeSeriesDataset)getDataset()).getItemHyperlinks()); } protected Range convertRange(JRDataRange dataRange, byte evaluation) throws JRException { if (dataRange == null) return null; Number low = (Number)evaluateExpression(dataRange.getLowExpression(), evaluation); Number high = (Number)evaluateExpression(dataRange.getHighExpression(), evaluation); return new Range((low != null) ? low.doubleValue() : 0.0D, (high != null) ? high.doubleValue() : 100.0D); } protected MeterInterval convertInterval(JRMeterInterval interval, byte evaluation) throws JRException { String label = interval.getLabel(); if (label == null) label = ""; Range range = convertRange(interval.getDataRange(), evaluation); Color color = interval.getBackgroundColor(); float[] components = color.getRGBColorComponents(null); Color alphaColor = new Color(components[0], components[1], components[2], (float)interval.getAlpha()); return new MeterInterval(label, range, alphaColor, null, alphaColor); } protected void evaluateMeterChart(byte evaluation) throws JRException { JRFillMeterPlot jrPlot = (JRFillMeterPlot)getPlot(); MeterPlot chartPlot = new MeterPlot((ValueDataset)this.dataset.getDataset()); int shape = jrPlot.getShape(); if (shape == 0) { chartPlot.setDialShape(DialShape.CHORD); } else if (shape == 1) { chartPlot.setDialShape(DialShape.CIRCLE); } else { chartPlot.setDialShape(DialShape.PIE); } chartPlot.setRange(convertRange(jrPlot.getDataRange(), evaluation)); chartPlot.setMeterAngle(jrPlot.getMeterAngle()); String units = jrPlot.getUnits(); if (units != null && units.length() > 0) chartPlot.setUnits(units); chartPlot.setTickSize(jrPlot.getTickInterval()); Color color = jrPlot.getMeterBackgroundColor(); if (color != null) chartPlot.setDialBackgroundPaint(color); color = jrPlot.getNeedleColor(); if (color != null) chartPlot.setNeedlePaint(color); JRValueDisplay display = jrPlot.getValueDisplay(); if (display != null) { if (display.getColor() != null) chartPlot.setValuePaint(display.getColor()); if (display.getMask() != null) chartPlot.setTickLabelFormat(new DecimalFormat(display.getMask())); if (display.getFont() != null) chartPlot.setValueFont(new Font(JRFontUtil.getAttributes(display.getFont()))); } color = jrPlot.getTickColor(); if (color != null) chartPlot.setTickPaint(color); List intervals = jrPlot.getIntervals(); if (intervals != null) { Iterator iter = intervals.iterator(); while (iter.hasNext()) { JRMeterInterval interval = iter.next(); chartPlot.addInterval(convertInterval(interval, evaluation)); } } this.chart = new JFreeChart((String)evaluateExpression(getTitleExpression(), evaluation), null, (Plot)chartPlot, isShowLegend()); configureChart(getPlot(), evaluation); this.chartHyperlinkProvider = null; } protected void evaluateThermometerChart(byte evaluation) throws JRException { JRFillThermometerPlot jrPlot = (JRFillThermometerPlot)getPlot(); ThermometerPlot chartPlot = new ThermometerPlot((ValueDataset)this.dataset.getDataset()); Range range = convertRange(jrPlot.getDataRange(), evaluation); chartPlot.setLowerBound(range.getLowerBound()); chartPlot.setUpperBound(range.getUpperBound()); chartPlot.setShowValueLines(jrPlot.isShowValueLines()); chartPlot.setUnits(0); Color color = jrPlot.getMercuryColor(); if (color != null) chartPlot.setMercuryPaint(color); JRValueDisplay display = jrPlot.getValueDisplay(); if (display != null) { if (display.getColor() != null) chartPlot.setValuePaint(display.getColor()); if (display.getMask() != null) chartPlot.setValueFormat(new DecimalFormat(display.getMask())); if (display.getFont() != null) chartPlot.setValueFont(new Font(JRFontUtil.getAttributes(display.getFont()))); } switch (jrPlot.getValueLocation()) { case 0: chartPlot.setValueLocation(0); break; case 1: chartPlot.setValueLocation(2); break; case 2: chartPlot.setValueLocation(1); break; default: chartPlot.setValueLocation(3); break; } range = convertRange(jrPlot.getLowRange(), evaluation); if (range != null) chartPlot.setSubrangeInfo(2, range.getLowerBound(), range.getUpperBound()); range = convertRange(jrPlot.getMediumRange(), evaluation); if (range != null) chartPlot.setSubrangeInfo(1, range.getLowerBound(), range.getUpperBound()); range = convertRange(jrPlot.getHighRange(), evaluation); if (range != null) chartPlot.setSubrangeInfo(0, range.getLowerBound(), range.getUpperBound()); this.chart = new JFreeChart((Plot)chartPlot); configureChart(getPlot(), evaluation); this.chartHyperlinkProvider = null; } protected void evaluateMultiAxisChart(byte evaluation) throws JRException { Plot mainPlot = null; JRFillMultiAxisPlot jrPlot = (JRFillMultiAxisPlot)getPlot(); Iterator iter = jrPlot.getAxes().iterator(); if (iter.hasNext()) { JRFillChartAxis axis = iter.next(); JRFillChart fillChart = axis.getFillChart(); this.chart = fillChart.evaluateChart(evaluation); configureChart(getPlot(), evaluation); mainPlot = this.chart.getPlot(); if (axis.getPosition() == 2) { if (mainPlot instanceof CategoryPlot) ((CategoryPlot)mainPlot).setRangeAxisLocation(0, AxisLocation.BOTTOM_OR_RIGHT); if (mainPlot instanceof XYPlot) ((XYPlot)mainPlot).setRangeAxisLocation(0, AxisLocation.BOTTOM_OR_RIGHT); } else { if (mainPlot instanceof CategoryPlot) ((CategoryPlot)mainPlot).setRangeAxisLocation(0, AxisLocation.TOP_OR_LEFT); if (mainPlot instanceof XYPlot) ((XYPlot)mainPlot).setRangeAxisLocation(0, AxisLocation.TOP_OR_LEFT); } } int axisNumber = 0; while (iter.hasNext()) { axisNumber++; JRFillChartAxis chartAxis = iter.next(); JRFillChart fillChart = chartAxis.getFillChart(); JFreeChart axisChart = fillChart.evaluateChart(evaluation); if (mainPlot instanceof CategoryPlot) { CategoryPlot mainCatPlot = (CategoryPlot)mainPlot; if (!(axisChart.getPlot() instanceof CategoryPlot)) throw new JRException("You can not mix plot types in a MultiAxisChart"); CategoryPlot axisPlot = (CategoryPlot)axisChart.getPlot(); mainCatPlot.setRangeAxis(axisNumber, axisPlot.getRangeAxis()); if (chartAxis.getPosition() == 2) { mainCatPlot.setRangeAxisLocation(axisNumber, AxisLocation.BOTTOM_OR_RIGHT); } else { mainCatPlot.setRangeAxisLocation(axisNumber, AxisLocation.TOP_OR_LEFT); } mainCatPlot.setDataset(axisNumber, axisPlot.getDataset()); mainCatPlot.mapDatasetToRangeAxis(axisNumber, axisNumber); mainCatPlot.setRenderer(axisNumber, axisPlot.getRenderer()); configureAxisSeriesColors(axisPlot.getRenderer(), fillChart.getPlot()); continue; } if (mainPlot instanceof XYPlot) { XYPlot mainXyPlot = (XYPlot)mainPlot; if (!(axisChart.getPlot() instanceof XYPlot)) throw new JRException("You can not mix plot types in a MultiAxisChart"); XYPlot axisPlot = (XYPlot)axisChart.getPlot(); mainXyPlot.setRangeAxis(axisNumber, axisPlot.getRangeAxis()); if (chartAxis.getPosition() == 2) { mainXyPlot.setRangeAxisLocation(axisNumber, AxisLocation.BOTTOM_OR_RIGHT); } else { mainXyPlot.setRangeAxisLocation(axisNumber, AxisLocation.TOP_OR_LEFT); } mainXyPlot.setDataset(axisNumber, axisPlot.getDataset()); mainXyPlot.mapDatasetToRangeAxis(axisNumber, axisNumber); mainXyPlot.setRenderer(axisNumber, axisPlot.getRenderer()); configureAxisSeriesColors(axisPlot.getRenderer(), fillChart.getPlot()); continue; } throw new JRException("MultiAxis charts only support Category and XY plots."); } this.chartHyperlinkProvider = null; } protected void resolveElement(JRPrintElement element, byte evaluation) throws JRException { evaluateRenderer(evaluation); copy((JRPrintImage)element); } public int getBookmarkLevel() { return ((JRChart)this.parent).getBookmarkLevel(); } public String getCustomizerClass() { return this.customizerClass; } private void evaluateDatasetRun(byte evaluation) throws JRException { this.dataset.evaluateDatasetRun(evaluation); } public JRFillCloneable createClone(JRFillCloneFactory factory) { return null; } public JRHyperlinkParameter[] getHyperlinkParameters() { return ((JRChart)this.parent).getHyperlinkParameters(); } public String getLinkType() { return ((JRChart)this.parent).getLinkType(); } public JRExpression getHyperlinkTooltipExpression() { return ((JRChart)this.parent).getHyperlinkTooltipExpression(); } private static RectangleEdge getEdge(byte position) { RectangleEdge edge = RectangleEdge.TOP; switch (position) { case 1: edge = RectangleEdge.TOP; break; case 2: edge = RectangleEdge.BOTTOM; break; case 3: edge = RectangleEdge.LEFT; break; case 4: edge = RectangleEdge.RIGHT; break; } return edge; } }