/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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 General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.scripting;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.projectforge.calendar.TimePeriod;
import org.projectforge.task.TaskDO;
import org.projectforge.user.PFUserDO;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
public class ScriptParameter implements Serializable
{
private static final long serialVersionUID = 2270347937331330184L;
@XStreamAsAttribute
protected ScriptParameterType type;
@XStreamAsAttribute
protected String parameterName;
protected String stringValue;
@XStreamAsAttribute
protected Integer intValue;
@XStreamAsAttribute
protected BigDecimal decimalValue;
@XStreamAsAttribute
protected Date dateValue;
protected transient TaskDO task;
protected transient PFUserDO user;
protected TimePeriod timePeriodValue;
public ScriptParameter(final String parameterName, final ScriptParameterType type)
{
this.parameterName = parameterName;
this.type = type;
}
public Object getValue()
{
if (type == ScriptParameterType.STRING) {
return stringValue;
} else if (type == ScriptParameterType.DECIMAL) {
return decimalValue;
} else if (type == ScriptParameterType.DATE) {
return dateValue;
} else if (type == ScriptParameterType.TIME_PERIOD) {
return timePeriodValue;
} else if (type == ScriptParameterType.INTEGER) {
return intValue;
} else if (type == ScriptParameterType.TASK) {
return task;
} else if (type == ScriptParameterType.USER) {
return user;
}
throw new UnsupportedOperationException("Parameter type '" + type + "' not supported.");
}
public void setValue(final Object value)
{
if (type == ScriptParameterType.STRING) {
stringValue = (String) value;
} else if (type == ScriptParameterType.DECIMAL) {
decimalValue = (BigDecimal) value;
} else if (type == ScriptParameterType.DATE) {
dateValue = (Date) value;
} else if (type == ScriptParameterType.TIME_PERIOD) {
timePeriodValue = (TimePeriod) value;
} else if (type == ScriptParameterType.INTEGER) {
intValue = (Integer) value;
} else if (type == ScriptParameterType.TASK) {
setTask((TaskDO) value);
} else if (type == ScriptParameterType.USER) {
setUser((PFUserDO) value);
} else {
throw new UnsupportedOperationException("Parameter type '" + type + "' not supported.");
}
}
public ScriptParameterType getType()
{
return type;
}
public String getParameterName()
{
return parameterName;
}
public String getStringValue()
{
return stringValue;
}
public void setStringValue(String stringValue)
{
if (type != ScriptParameterType.STRING) {
throw new IllegalArgumentException("Cannot set date for non string parameter: " + type);
}
this.stringValue = stringValue;
}
public Integer getIntValue()
{
return intValue;
}
public void setIntValue(Integer intValue)
{
if (type != ScriptParameterType.INTEGER) {
throw new IllegalArgumentException("Cannot set date for non integer parameter: " + type);
}
this.intValue = intValue;
}
public BigDecimal getDecimalValue()
{
return decimalValue;
}
public void setDecimalValue(BigDecimal decimalValue)
{
if (type != ScriptParameterType.DECIMAL) {
throw new IllegalArgumentException("Cannot set date for non decimal parameter: " + type);
}
this.decimalValue = decimalValue;
}
public Date getDateValue()
{
return dateValue;
}
public void setDateValue(Date dateValue)
{
if (type != ScriptParameterType.DATE) {
throw new IllegalArgumentException("Cannot set date for non date parameter: " + type);
}
this.dateValue = dateValue;
}
public TimePeriod getTimePeriodValue()
{
return timePeriodValue;
}
public void setTimePeriodValue(TimePeriod timePeriodValue)
{
if (type != ScriptParameterType.TIME_PERIOD) {
throw new IllegalArgumentException("Cannot set date for non time period parameter: " + type);
}
this.timePeriodValue = timePeriodValue;
}
public void setType(ScriptParameterType type)
{
this.type = type;
}
public void setParameterName(String parameterName)
{
this.parameterName = parameterName;
}
public TaskDO getTask()
{
return task;
}
public void setTask(TaskDO task)
{
if (type != ScriptParameterType.TASK) {
throw new IllegalArgumentException("Cannot set date for non task parameter: " + type);
}
this.task = task;
if (task != null) {
intValue = task.getId();
} else {
intValue = null;
}
}
public PFUserDO getUser()
{
return user;
}
public void setUser(PFUserDO user)
{
if (type != ScriptParameterType.USER) {
throw new IllegalArgumentException("Cannot set date for non user parameter: " + type);
}
this.user = user;
if (user != null) {
intValue = user.getId();
} else {
intValue = null;
}
}
public String getAsString()
{
final StringBuffer buf = new StringBuffer();
buf.append("[").append(parameterName).append(',').append(type).append(',');
if (type.isIn(ScriptParameterType.TASK, ScriptParameterType.USER) == true) {
buf.append(intValue);
} else {
buf.append(getValue());
}
buf.append(']');
return buf.toString();
}
@Override
public String toString()
{
final ToStringBuilder tos = new ToStringBuilder(this);
tos.append(parameterName);
tos.append(type);
if (type.isIn(ScriptParameterType.TASK, ScriptParameterType.USER) == true) {
tos.append(intValue);
} else {
tos.append(getValue());
}
return tos.toString();
}
}