package org.activityinfo.model.expr.functions;
import org.activityinfo.model.expr.diagnostic.InvalidTypeException;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.type.FieldValue;
import org.activityinfo.model.type.HasSetFieldValue;
import org.activityinfo.model.type.number.Quantity;
import org.activityinfo.model.type.primitive.BooleanFieldValue;
import java.util.Set;
public class Casting {
public static Quantity toQuantity(FieldValue fieldValue) {
if(fieldValue instanceof Quantity) {
return (Quantity) fieldValue;
} else if(fieldValue == null) {
return new Quantity(Double.NaN);
} else {
throw new InvalidTypeException("Cannot cast " + fieldValue + " to quantity");
}
}
public static boolean toBoolean(FieldValue value) {
if(value == BooleanFieldValue.TRUE) {
return true;
} else if(value == BooleanFieldValue.FALSE) {
return false;
} else {
throw new InvalidTypeException("Cannot cast [" + value + "] to boolean");
}
}
public static Set<ResourceId> toSet(FieldValue value) {
if (value instanceof HasSetFieldValue) {
return ((HasSetFieldValue) value).getResourceIds();
}else {
throw new InvalidTypeException("Cannot cast [" + value + "] to Set<ResourceId>");
}
}
}