/* * 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.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jasperreports.engine.JRConstants; import net.sf.jasperreports.engine.JRDatasetParameter; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExpression; import net.sf.jasperreports.engine.base.JRBaseDatasetRun; import net.sf.jasperreports.engine.design.events.JRChangeEventsSupport; import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport; /** * Implementation of {@link net.sf.jasperreports.engine.JRDatasetRun JRDatasetRun} to be used for report desing. * * @author Lucian Chirita (lucianc@users.sourceforge.net) * @version $Id: JRDesignDatasetRun.java 3033 2009-08-27 11:46:22Z teodord $ */ public class JRDesignDatasetRun extends JRBaseDatasetRun implements JRChangeEventsSupport { private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID; private Map parametersMap; private List parametersList; public static final String PROPERTY_CONNECTION_EXPRESSION = "connectionExpression"; public static final String PROPERTY_DATASET_NAME = "datasetName"; public static final String PROPERTY_DATA_SOURCE_EXPRESSION = "dataSourceExpression"; public static final String PROPERTY_PARAMETERS_MAP_EXPRESSION = "parametersMapExpression"; public static final String PROPERTY_PARAMETERS = "parameters"; /** * Creates an empty dataset instantiation. */ public JRDesignDatasetRun() { parametersMap = new HashMap(); parametersList = new ArrayList(); } /** * Adds a parameter value. * * @param parameter the parameter value * @throws JRException * @see net.sf.jasperreports.engine.JRDatasetRun#getParameters() */ public void addParameter(JRDatasetParameter parameter) throws JRException { if (parametersMap.containsKey(parameter.getName())) { throw new JRException("Duplicate declaration of dataset parameter : " + parameter.getName()); } parametersMap.put(parameter.getName(), parameter); parametersList.add(parameter); getEventSupport().fireCollectionElementAddedEvent(PROPERTY_PARAMETERS, parameter, parametersList.size() - 1); } /** * Removes a parameter value. * * @param parameterName the parameter name * @return the removed parameter value */ public JRDatasetParameter removeParameter(String parameterName) { JRDatasetParameter param = (JRDatasetParameter) parametersMap.remove(parameterName); if (param != null) { int idx = parametersList.indexOf(param); if (idx >= 0) { parametersList.remove(idx); } getEventSupport().fireCollectionElementRemovedEvent(PROPERTY_PARAMETERS, param, idx); } return param; } /** * Removes a parameter value. * * @param parameter the parameter value * @return the paramter value */ public JRDatasetParameter removeParameter(JRDatasetParameter parameter) { return removeParameter(parameter.getName()); } /** * Sets the connection expression. * * @param connectionExpression the connection expression * @see net.sf.jasperreports.engine.JRDatasetRun#getConnectionExpression() */ public void setConnectionExpression(JRExpression connectionExpression) { Object old = this.connectionExpression; this.connectionExpression = connectionExpression; getEventSupport().firePropertyChange(PROPERTY_CONNECTION_EXPRESSION, old, this.connectionExpression); } /** * Sets the sub dataset name. * * @param datasetName the sub dataset name * @see net.sf.jasperreports.engine.JRDatasetRun#getDatasetName() */ public void setDatasetName(String datasetName) { Object old = this.datasetName; this.datasetName = datasetName; getEventSupport().firePropertyChange(PROPERTY_DATASET_NAME, old, this.datasetName); } /** * Sets the data source expression. * * @param dataSourceExpression the data source expression * @see net.sf.jasperreports.engine.JRDatasetRun#getDataSourceExpression() */ public void setDataSourceExpression(JRExpression dataSourceExpression) { Object old = this.dataSourceExpression; this.dataSourceExpression = dataSourceExpression; getEventSupport().firePropertyChange(PROPERTY_DATA_SOURCE_EXPRESSION, old, this.dataSourceExpression); } /** * Sets the parameters map expression. * * @param parametersMapExpression the parameters map expression * @see net.sf.jasperreports.engine.JRDatasetRun#getParametersMapExpression() */ public void setParametersMapExpression(JRExpression parametersMapExpression) { Object old = this.parametersMapExpression; this.parametersMapExpression = parametersMapExpression; getEventSupport().firePropertyChange(PROPERTY_PARAMETERS_MAP_EXPRESSION, old, this.parametersMapExpression); } public JRDatasetParameter[] getParameters() { JRDatasetParameter[] params = new JRDatasetParameter[parametersList.size()]; parametersList.toArray(params); return params; } /** * */ public Object clone() { JRDesignDatasetRun clone = (JRDesignDatasetRun)super.clone(); if (parametersList != null) { clone.parametersList = new ArrayList(parametersList.size()); clone.parametersMap = new HashMap(parametersList.size()); for(int i = 0; i < parametersList.size(); i++) { JRDatasetParameter parameter = (JRDatasetParameter)((JRDatasetParameter)parametersList.get(i)).clone(); clone.parametersList.add(parameter); clone.parametersMap.put(parameter.getName(), parameter); } } return clone; } private transient JRPropertyChangeSupport eventSupport; public JRPropertyChangeSupport getEventSupport() { synchronized (this) { if (eventSupport == null) { eventSupport = new JRPropertyChangeSupport(this); } } return eventSupport; } }