net.sf.jasperreports.engine.design.JRDesignDatasetRun Maven / Gradle / Ivy
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2014 TIBCO Software Inc. 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 .
*/
package net.sf.jasperreports.engine.design;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
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.ReturnValue;
import net.sf.jasperreports.engine.base.JRBaseDatasetRun;
import net.sf.jasperreports.engine.design.events.JRChangeEventsSupport;
import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport;
import net.sf.jasperreports.engine.util.JRCloneUtils;
/**
* Implementation of {@link net.sf.jasperreports.engine.JRDatasetRun JRDatasetRun} to be used for report desing.
*
* @author Lucian Chirita ([email protected])
*/
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";
public static final String PROPERTY_RETURN_VALUES = "returnValues";
/**
* Creates an empty dataset instantiation.
*/
public JRDesignDatasetRun()
{
parametersMap = new HashMap();
parametersList = new ArrayList();
returnValues = new ArrayList(2);
}
/**
* 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 = 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 parameter 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 void setUUID(UUID uuid)
{
this.uuid = uuid;
}
/**
* Adds a return value to the subdataset run.
*
* @param returnValue the return value to be added.
*/
public void addReturnValue(ReturnValue returnValue)
{
this.returnValues.add(returnValue);
getEventSupport().fireCollectionElementAddedEvent(PROPERTY_RETURN_VALUES,
returnValue, returnValues.size() - 1);
}
/**
* Returns the list of values to be copied from the subdataset run into the main dataset.
*
* @return list of {@link ReturnValue ReturnValue} objects
*/
public List getReturnValuesList()
{
return returnValues;
}
/**
* Removes a return value from the subdataset run.
*
* @param returnValue the return value to be removed
* @return true
if the return value was found and removed
*/
public boolean removeReturnValue(ReturnValue returnValue)
{
int idx = this.returnValues.indexOf(returnValue);
if (idx >= 0)
{
this.returnValues.remove(idx);
getEventSupport().fireCollectionElementRemovedEvent(PROPERTY_RETURN_VALUES, returnValue, idx);
return true;
}
return false;
}
/**
*
*/
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 = JRCloneUtils.nullSafeClone(parametersList.get(i));
clone.parametersList.add(parameter);
clone.parametersMap.put(parameter.getName(), parameter);
}
}
clone.eventSupport = null;
return clone;
}
private transient JRPropertyChangeSupport eventSupport;
public JRPropertyChangeSupport getEventSupport()
{
synchronized (this)
{
if (eventSupport == null)
{
eventSupport = new JRPropertyChangeSupport(this);
}
}
return eventSupport;
}
}