net.sf.jasperreports.engine.fill.JRFillField Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasperreports Show documentation
Show all versions of jasperreports Show documentation
Free Java Reporting Library
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2019 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.fill;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRPropertiesHolder;
import net.sf.jasperreports.engine.JRPropertiesMap;
import net.sf.jasperreports.engine.JRPropertyExpression;
/**
* @author Teodor Danciu ([email protected])
*/
public class JRFillField implements JRField
{
/**
*
*/
protected JRField parent;
protected JRFillExpressionEvaluator expressionEvaluator;
protected List propertyExpressions;
protected JRPropertiesMap staticProperties;
protected JRPropertiesMap mergedProperties;
/**
*
*/
private Object previousOldValue;
private Object oldValue;
private Object value;
private Object savedValue;
/**
*
*/
protected JRFillField(
JRField field,
JRFillObjectFactory factory
)
{
factory.put(field, this);
parent = field;
expressionEvaluator = factory.getExpressionEvaluator();
staticProperties = field.hasProperties() ? field.getPropertiesMap().cloneProperties() : null;
mergedProperties = staticProperties;
JRPropertyExpression[] fieldPropertyExpressions = field.getPropertyExpressions();
propertyExpressions =
fieldPropertyExpressions == null
? new ArrayList(0)
: new ArrayList(Arrays.asList(fieldPropertyExpressions));
}
@Override
public String getName()
{
return parent.getName();
}
@Override
public String getDescription()
{
return parent.getDescription();
}
@Override
public void setDescription(String description)
{
}
@Override
public Class getValueClass()
{
return parent.getValueClass();
}
@Override
public String getValueClassName()
{
return parent.getValueClassName();
}
/**
*
*/
public Object getOldValue()
{
return oldValue;
}
/**
*
*/
public void setOldValue(Object oldValue)
{
this.oldValue = oldValue;
}
/**
*
*/
public Object getValue()
{
return value;
}
/**
*
*/
public void setValue(Object value)
{
this.value = value;
}
public Object getValue(byte evaluation)
{
Object returnValue;
switch (evaluation)
{
case JRExpression.EVALUATION_OLD:
returnValue = oldValue;
break;
default:
returnValue = value;
break;
}
return returnValue;
}
public void overwriteValue(Object newValue, byte evaluation)
{
switch (evaluation)
{
case JRExpression.EVALUATION_OLD:
savedValue = oldValue;
oldValue = newValue;
break;
default:
savedValue = value;
value = newValue;
break;
}
}
public void restoreValue(byte evaluation)
{
switch (evaluation)
{
case JRExpression.EVALUATION_OLD:
oldValue = savedValue;
break;
default:
value = savedValue;
break;
}
savedValue = null;
}
public Object getPreviousOldValue()
{
return previousOldValue;
}
public void setPreviousOldValue(Object previousOldValue)
{
this.previousOldValue = previousOldValue;
}
@Override
public boolean hasProperties()
{
return mergedProperties != null && mergedProperties.hasProperties();
}
@Override
public JRPropertiesMap getPropertiesMap()
{
return mergedProperties;
}
@Override
public JRPropertiesHolder getParentProperties()
{
return null;
}
@Override
public JRPropertyExpression[] getPropertyExpressions()
{
return propertyExpressions.toArray(new JRPropertyExpression[propertyExpressions.size()]);
}
/**
*
*/
protected void evaluateProperties() throws JRException
{
if (propertyExpressions.isEmpty())
{
mergedProperties = staticProperties;
}
else
{
JRPropertiesMap dynamicProperties = new JRPropertiesMap();
for (JRPropertyExpression prop : propertyExpressions)
{
String value = (String) evaluateExpression(prop.getValueExpression());
//if (value != null) //is the null value significant for some field properties?
{
dynamicProperties.setProperty(prop.getName(), value);
}
}
mergedProperties = dynamicProperties.cloneProperties();
mergedProperties.setBaseProperties(staticProperties);
}
}
/**
*
*/
protected final Object evaluateExpression(JRExpression expression) throws JRException
{
return expressionEvaluator.evaluate(expression, JRExpression.EVALUATION_DEFAULT);
}
@Override
public Object clone()
{
throw new UnsupportedOperationException();
}
}