protected Object traverse(List<String> segments, Map<String, Object> model, ErrorHandler errorHandler, Token token) { return traverse(model, segments, 0, errorHandler, token); }
@Override public Object getValue(TemplateContext context, Token arg1, List<String> arg2, String expression) { // First look in model map. Needed for dot-separated properties Object value = context.model.get(expression); if (value != null) { return value; } else { return super.getValue(context, arg1, arg2, expression); } }
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; }
protected Map<String, String> parsePattern(String pattern, Map<String, Object> model) { logger.log(Level.FINE, "Extracting parameters from pattern="+pattern); Map<String, String> parameters = new HashMap<String, String>(); if (pattern != null) { String[] tokens = pattern.split(";"); for (String token : tokens) { int index = token.indexOf('='); String key, value = null; if (index > 0) { key = token.substring(0, index); value = token.substring(index + 1); } else { key = token; } logger.log(Level.FINE, "Extracted parameter with key=" + key + ", value=" + value); if (value != null && value.startsWith("$")) { String expression = value.substring(1); logger.log(Level.FINE, "Resolving pattern value with path=" + expression); DefaultModelAdaptor modelAdaptor = new DefaultModelAdaptor(); value = (String) modelAdaptor.getValue(model, expression); } parameters.put(key, value); } } return parameters; } }
result = accessMap((Map) o, rawAttributeName); } else { List<Object> arrayAsList = Util.arrayAsList(o); result = getPropertyValue(o, rawAttributeName); } catch (Exception e) { if (o != ERROR_STRING) { result = getIndexFromArray(result, arrayIndex, errorHandler, token);
@Override public List<ErrorEntry> getStaticErrors() { final Engine engine = new Engine(); final JournalingErrorHandler errorHandler = new JournalingErrorHandler(); engine.setErrorHandler(errorHandler); final ScopedMap scopedMap = new ScopedMap(Collections.EMPTY_MAP); final Locale locale = Locale.getDefault(); this.context = new TemplateContext(this.template, locale, this.sourceName, scopedMap, new DefaultModelAdaptor(), engine, errorHandler, null); transformPure(this.context); final List<ErrorEntry> staticErrors = new ArrayList<>(); for (ErrorEntry entry: errorHandler.entries) { if (entry.errorMessage.isStatic) { staticErrors.add(entry); } } return staticErrors; }
@SuppressWarnings("rawtypes") protected Object nextStep(Object o, String attributeName, ErrorHandler errorHandler, Token token) { Object result; if (o instanceof String) { errorHandler.error("no-call-on-string", token, new ModelBuilder( "receiver", o.toString()).build()); return o; } else if (o instanceof Map) { Map map = (Map) o; result = map.get(attributeName); } else { try { result = getPropertyValue(o, attributeName); } catch (Exception e) { errorHandler.error("property-access-error", token, new ModelBuilder("property", attributeName, "object", o, "exception", e).build()); result = ""; } } return result; }
final Locale locale = Locale.getDefault(); context = new TemplateContext(template, locale, sourceName, scopedMap, new DefaultModelAdaptor(), engine, engine.getErrorHandler(), processListener);
@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(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; }
final Locale locale = Locale.getDefault(); this.context = new TemplateContext(this.template, locale, this.sourceName, scopedMap, new DefaultModelAdaptor(), engine, engine.getErrorHandler(), processListener); transformPure(this.context);
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; }
@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; }
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; }