Package net.sf.jasperreports.engine.fill

Source Code of net.sf.jasperreports.engine.fill.JRFillObjectFactory$StylesList

/*
* 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 3939 2010-08-20 09:52:00Z teodord $
*/
public class JRFillObjectFactory extends JRAbstractObjectFactory
{


  /**
   *
   */
  protected JRBaseFiller filler;
  private JRFillExpressionEvaluator evaluator;

  private JRFillObjectFactory parentFiller;
 
//  private JRFont defaultFont;

  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);
  }

}
TOP

Related Classes of net.sf.jasperreports.engine.fill.JRFillObjectFactory$StylesList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.