/** * {@link #getDefinedValue(Object, String)} method instead. * @deprecated this method cannot distinguish null because: 1. property undefined for current, 2. an error, 3. a properly defined property value valorized to null. * */ public static Object getValue(final Object current, final String property) { return getDefinedValue(current, property).getValueResult().getOrElse(null); }
public static Object coerceNumber(Object value) { if ( value instanceof Number && !(value instanceof BigDecimal) ) { return getBigDecimalOrNull( value ); } else { return value; } }
/** * FEEL spec Table 41: Specific semantics of equality * Delegates to {@link EvalHelper} except evaluationcontext */ public static Boolean eq(Object left, Object right) { return EvalHelper.isEqual(left, right, null); }
public FEELImpl(List<FEELProfile> profiles) { this(ClassLoaderUtil.findDefaultClassLoader(), profiles); }
public static Object coerceNumber(Object value) { return EvalHelper.coerceNumber(value); }
private Object fetchValue(final Object o, final String... names) { Object result = o; for (String nr : names) { result = EvalHelper.getDefinedValue(result, nr) .getValueResult() .cata(err -> { // no need to report error here, eg: [ {x:1, y:2}, {x:2} ].y results in [2] with no errors. return null; }, Function.identity()); } return result; } }
public static PropertyValueResult ofValue(Object value) { return new PropertyValueResult(true, Either.ofRight(value)); }
public boolean isRight() { return ! isLeft(); }
public static String createMessage( Message0 message) { return Msg.buildMessage(message); } public static String createMessage( Message1 message, Object p1) {
public static Object and(boolean left, Object right) { if (left == true) { return EvalHelper.getBooleanOrNull(right); } else { return false; } }
public boolean followUp( String t, boolean commit ) { if( currentNode == null ) { // this happens when the start() call above does not // find a root token return false; } Node node = findToken( currentNode, t ); if( commit ) { currentNode = node; } return node != null; }
public static PropertyValueResult of(Either<Exception, Object> valueResult) { return new PropertyValueResult(true, valueResult); }
public static String createMessage( Message1 message, Object p1) { return Msg.buildMessage(message, p1); } public static String createMessage( Message2 message, Object p1, Object p2) {
public static Object or(Object left, boolean right) { if (right == true) { return true; } else { return EvalHelper.getBooleanOrNull(left); } }
public static String createMessage( Message3 message, Object p1, Object p2, Object p3) { return Msg.buildMessage(message, p1, p2, p3); } public static String createMessage( Message4 message, Object p1, Object p2, Object p3, Object p4) {
/** * Implements the ternary logic OR operation */ public static Object or(Object left, Object right, EvaluationContext ctx) { Boolean l = EvalHelper.getBooleanOrNull( left ); Boolean r = EvalHelper.getBooleanOrNull( right ); // have to check for all nulls first to avoid NPE if ( (l == null && r == null) || (l == null && r == false) || (r == null && l == false) ) { return null; } else if ( l == null || r == null ) { return true; } return l || r; }
public static String createMessage( Message2 message, Object p1, Object p2) { return Msg.buildMessage(message, p1, p2); } public static String createMessage( Message3 message, Object p1, Object p2, Object p3) {
/** * Implements the ternary logic AND operation */ public static Object and(Object left, Object right, EvaluationContext ctx) { Boolean l = EvalHelper.getBooleanOrNull( left ); Boolean r = EvalHelper.getBooleanOrNull( right ); // have to check for all nulls first to avoid NPE if ( (l == null && r == null) || (l == null && r == true) || (r == null && l == true) ) { return null; } else if ( l == null || r == null ) { return false; } return l && r; }
public static String createMessage( Message4 message, Object p1, Object p2, Object p3, Object p4) { return Msg.buildMessage(message, p1, p2, p3, p4); }