package org.activityinfo.model.expr; import org.activityinfo.model.expr.eval.EvalContext; import org.activityinfo.model.expr.functions.Casting; import org.activityinfo.model.type.FieldType; import org.activityinfo.model.type.FieldValue; /** * Root of the expression hierarchy. Expressions are used for validation and * calculation by AI */ public abstract class ExprNode { /** * Evaluates the expression to a real value. * @param context */ public abstract FieldValue evaluate(EvalContext context); /** * * @return the FieldType of the expression node */ public abstract FieldType resolveType(EvalContext context); public abstract String asExpression(); public boolean evaluateAsBoolean(EvalContext context) { FieldValue fieldValue = evaluate(context); return Casting.toBoolean(fieldValue); } public abstract <T> T accept(ExprVisitor<T> visitor); }