@Override public FieldValue evaluate(EvalContext context) { return expr.evaluate(context); }
@Override public FieldValue evaluate(EvalContext context) { FieldValue baseValue = value.evaluate(context); if(baseValue instanceof EnumValue) { EnumValue enumValue = (EnumValue) baseValue; return evaluateEnumValue(enumValue); } return BooleanFieldValue.FALSE; }
@Override public FieldValue evaluate(EvalContext context) { List<FieldValue> evaluatedArguments = Lists.newArrayList(); for (FormulaNode expr : arguments) { evaluatedArguments.add(expr.evaluate(context)); } return function.apply(evaluatedArguments); }
public boolean evaluateAsBoolean(EvalContext context) { FieldValue fieldValue = evaluate(context); return Casting.toBoolean(fieldValue); }
private static boolean evalFilter(TypedFormRecord record, FormClass formClass, FormulaNode filter) { EvalContext context = new FormEvalContext(formClass, record); return filter.evaluate(context) == BooleanFieldValue.TRUE; }
@Override public FieldValue getValue(TypedFormRecord instance, EvalContext context) { if(errorValue != null) { return errorValue; } if(evaluating) { throw new CircularReferenceException(field.getCode()); } evaluating = true; try { return expr.evaluate(context); } finally { evaluating = false; } }
private String computeSerialNumberPrefix( FormClass formClass, SerialNumberType type, TypedFormRecord effectiveRecord) { if(!type.hasPrefix()) { return null; } try { FormEvalContext evalContext = new FormEvalContext(formClass); evalContext.setInstance(effectiveRecord); FormulaNode formula = FormulaParser.parse(type.getPrefixFormula()); FieldValue prefixValue = formula.evaluate(evalContext); if(prefixValue instanceof TextValue) { return ((TextValue) prefixValue).asString(); } else { throw new IllegalStateException("Prefix " + type.getPrefixFormula() + " resolves to type " + prefixValue.getTypeClass().getId()); } } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to compute prefix for serial number", e); return null; } }
private static boolean evalPermission(FormMetadata form, TypedFormRecord record, Operation operation) { if(!form.getPermissions().isAllowed(operation)) { return false; } if(!form.getPermissions().isFiltered(operation)) { return true; } String filter = form.getPermissions().getFilter(operation); try { FormEvalContext context = new FormEvalContext(form.getSchema(), record); FormulaNode formula = FormulaParser.parse(filter); FieldValue result = formula.evaluate(context); return result == BooleanFieldValue.TRUE; } catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to evaluate permission filter '" + filter + "'", e); return false; } }
private void evaluate(String exprString, boolean expectedValue) { FormulaLexer lexer = new FormulaLexer(exprString); FormulaParser parser = new FormulaParser(lexer); FormulaNode expr = parser.parse(); FieldValue result = expr.evaluate(EmptyEvalContext.INSTANCE); assertThat(exprString, Casting.toBoolean(result), equalTo(expectedValue)); }
private void evaluate(String exprString, double expectedValue) { FormulaLexer lexer = new FormulaLexer(exprString); FormulaParser parser = new FormulaParser(lexer); FormulaNode expr = parser.parse(); FieldValue value = expr.evaluate(EmptyEvalContext.INSTANCE); if(Double.isNaN(expectedValue)) { assertTrue(exprString + " is NaN", Double.isNaN(Casting.toQuantity(value).getValue())); } else { assertThat(exprString, Casting.toQuantity(value).getValue(), closeTo(expectedValue, 0)); } }
private void eval(String relevanceExpression, boolean expectedValue, TypedFormRecord instance) { FormulaLexer lexer = new FormulaLexer(relevanceExpression); FormulaParser parser = new FormulaParser(lexer); FormulaNode expr = parser.parse(); Assert.assertEquals(relevanceExpression, expectedValue, Casting.toBoolean(expr.evaluate(new FormEvalContext(formClass, instance)))); }
private void eval(String relevanceExpression, boolean expectedValue, TypedFormRecord instance) { FormulaLexer lexer = new FormulaLexer(relevanceExpression); FormulaParser parser = new FormulaParser(lexer); FormulaNode expr = parser.parse(); Assert.assertEquals(relevanceExpression, expectedValue, Casting.toBoolean(expr.evaluate(new FormEvalContext(formClass, instance)))); }