String variableName = variableVersions.get(variableNumber).getName();
VariableReader variableReader = variables.get(variableName);
if (variableReader.getEventType() != null) {
if ((newValue != null) && (!JavaClassHelper.isSubclassOrImplementsInterface(newValue.getClass(), variableReader.getEventType().getUnderlyingType()))) {
throw new VariableValueException("Variable '" + variableName
+ "' of declared event type '" + variableReader.getEventType().getName() + "' underlying type '" + variableReader.getEventType().getUnderlyingType().getName() +
"' cannot be assigned a value of type '" + valueType.getName() + "'");
}
EventBean eventBean = eventAdapterService.adapterForType(newValue, variableReader.getEventType());
write(variableNumber, eventBean);
return;
}
Class variableType = variableReader.getType();
if ((valueType.equals(variableType)) || (variableType == Object.class))
{
write(variableNumber, newValue);
return;
}
if ((!JavaClassHelper.isNumeric(variableType)) ||
(!JavaClassHelper.isNumeric(valueType)))
{
throw new VariableValueException("Variable '" + variableName
+ "' of declared type '" + variableType.getName() +
"' cannot be assigned a value of type '" + valueType.getName() + "'");
}
// determine if the expression type can be assigned
if (!(JavaClassHelper.canCoerce(valueType, variableType)))
{
throw new VariableValueException("Variable '" + variableName
+ "' of declared type '" + variableType.getName() +
"' cannot be assigned a value of type '" + valueType.getName() + "'");
}
Object valueCoerced = JavaClassHelper.coerceBoxed((Number) newValue, variableType);