public static PropertyValueResult notDefined() { return new PropertyValueResult(false, Either.ofLeft(new UnsupportedOperationException("Property was not defined."))); }
@Override public Object getValue(String symbol) { symbol = EvalHelper.normalizeVariableName( symbol ); if (rootObject != null) { PropertyValueResult dv = EvalHelper.getDefinedValue(rootObject, symbol); if (dv.isDefined()) { return dv.getValueResult().getOrElse(null); } } if ( variables.containsKey( symbol ) ) { return variables.get( symbol ); } if ( parentFrame != null ) { return parentFrame.getValue( symbol ); } return null; }
public static PropertyValueResult getDefinedValue(final Object current, final String property) { Object result; if ( current == null ) { return PropertyValueResult.notDefined(); } else if ( current instanceof Map ) { result = ((Map) current).get(property); return PropertyValueResult.notDefined(); break; default: return PropertyValueResult.notDefined(); break; default: return PropertyValueResult.notDefined(); break; } else { return PropertyValueResult.notDefined(); break; default: return PropertyValueResult.notDefined(); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); return PropertyValueResult.of(Either.ofLeft(e)); return PropertyValueResult.notDefined();
@Override public boolean isDefined(String symbol) { symbol = EvalHelper.normalizeVariableName( symbol ); if (rootObject != null) { if (EvalHelper.getDefinedValue(rootObject, symbol).isDefined()) { return true; } else { // do nothing! it might be shaded at this level for "item" or being in the parent frame. } } if ( variables.containsKey( symbol ) ) { return true; } if ( parentFrame != null ) { return parentFrame.isDefined( symbol ); } return false; }
public static PropertyValueResult of(Either<Exception, Object> valueResult) { return new PropertyValueResult(true, valueResult); }
public static PropertyValueResult ofValue(Object value) { return new PropertyValueResult(true, Either.ofRight(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; } }
/** * {@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); }