protected Object traverse(List<String> segments, Map<String, Object> model, ErrorHandler errorHandler, Token token) { return traverse(model, segments, 0, errorHandler, token); }
@Override protected Object traverse(Object obj, List<String> arg1, int arg2, ErrorHandler arg3, Token token) { // Throw exception if a token cannot be resolved instead of returning empty string. if (obj == null) { throw new IllegalArgumentException("Could not resolve " + token); } return super.traverse(obj, arg1, arg2, arg3, token); } });
protected Object traverse(List<String> segments, Map<String, Object> model, ErrorHandler errorHandler, Token token) { if (segments.size() == 0) { return null; } String objectName = segments.get(0); Object value = model.get(objectName); value = traverse(value, segments, 1, errorHandler, token); return value; }
@Override @SuppressWarnings("rawtypes") public Object getValue(TemplateContext context, Token token, List<String> segments, String expression) { Object value = traverse(segments, context.model, context.errorHandler, token); // if value implements both, we use the more specialized implementation if (value instanceof Processor) { value = ((Processor) value).eval(context); } else if (value instanceof Callable) { try { value = ((Callable) value).call(); } catch (Exception e) { } } return value; }
protected Object traverse(Object o, List<String> attributeNames, int index, ErrorHandler errorHandler, Token token) { Object result; if (index >= attributeNames.size()) { result = o; } else { if (o == null) { return null; } String attributeName = attributeNames.get(index); Object nextStep = nextStep(o, attributeName, errorHandler, token); result = traverse(nextStep, attributeNames, index + 1, errorHandler, token); } return result; }
@Override @SuppressWarnings("rawtypes") public Object getValue(TemplateContext context, Token token, List<String> segments, String expression) { Object value = traverse(segments, context.model, context.errorHandler, token); // if value implements both, we use the more specialized implementation if (value instanceof Processor) { value = ((Processor) value).eval(context); } else if (value instanceof Callable) { try { value = ((Callable) value).call(); } catch (Exception e) { } } return value; }
protected Object traverse(Object o, List<String> attributeNames, int index, ErrorHandler errorHandler, Token token) { Object result; if (index >= attributeNames.size()) { result = o; } else { if (o == null) { return null; } String attributeName = attributeNames.get(index); Object nextStep = nextStep(o, attributeName, errorHandler, token); result = traverse(nextStep, attributeNames, index + 1, errorHandler, token); } return result; }
public Object getValue(Map<String, Object> model, String expression) { String[] split = expression.split("\\."); List<String> segments = Arrays.asList(split); ErrorHandler errorHandler = new NoLogErrorHandler(); Token token = new InvalidToken(); Object value = traverse(segments, model, errorHandler, token); return value; }