use of com.serotonin.m2m2.rt.script.ResultTypeException in project ma-core-public by infiniteautomation.
the class ScriptUtils method coerce.
/**
* Coerce an object into a DataValue
* @param input
* @param toDataTypeId
* @return
* @throws ResultTypeException
*/
public static DataValue coerce(Object input, int toDataTypeId) throws ResultTypeException {
DataValue value;
if (input instanceof DataValue)
return (DataValue) input;
if (input == null) {
if (toDataTypeId == DataTypes.BINARY)
value = new BinaryValue(false);
else if (toDataTypeId == DataTypes.MULTISTATE)
value = new MultistateValue(0);
else if (toDataTypeId == DataTypes.NUMERIC)
value = new NumericValue(0);
else if (toDataTypeId == DataTypes.ALPHANUMERIC)
value = new AlphanumericValue("");
else
value = null;
} else if (input instanceof AbstractPointWrapper) {
value = ((AbstractPointWrapper) input).getValueImpl();
if ((value != null) && (value.getDataType() != toDataTypeId))
return throwResultTypeException(value, toDataTypeId);
} else // See if the type matches.
if (toDataTypeId == DataTypes.BINARY && input instanceof Boolean)
value = new BinaryValue((Boolean) input);
else if (toDataTypeId == DataTypes.MULTISTATE) {
if (input instanceof Number)
value = new MultistateValue(((Number) input).intValue());
else if (input instanceof String) {
try {
value = new MultistateValue(Integer.parseInt((String) input));
} catch (NumberFormatException e) {
return throwResultTypeException(input, toDataTypeId);
}
} else
return throwResultTypeException(input, toDataTypeId);
} else if (toDataTypeId == DataTypes.NUMERIC) {
if (input instanceof Number)
value = new NumericValue(((Number) input).doubleValue());
else if (input instanceof NumericValue)
value = (NumericValue) input;
else if (input instanceof String) {
try {
value = new NumericValue(Double.parseDouble((String) input));
} catch (NumberFormatException e) {
return throwResultTypeException(input, toDataTypeId);
}
} else
return throwResultTypeException(input, toDataTypeId);
} else if (toDataTypeId == DataTypes.ALPHANUMERIC)
value = new AlphanumericValue(input.toString());
else
// If not, ditch it.
return throwResultTypeException(input, toDataTypeId);
return value;
}
Aggregations