/* * JasperReports - Free Java Reporting Library. * Copyright (C) 2001 - 2009 Jaspersoft Corporation. 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 <http://www.gnu.org/licenses/>. */ package net.sf.jasperreports.engine.fill; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; 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.JRCategorySeries; import net.sf.jasperreports.charts.JRChartAxis; import net.sf.jasperreports.charts.JRGanttDataset; import net.sf.jasperreports.charts.JRGanttSeries; 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.JRPieSeries; import net.sf.jasperreports.charts.JRScatterPlot; import net.sf.jasperreports.charts.JRThermometerPlot; import net.sf.jasperreports.charts.JRTimePeriodDataset; import net.sf.jasperreports.charts.JRTimePeriodSeries; import net.sf.jasperreports.charts.JRTimeSeries; import net.sf.jasperreports.charts.JRTimeSeriesDataset; import net.sf.jasperreports.charts.JRTimeSeriesPlot; import net.sf.jasperreports.charts.JRValueDataset; import net.sf.jasperreports.charts.JRXyDataset; import net.sf.jasperreports.charts.JRXySeries; import net.sf.jasperreports.charts.JRXyzDataset; import net.sf.jasperreports.charts.JRXyzSeries; 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.JRFillBubblePlot; import net.sf.jasperreports.charts.fill.JRFillCandlestickPlot; import net.sf.jasperreports.charts.fill.JRFillCategoryDataset; import net.sf.jasperreports.charts.fill.JRFillCategorySeries; import net.sf.jasperreports.charts.fill.JRFillChartAxis; import net.sf.jasperreports.charts.fill.JRFillGanttDataset; import net.sf.jasperreports.charts.fill.JRFillGanttSeries; import net.sf.jasperreports.charts.fill.JRFillHighLowDataset; import net.sf.jasperreports.charts.fill.JRFillHighLowPlot; 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.JRFillPieSeries; import net.sf.jasperreports.charts.fill.JRFillScatterPlot; import net.sf.jasperreports.charts.fill.JRFillThermometerPlot; import net.sf.jasperreports.charts.fill.JRFillTimePeriodDataset; import net.sf.jasperreports.charts.fill.JRFillTimePeriodSeries; import net.sf.jasperreports.charts.fill.JRFillTimeSeries; import net.sf.jasperreports.charts.fill.JRFillTimeSeriesDataset; import net.sf.jasperreports.charts.fill.JRFillTimeSeriesPlot; import net.sf.jasperreports.charts.fill.JRFillValueDataset; import net.sf.jasperreports.charts.fill.JRFillXyDataset; import net.sf.jasperreports.charts.fill.JRFillXySeries; import net.sf.jasperreports.charts.fill.JRFillXyzDataset; import net.sf.jasperreports.charts.fill.JRFillXyzSeries; import net.sf.jasperreports.crosstabs.JRCrosstab; import net.sf.jasperreports.crosstabs.JRCrosstabDataset; import net.sf.jasperreports.crosstabs.JRCrosstabParameter; import net.sf.jasperreports.crosstabs.fill.JRFillCrosstabParameter; import net.sf.jasperreports.engine.JRAbstractObjectFactory; import net.sf.jasperreports.engine.JRBand; import net.sf.jasperreports.engine.JRBreak; import net.sf.jasperreports.engine.JRChart; import net.sf.jasperreports.engine.JRComponentElement; import net.sf.jasperreports.engine.JRConditionalStyle; import net.sf.jasperreports.engine.JRDataset; import net.sf.jasperreports.engine.JRDatasetRun; import net.sf.jasperreports.engine.JRDefaultStyleProvider; import net.sf.jasperreports.engine.JRElementGroup; import net.sf.jasperreports.engine.JREllipse; import net.sf.jasperreports.engine.JRExpression; import net.sf.jasperreports.engine.JRField; import net.sf.jasperreports.engine.JRFrame; import net.sf.jasperreports.engine.JRGenericElement; import net.sf.jasperreports.engine.JRGroup; import net.sf.jasperreports.engine.JRImage; import net.sf.jasperreports.engine.JRLine; import net.sf.jasperreports.engine.JRParameter; import net.sf.jasperreports.engine.JRRectangle; import net.sf.jasperreports.engine.JRReportFont; import net.sf.jasperreports.engine.JRReportTemplate; import net.sf.jasperreports.engine.JRRuntimeException; import net.sf.jasperreports.engine.JRSection; import net.sf.jasperreports.engine.JRStaticText; import net.sf.jasperreports.engine.JRStyle; import net.sf.jasperreports.engine.JRStyleContainer; import net.sf.jasperreports.engine.JRStyleSetter; import net.sf.jasperreports.engine.JRSubreport; import net.sf.jasperreports.engine.JRSubreportReturnValue; import net.sf.jasperreports.engine.JRTextField; import net.sf.jasperreports.engine.JRVariable; import net.sf.jasperreports.engine.base.JRBaseConditionalStyle; import net.sf.jasperreports.engine.base.JRBaseReportFont; import net.sf.jasperreports.engine.base.JRBaseStyle; import org.apache.commons.collections.SequencedHashMap; /** * A factory used to instantiate fill objects based on compiled report objects. * * @author Teodor Danciu (teodord@users.sourceforge.net) * @version $Id: JRFillObjectFactory.java 3806 2010-05-18 10:02:44Z lucianc $ */ public class JRFillObjectFactory extends JRAbstractObjectFactory { /** * */ protected JRBaseFiller filler = null; private JRFillExpressionEvaluator evaluator; private JRFillObjectFactory parentFiller; // private JRFont defaultFont = null; private List elementDatasets = new ArrayList(); private Map elementDatasetMap = new HashMap(); private Map delayedStyleSettersByName = new HashMap(); protected static class StylesList { private final List styles = new ArrayList(); private final Map stylesIdx = new HashMap(); public boolean containsStyle(String name) { return stylesIdx.containsKey(name); } public JRStyle getStyle(String name) { Integer idx = (Integer) stylesIdx.get(name); return idx == null ? null : (JRStyle) styles.get(idx.intValue()); } public void addStyle(JRStyle style) { styles.add(style); stylesIdx.put(style.getName(), Integer.valueOf(styles.size() - 1)); } public void renamed(String oldName, String newName) { Integer idx = (Integer) stylesIdx.remove(oldName); stylesIdx.put(newName, idx); } } private Set originalStyleList; private StylesList stylesMap = new StylesList(); /** * */ protected JRFillObjectFactory(JRBaseFiller filler) { this(filler, filler.calculator); } /** * */ public JRFillObjectFactory(JRBaseFiller filler, JRFillExpressionEvaluator expressionEvaluator) { this.filler = filler; this.evaluator = expressionEvaluator; } public JRFillObjectFactory(JRFillObjectFactory parent, JRFillExpressionEvaluator expressionEvaluator) { this.parentFiller = parent; this.filler = parent.filler; this.evaluator = expressionEvaluator; } /** * Returns the expression evaluator which is to be used by objects * created by this factory. * * @return the expression evaluator associated with this factory */ public JRFillExpressionEvaluator getExpressionEvaluator() { return evaluator; } /** * */ protected JRFillChartDataset[] getDatasets() { return (JRFillChartDataset[]) elementDatasets.toArray(new JRFillChartDataset[elementDatasets.size()]); } protected JRFillElementDataset[] getElementDatasets(JRDataset dataset) { JRFillElementDataset[] elementDatasetsArray; List elementDatasetsList; if (dataset.isMainDataset()) { elementDatasetsList = elementDatasets; } else { elementDatasetsList = (List) elementDatasetMap.get(dataset.getName()); } if (elementDatasetsList == null || elementDatasetsList.size() == 0) { elementDatasetsArray = new JRFillElementDataset[0]; } else { elementDatasetsArray = new JRFillElementDataset[elementDatasetsList.size()]; elementDatasetsList.toArray(elementDatasetsArray); } return elementDatasetsArray; } /** * */ @SuppressWarnings("deprecation") public JRReportFont getReportFont(JRReportFont font) { JRBaseReportFont fillFont = null; if (font != null) { fillFont = (JRBaseReportFont)get(font); if (fillFont == null) { fillFont = new JRBaseReportFont(font); put(font, fillFont); } } return fillFont; } protected void registerDelayedStyleSetter(JRStyleSetter delayedSetter, String styleName) { if (parentFiller == null) { List setters = (List) delayedStyleSettersByName.get(styleName); if (setters == null) { setters = new ArrayList(); delayedStyleSettersByName.put(styleName, setters); } setters.add(delayedSetter); } else { parentFiller.registerDelayedStyleSetter(delayedSetter, styleName); } } public void registerDelayedStyleSetter(JRStyleSetter delayedSetter, JRStyleContainer styleContainer) { JRStyle style = styleContainer.getStyle(); String nameReference = styleContainer.getStyleNameReference(); if (style != null) { registerDelayedStyleSetter(delayedSetter, style.getName()); } else if (nameReference != null) { registerDelayedStyleSetter(delayedSetter, nameReference); } } public JRStyle getStyle(JRStyle style) { JRBaseStyle fillStyle = null; if (style != null) { fillStyle = (JRBaseStyle)get(style); if (fillStyle == null) { fillStyle = new JRBaseStyle(style, this); put(style, fillStyle); if (originalStyleList != null && originalStyleList.contains(style)) { renameExistingStyle(style.getName()); stylesMap.addStyle(style); } } } return fillStyle; } protected void renameExistingStyle(String name) { JRStyle originalStyle = stylesMap.getStyle(name); if (originalStyle != null) { //found a previous external style with the same name //renaming the previous style JRBaseStyle style = (JRBaseStyle) get(originalStyle); String newName; int suf = 1; do { newName = name + suf; ++suf; } while(stylesMap.containsStyle(newName)); style.rename(newName); stylesMap.renamed(name, newName); } } public void setStyle(JRStyleSetter setter, JRStyleContainer styleContainer) { JRStyle style = styleContainer.getStyle(); String nameReference = styleContainer.getStyleNameReference(); if (style != null) { JRStyle newStyle = getStyle(style); setter.setStyle(newStyle); } else if (nameReference != null) { JRStyle originalStyle = stylesMap.getStyle(nameReference); if (originalStyle == null) { throw new JRRuntimeException("Style " + nameReference + " not found"); } JRStyle externalStyle = (JRStyle) get(originalStyle); setter.setStyle(externalStyle); } } /** * * protected JRBaseFont getFont(JRFont font) { JRBaseFont fillFont = null; if (font != null) { fillFont = (JRBaseFont)get(font); if (fillFont == null) { fillFont = new JRBaseFont( filler.getJasperPrint().getDefaultStyleProvider(), getReportFont(font.getReportFont()), font ); put(font, fillFont); } } else { if (defaultFont == null) { defaultFont = new JRBaseFont(); } fillFont = getFont(defaultFont); } return fillFont; } /** * */ protected JRFillParameter getParameter(JRParameter parameter) { JRFillParameter fillParameter = null; if (parameter != null) { fillParameter = (JRFillParameter)get(parameter); if (fillParameter == null) { fillParameter = new JRFillParameter(parameter, this); } } return fillParameter; } /** * */ protected JRFillField getField(JRField field) { JRFillField fillField = null; if (field != null) { fillField = (JRFillField)get(field); if (fillField == null) { fillField = new JRFillField(field, this); } } return fillField; } /** * */ public JRFillVariable getVariable(JRVariable variable) { JRFillVariable fillVariable = null; if (variable != null) { fillVariable = (JRFillVariable)get(variable); if (fillVariable == null) { fillVariable = new JRFillVariable(variable, this); } } return fillVariable; } /** * */ protected JRFillGroup getGroup(JRGroup group) { JRFillGroup fillGroup = null; if (group != null) { fillGroup = (JRFillGroup)get(group); if (fillGroup == null) { fillGroup = new JRFillGroup(group, this); } } return fillGroup; } /** * */ protected JRFillSection getSection(JRSection section) { JRFillSection fillSection = null; if (section == null) { fillSection = filler.missingFillSection; } else { fillSection = (JRFillSection)get(section); if (fillSection == null) { fillSection = new JRFillSection(filler, section, this); } } return fillSection; } /** * */ protected JRFillBand getBand(JRBand band) { JRFillBand fillBand = null; if (band == null) { fillBand = filler.missingFillBand; } else { fillBand = (JRFillBand)get(band); if (fillBand == null) { fillBand = new JRFillBand(filler, band, this); } } return fillBand; } /** * */ public void visitElementGroup(JRElementGroup elementGroup) { JRFillElementGroup fillElementGroup = null; if (elementGroup != null) { fillElementGroup = (JRFillElementGroup)get(elementGroup); if (fillElementGroup == null) { fillElementGroup = new JRFillElementGroup(elementGroup, this); } } setVisitResult(fillElementGroup); } /** * */ public void visitBreak(JRBreak breakElement) { JRFillBreak fillBreak = null; if (breakElement != null) { fillBreak = (JRFillBreak)get(breakElement); if (fillBreak == null) { fillBreak = new JRFillBreak(filler, breakElement, this); } } setVisitResult(fillBreak); } /** * */ public void visitLine(JRLine line) { JRFillLine fillLine = null; if (line != null) { fillLine = (JRFillLine)get(line); if (fillLine == null) { fillLine = new JRFillLine(filler, line, this); } } setVisitResult(fillLine); } /** * */ public void visitRectangle(JRRectangle rectangle) { JRFillRectangle fillRectangle = null; if (rectangle != null) { fillRectangle = (JRFillRectangle)get(rectangle); if (fillRectangle == null) { fillRectangle = new JRFillRectangle(filler, rectangle, this); } } setVisitResult(fillRectangle); } /** * */ public void visitEllipse(JREllipse ellipse) { JRFillEllipse fillEllipse = null; if (ellipse != null) { fillEllipse = (JRFillEllipse)get(ellipse); if (fillEllipse == null) { fillEllipse = new JRFillEllipse(filler, ellipse, this); } } setVisitResult(fillEllipse); } /** * */ public void visitImage(JRImage image) { JRFillImage fillImage = null; if (image != null) { fillImage = (JRFillImage)get(image); if (fillImage == null) { fillImage = new JRFillImage(filler, image, this); } } setVisitResult(fillImage); } /** * */ public void visitStaticText(JRStaticText staticText) { JRFillStaticText fillStaticText = null; if (staticText != null) { fillStaticText = (JRFillStaticText)get(staticText); if (fillStaticText == null) { fillStaticText = new JRFillStaticText(filler, staticText, this); } } setVisitResult(fillStaticText); } /** * */ public void visitTextField(JRTextField textField) { JRFillTextField fillTextField = null; if (textField != null) { fillTextField = (JRFillTextField)get(textField); if (fillTextField == null) { fillTextField = new JRFillTextField(filler, textField, this); } } setVisitResult(fillTextField); } /** * */ public void visitSubreport(JRSubreport subreport) { JRFillSubreport fillSubreport = null; if (subreport != null) { fillSubreport = (JRFillSubreport)get(subreport); if (fillSubreport == null) { fillSubreport = new JRFillSubreport(filler, subreport, this); } } setVisitResult(fillSubreport); } public void visitChart(JRChart chart) { JRFillChart fillChart = null; if (chart != null) { fillChart = (JRFillChart)get(chart); if (fillChart == null) { fillChart = new JRFillChart(filler, chart, this); } } setVisitResult(fillChart); } /** * */ public JRPieDataset getPieDataset(JRPieDataset pieDataset) { JRFillPieDataset fillPieDataset = null; if (pieDataset != null) { fillPieDataset = (JRFillPieDataset)get(pieDataset); if (fillPieDataset == null) { fillPieDataset = new JRFillPieDataset(pieDataset, this); registerElementDataset(fillPieDataset); } } return fillPieDataset; } /** * */ public JRPiePlot getPiePlot(JRPiePlot piePlot) { JRFillPiePlot fillPiePlot = null; if (piePlot != null) { fillPiePlot = (JRFillPiePlot)get(piePlot); if (fillPiePlot == null) { fillPiePlot = new JRFillPiePlot(piePlot, this); } } return fillPiePlot; } /** * */ public JRPie3DPlot getPie3DPlot(JRPie3DPlot pie3DPlot) { JRFillPie3DPlot fillPie3DPlot = null; if (pie3DPlot != null) { fillPie3DPlot = (JRFillPie3DPlot)get(pie3DPlot); if (fillPie3DPlot == null) { fillPie3DPlot = new JRFillPie3DPlot(pie3DPlot, this); } } return fillPie3DPlot; } /** * */ public JRCategoryDataset getCategoryDataset(JRCategoryDataset categoryDataset) { JRFillCategoryDataset fillCategoryDataset = null; if (categoryDataset != null) { fillCategoryDataset = (JRFillCategoryDataset)get(categoryDataset); if (fillCategoryDataset == null) { fillCategoryDataset = new JRFillCategoryDataset(categoryDataset, this); registerElementDataset(fillCategoryDataset); } } return fillCategoryDataset; } public JRXyzDataset getXyzDataset( JRXyzDataset xyzDataset ){ JRFillXyzDataset fillXyzDataset = null; if( xyzDataset != null ){ fillXyzDataset = (JRFillXyzDataset)get( xyzDataset ); if( fillXyzDataset == null ){ fillXyzDataset = new JRFillXyzDataset( xyzDataset, this ); registerElementDataset(fillXyzDataset); } } return fillXyzDataset; } /** * */ public JRXyDataset getXyDataset(JRXyDataset xyDataset) { JRFillXyDataset fillXyDataset = null; if (xyDataset != null) { fillXyDataset = (JRFillXyDataset)get(xyDataset); if (fillXyDataset == null) { fillXyDataset = new JRFillXyDataset(xyDataset, this); registerElementDataset(fillXyDataset); } } return fillXyDataset; } /** * */ public JRTimeSeriesDataset getTimeSeriesDataset( JRTimeSeriesDataset timeSeriesDataset ){ JRFillTimeSeriesDataset fillTimeSeriesDataset = null; if( timeSeriesDataset != null ){ fillTimeSeriesDataset = (JRFillTimeSeriesDataset)get( timeSeriesDataset ); if( fillTimeSeriesDataset == null ){ fillTimeSeriesDataset = new JRFillTimeSeriesDataset( timeSeriesDataset, this ); registerElementDataset(fillTimeSeriesDataset); } } return fillTimeSeriesDataset; } public JRTimePeriodDataset getTimePeriodDataset( JRTimePeriodDataset timePeriodDataset ){ JRFillTimePeriodDataset fillTimePeriodDataset = null; if( timePeriodDataset != null ){ fillTimePeriodDataset = (JRFillTimePeriodDataset)get( timePeriodDataset ); if( fillTimePeriodDataset == null ){ fillTimePeriodDataset = new JRFillTimePeriodDataset( timePeriodDataset, this ); registerElementDataset(fillTimePeriodDataset); } } return fillTimePeriodDataset; } /** * */ public JRGanttDataset getGanttDataset(JRGanttDataset ganttDataset) { JRFillGanttDataset fillGanttDataset = null; if (ganttDataset != null) { fillGanttDataset = (JRFillGanttDataset)get(ganttDataset); if (fillGanttDataset == null) { fillGanttDataset = new JRFillGanttDataset(ganttDataset, this); registerElementDataset(fillGanttDataset); } } return fillGanttDataset; } /** * */ public JRPieSeries getPieSeries(JRPieSeries pieSeries) { JRFillPieSeries fillPieSeries = null; if (pieSeries != null) { fillPieSeries = (JRFillPieSeries)get(pieSeries); if (fillPieSeries == null) { fillPieSeries = new JRFillPieSeries(pieSeries, this); } } return fillPieSeries; } /** * */ public JRCategorySeries getCategorySeries(JRCategorySeries categorySeries) { JRFillCategorySeries fillCategorySeries = null; if (categorySeries != null) { fillCategorySeries = (JRFillCategorySeries)get(categorySeries); if (fillCategorySeries == null) { fillCategorySeries = new JRFillCategorySeries(categorySeries, this); } } return fillCategorySeries; } public JRXyzSeries getXyzSeries( JRXyzSeries xyzSeries ){ JRFillXyzSeries fillXyzSeries = null; if( xyzSeries != null ){ fillXyzSeries = (JRFillXyzSeries)get( xyzSeries ); if( fillXyzSeries == null ){ fillXyzSeries = new JRFillXyzSeries( xyzSeries, this ); } } return fillXyzSeries; } /** * */ public JRXySeries getXySeries(JRXySeries xySeries) { JRFillXySeries fillXySeries = null; if (xySeries != null) { fillXySeries = (JRFillXySeries)get(xySeries); if (fillXySeries == null) { fillXySeries = new JRFillXySeries(xySeries, this); } } return fillXySeries; } /** * */ public JRGanttSeries getGanttSeries(JRGanttSeries ganttSeries) { JRFillGanttSeries fillGanttSeries = null; if (ganttSeries != null) { fillGanttSeries = (JRFillGanttSeries)get(ganttSeries); if (fillGanttSeries == null) { fillGanttSeries = new JRFillGanttSeries(ganttSeries, this); } } return fillGanttSeries; } /** * */ public JRBarPlot getBarPlot(JRBarPlot barPlot) { JRFillBarPlot fillBarPlot = null; if (barPlot != null) { fillBarPlot = (JRFillBarPlot)get(barPlot); if (fillBarPlot == null) { fillBarPlot = new JRFillBarPlot(barPlot, this); } } return fillBarPlot; } /** * */ public JRTimeSeries getTimeSeries(JRTimeSeries timeSeries) { JRFillTimeSeries fillTimeSeries = null; if (timeSeries != null) { fillTimeSeries = (JRFillTimeSeries)get(timeSeries); if (fillTimeSeries == null) { fillTimeSeries = new JRFillTimeSeries(timeSeries, this); } } return fillTimeSeries; } public JRTimePeriodSeries getTimePeriodSeries( JRTimePeriodSeries timePeriodSeries ){ JRFillTimePeriodSeries fillTimePeriodSeries = null; if( timePeriodSeries != null ){ fillTimePeriodSeries = (JRFillTimePeriodSeries)get( timePeriodSeries ); if( fillTimePeriodSeries == null ){ fillTimePeriodSeries = new JRFillTimePeriodSeries( timePeriodSeries, this ); } } return fillTimePeriodSeries; } /** * */ public JRBar3DPlot getBar3DPlot(JRBar3DPlot barPlot) { JRFillBar3DPlot fillBarPlot = null; if (barPlot != null){ fillBarPlot = (JRFillBar3DPlot)get(barPlot); if (fillBarPlot == null){ fillBarPlot = new JRFillBar3DPlot(barPlot, this); } } return fillBarPlot; } /** * */ public JRLinePlot getLinePlot(JRLinePlot linePlot) { JRFillLinePlot fillLinePlot = null; if (linePlot != null){ fillLinePlot = (JRFillLinePlot)get(linePlot); if (fillLinePlot == null){ fillLinePlot = new JRFillLinePlot(linePlot, this); } } return fillLinePlot; } /** * */ public JRScatterPlot getScatterPlot(JRScatterPlot scatterPlot) { JRFillScatterPlot fillScatterPlot = null; if (scatterPlot != null){ fillScatterPlot = (JRFillScatterPlot)get(scatterPlot); if (fillScatterPlot == null){ fillScatterPlot = new JRFillScatterPlot(scatterPlot, this); } } return fillScatterPlot; } /** * */ public JRAreaPlot getAreaPlot(JRAreaPlot areaPlot) { JRFillAreaPlot fillAreaPlot = null; if (areaPlot != null) { fillAreaPlot = (JRFillAreaPlot)get(areaPlot); if (fillAreaPlot == null) { fillAreaPlot = new JRFillAreaPlot(areaPlot, this); } } return fillAreaPlot; } /* (non-Javadoc) * @see net.sf.jasperreports.engine.JRAbstractObjectFactory#getBubblePlot(net.sf.jasperreports.charts.JRBubblePlot) */ public JRBubblePlot getBubblePlot(JRBubblePlot bubblePlot) { JRFillBubblePlot fillBubblePlot = null; if (bubblePlot != null) { fillBubblePlot = (JRFillBubblePlot)get(bubblePlot); if (fillBubblePlot == null) { fillBubblePlot = new JRFillBubblePlot(bubblePlot, this); } } return fillBubblePlot; } /** * */ public JRHighLowDataset getHighLowDataset(JRHighLowDataset highLowDataset) { JRFillHighLowDataset fillHighLowDataset = null; if (highLowDataset != null) { fillHighLowDataset = (JRFillHighLowDataset)get(highLowDataset); if (fillHighLowDataset == null) { fillHighLowDataset = new JRFillHighLowDataset(highLowDataset, this); registerElementDataset(fillHighLowDataset); } } return fillHighLowDataset; } /** * */ public JRHighLowPlot getHighLowPlot(JRHighLowPlot highLowPlot) { JRFillHighLowPlot fillHighLowPlot = null; if (highLowPlot != null){ fillHighLowPlot = (JRFillHighLowPlot)get(highLowPlot); if (fillHighLowPlot == null){ fillHighLowPlot = new JRFillHighLowPlot(highLowPlot, this); } } return fillHighLowPlot; } public JRCandlestickPlot getCandlestickPlot(JRCandlestickPlot candlestickPlot) { JRFillCandlestickPlot fillCandlestickPlot = null; if (candlestickPlot != null){ fillCandlestickPlot = (JRFillCandlestickPlot)get(candlestickPlot); if (fillCandlestickPlot == null){ fillCandlestickPlot = new JRFillCandlestickPlot(candlestickPlot, this); } } return fillCandlestickPlot; } public JRTimeSeriesPlot getTimeSeriesPlot( JRTimeSeriesPlot plot ){ JRFillTimeSeriesPlot fillPlot = null; if( plot != null ){ fillPlot = (JRFillTimeSeriesPlot)get( plot ); if( fillPlot == null ){ fillPlot = new JRFillTimeSeriesPlot( plot, this ); } } return fillPlot; } /** * */ public JRValueDataset getValueDataset(JRValueDataset valueDataset) { JRFillValueDataset fillValueDataset = null; if (valueDataset != null) { fillValueDataset = (JRFillValueDataset)get(valueDataset); if (fillValueDataset == null) { fillValueDataset = new JRFillValueDataset(valueDataset, this); registerElementDataset(fillValueDataset); } } return fillValueDataset; } /** * */ public JRMeterPlot getMeterPlot(JRMeterPlot meterPlot) { JRFillMeterPlot fillMeterPlot = null; if (meterPlot != null) { fillMeterPlot = (JRFillMeterPlot)get(meterPlot); if (fillMeterPlot == null) { fillMeterPlot = new JRFillMeterPlot(meterPlot, this); } } return fillMeterPlot; } /** * */ public JRThermometerPlot getThermometerPlot(JRThermometerPlot thermometerPlot) { JRFillThermometerPlot fillThermometerPlot = null; if (thermometerPlot != null) { fillThermometerPlot = (JRFillThermometerPlot)get(thermometerPlot); if (fillThermometerPlot == null) { fillThermometerPlot = new JRFillThermometerPlot(thermometerPlot, this); } } return fillThermometerPlot; } /** * */ public JRMultiAxisPlot getMultiAxisPlot(JRMultiAxisPlot multiAxisPlot) { JRFillMultiAxisPlot fillMultiAxisPlot = null; if (multiAxisPlot != null) { fillMultiAxisPlot = (JRFillMultiAxisPlot)get(multiAxisPlot); if (fillMultiAxisPlot == null) { fillMultiAxisPlot = new JRFillMultiAxisPlot(multiAxisPlot, this); } } return fillMultiAxisPlot; } protected JRFillSubreportReturnValue getSubreportReturnValue(JRSubreportReturnValue returnValue) { JRFillSubreportReturnValue fillReturnValue = null; if (returnValue != null) { fillReturnValue = (JRFillSubreportReturnValue) get(returnValue); if (fillReturnValue == null) { fillReturnValue = new JRFillSubreportReturnValue(returnValue, this, filler); } } return fillReturnValue; } public void visitCrosstab(JRCrosstab crosstabElement) { JRFillCrosstab fillCrosstab = null; if (crosstabElement != null) { fillCrosstab = (JRFillCrosstab) get(crosstabElement); if (fillCrosstab == null) { fillCrosstab = new JRFillCrosstab(filler, crosstabElement, this); } } setVisitResult(fillCrosstab); } public JRFillCrosstab.JRFillCrosstabDataset getCrosstabDataset(JRCrosstabDataset dataset, JRFillCrosstab fillCrosstab) { JRFillCrosstab.JRFillCrosstabDataset fillDataset = null; if (dataset != null) { fillDataset = (JRFillCrosstab.JRFillCrosstabDataset)get(dataset); if (fillDataset == null) { fillDataset = fillCrosstab.new JRFillCrosstabDataset(dataset, this); registerElementDataset(fillDataset); } } return fillDataset; } public JRFillDataset getDataset(JRDataset dataset) { JRFillDataset fillDataset = null; if (dataset != null) { fillDataset = (JRFillDataset) get(dataset); if (fillDataset == null) { fillDataset = new JRFillDataset(filler, dataset, this); } } return fillDataset; } /** * Register an element dataset with the report filler. * * <p> * Registration of element datasets is required in order for the filler * to increment the datasets when iterating through the datasource. * * @param elementDataset the dataset to register */ public void registerElementDataset(JRFillElementDataset elementDataset) { List elementDatasetsList; JRDatasetRun datasetRun = elementDataset.getDatasetRun(); if (datasetRun == null) { elementDatasetsList = elementDatasets; } else { String datasetName = datasetRun.getDatasetName(); elementDatasetsList = (List) elementDatasetMap.get(datasetName); if (elementDatasetsList == null) { elementDatasetsList = new ArrayList(); elementDatasetMap.put(datasetName, elementDatasetsList); } } elementDatasetsList.add(elementDataset); } public JRFillDatasetRun getDatasetRun(JRDatasetRun datasetRun) { JRFillDatasetRun fillDatasetRun = null; if (datasetRun != null) { fillDatasetRun = (JRFillDatasetRun) get(datasetRun); if (fillDatasetRun == null) { fillDatasetRun = new JRFillDatasetRun(filler, datasetRun, this); } } return fillDatasetRun; } public JRFillCrosstabParameter getCrosstabParameter(JRCrosstabParameter parameter) { JRFillCrosstabParameter fillParameter = null; if (parameter != null) { fillParameter = (JRFillCrosstabParameter) get(parameter); if (fillParameter == null) { fillParameter = new JRFillCrosstabParameter(parameter, this); } } return fillParameter; } public void visitFrame(JRFrame frame) { Object fillFrame = null; // This is the only place where an object gets replaced in the factory map by something else, // and we can no longer make a precise cast when getting it. // The JRFillFrame object is replaced in the map by a JRFillFrameElements object. //JRFillFrame fillFrame = null; if (frame != null) { fillFrame = get(frame); //fillFrame = (JRFillFrame) get(frame); if (fillFrame == null) { fillFrame = new JRFillFrame(filler, frame, this); } } setVisitResult(fillFrame); } /** * Returns the current report filler. * * @return the current report filler */ public JRBaseFiller getFiller() { return filler; } /** * */ public JRConditionalStyle getConditionalStyle(JRConditionalStyle conditionalStyle, JRStyle style) { JRBaseConditionalStyle baseConditionalStyle = null; if (conditionalStyle != null) { baseConditionalStyle = (JRBaseConditionalStyle) get(conditionalStyle); if (baseConditionalStyle == null) { baseConditionalStyle = new JRBaseConditionalStyle(conditionalStyle, style, this); put(conditionalStyle, baseConditionalStyle); } } return baseConditionalStyle; } public JRExpression getExpression(JRExpression expression, boolean assignNotUsedId) { return expression; } public JRChartAxis getChartAxis(JRChartAxis axis) { JRFillChartAxis fillAxis = null; if (axis != null) { fillAxis = (JRFillChartAxis) get(axis); if (fillAxis == null) { fillAxis = new JRFillChartAxis(axis, this); } } return fillAxis; } public JRFillReportTemplate getReportTemplate(JRReportTemplate template) { JRFillReportTemplate fillTemplate = null; if (template != null) { fillTemplate = (JRFillReportTemplate) get(template); if (fillTemplate == null) { fillTemplate = new JRFillReportTemplate(template, filler, this); } } return fillTemplate; } public List setStyles(List styles) { originalStyleList = new HashSet(styles); //filtering requested styles Set requestedStyles = collectRequestedStyles(styles); //collect used styles Map usedStylesMap = new SequencedHashMap(); Map allStylesMap = new HashMap(); for (Iterator it = styles.iterator(); it.hasNext();) { JRStyle style = (JRStyle) it.next(); if (requestedStyles.contains(style)) { collectUsedStyles(style, usedStylesMap, allStylesMap); } allStylesMap.put(style.getName(), style); } List includedStyles = new ArrayList(); for (Iterator it = usedStylesMap.keySet().iterator(); it.hasNext();) { JRStyle style = (JRStyle) it.next(); JRStyle newStyle = getStyle(style); includedStyles.add(newStyle); if (requestedStyles.contains(style)) { useDelayedStyle(newStyle); } } checkUnresolvedReferences(); return includedStyles; } protected Set collectRequestedStyles(List externalStyles) { Map requestedStylesMap = new HashMap(); for (Iterator it = externalStyles.iterator(); it.hasNext();) { JRStyle style = (JRStyle) it.next(); String name = style.getName(); if (delayedStyleSettersByName.containsKey(name)) { requestedStylesMap.put(name, style); } } return new HashSet(requestedStylesMap.values()); } protected void collectUsedStyles(JRStyle style, Map usedStylesMap, Map allStylesMap) { if (!usedStylesMap.containsKey(style) && originalStyleList.contains(style)) { JRStyle parent = style.getStyle(); if (parent == null) { String parentName = style.getStyleNameReference(); if (parentName != null) { parent = (JRStyle) allStylesMap.get(parentName); if (parent == null) { throw new JRRuntimeException("Style " + parentName + " not found"); } } } if (parent != null) { collectUsedStyles(parent, usedStylesMap, allStylesMap); } usedStylesMap.put(style, null); } } protected void useDelayedStyle(JRStyle style) { List delayedSetters = (List) delayedStyleSettersByName.remove(style.getName()); if (delayedSetters != null) { for (Iterator it = delayedSetters.iterator(); it.hasNext();) { JRStyleSetter setter = (JRStyleSetter) it.next(); setter.setStyle(style); } } } protected void checkUnresolvedReferences() { if (!delayedStyleSettersByName.isEmpty()) { StringBuffer errorMsg = new StringBuffer("Could not resolve style(s): "); for (Iterator it = delayedStyleSettersByName.keySet().iterator(); it.hasNext();) { String name = (String) it.next(); errorMsg.append(name); errorMsg.append(", "); } throw new JRRuntimeException(errorMsg.substring(0, errorMsg.length() - 2)); } } public JRDefaultStyleProvider getDefaultStyleProvider() { return filler.getJasperPrint().getDefaultStyleProvider(); } public void visitComponentElement(JRComponentElement componentElement) { JRFillComponentElement fill = null; if (componentElement != null) { fill = (JRFillComponentElement) get(componentElement); if (fill == null) { fill = new JRFillComponentElement(filler, componentElement, this); } } setVisitResult(fill); } public void visitGenericElement(JRGenericElement element) { JRFillGenericElement fill = null; if (element != null) { fill = (JRFillGenericElement) get(element); if (fill == null) { fill = new JRFillGenericElement(filler, element, this); } } setVisitResult(fill); } }