/* * 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.design; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.crosstabs.JRCrosstab; import net.sf.jasperreports.engine.JRConstants; import net.sf.jasperreports.engine.JRDataset; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperReport; /** * Structure used to hold a report's expression evaluator compile data. * <p> * An instantce consists of expression evaluators for the main report dataset * and for sub datasets. * * @author Lucian Chirita (lucianc@users.sourceforge.net) * @version $Id: JRReportCompileData.java 3732 2010-04-12 13:08:04Z lucianc $ * * @see net.sf.jasperreports.engine.JasperReport#getCompileData() */ public class JRReportCompileData implements Serializable { private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID; /** * Main report dataset compile data. */ private Serializable mainDatasetCompileData; /** * Map containing compiled data per sub dataset name. */ private Map datasetCompileData; /** * Map containing compiled data per crosstab name. */ private Map crosstabCompileData; /** * Default constructor. */ public JRReportCompileData() { datasetCompileData = new HashMap(); crosstabCompileData = new HashMap(); } /** * Sets the main dataset compile data. * * @param compileData the main dataset compile data */ public void setMainDatasetCompileData(Serializable compileData) { mainDatasetCompileData = compileData; } /** * Sets the compile data for a dataset. * * @param dataset the dataset * @param compileData the compile data */ public void setDatasetCompileData(JRDataset dataset, Serializable compileData) { if (dataset.isMainDataset()) { setMainDatasetCompileData(compileData); } else { datasetCompileData.put(dataset.getName(), compileData); } } /** * Sets the compile data for a crosstab. * * @param crosstabId the generated crosstab Id, which will be used to retreive the crosstab compile data at fill time. * @param compileData the compile data */ public void setCrosstabCompileData(int crosstabId, Serializable compileData) { crosstabCompileData.put(Integer.valueOf(crosstabId), compileData); } /** * Returns the compile data for the main dataset. * * @return the compile data for the main dataset */ public Serializable getMainDatasetCompileData() { return mainDatasetCompileData; } /** * Returns the compile data for a dataset. * * @param dataset the dataset * @return the compile data * @throws JRException */ public Serializable getDatasetCompileData(JRDataset dataset) throws JRException { Serializable compileData; if (dataset.isMainDataset()) { compileData = getMainDatasetCompileData(); } else { compileData = (Serializable) datasetCompileData.get(dataset.getName()); if (compileData == null) { throw new JRException("Compile data for dataset " + dataset.getName() + " not found in the report."); } } return compileData; } /** * Returns the compile data for a crosstab. * * @param crosstab the crosstab * @return the compile data * @throws JRException */ public Serializable getCrosstabCompileData(JRCrosstab crosstab) throws JRException { Serializable compileData = (Serializable) crosstabCompileData.get(Integer.valueOf(crosstab.getId())); if (compileData == null) { throw new JRException("Compile data for crosstab not found in the report."); } return compileData; } public String getUnitName(JasperReport jasperReport, JRDataset dataset) { return JRAbstractCompiler.getUnitName(jasperReport, dataset); } public String getUnitName(JasperReport jasperReport, JRCrosstab crosstab) { return JRAbstractCompiler.getUnitName(jasperReport, crosstab); } }