public Object extract (final String name, Object... parameters) throws ExtractException { List<Callable> callables = new ArrayList<Callable>(); if (parameters.length == 0) { callables.add(tryField()); } callables.add(tryMethod()); if (knownType(context)) callables.add(tryKnownType()); for (Callable callable : callables) { Result<Object> result = callable.execute(name, parameters); if (result.hasResult()) return result.getResult(); } throw new ExtractException("Unable to find field or method "+name+" in "+context); }
@Override public Object calculate(JtwigContext context) throws CalculateException { Object contextObject = null; for (Object obj : getList()) { if (contextObject == null) contextObject = resolve(obj, context); else { ObjectExtractor objectExtractor = new ObjectExtractor(contextObject); if (obj instanceof Variable) { try { contextObject = objectExtractor.extract(((Variable) obj).getIdentifier()); } catch (ObjectExtractor.ExtractException e) { throw new CalculateException(e); } } else if (obj instanceof FunctionElement) { try { List<?> arguments = (List<?>) ((FunctionElement) obj).getArguments().calculate(context); contextObject = objectExtractor.extract(((FunctionElement) obj).getName(), arguments.toArray()); } catch (ObjectExtractor.ExtractException e) { throw new CalculateException(e); } } } } return contextObject; }
@Override public Object calculate(JtwigContext context) throws CalculateException { Object contextObject = null; for (Object obj : getList()) { if (contextObject == null) contextObject = resolve(obj, context); else { ObjectExtractor objectExtractor = new ObjectExtractor(contextObject); if (obj instanceof Variable) { try { contextObject = objectExtractor.extract(((Variable) obj).getIdentifier()); } catch (ObjectExtractor.ExtractException e) { throw new CalculateException(e); } } else if (obj instanceof FunctionElement) { try { List<?> arguments = (List<?>) ((FunctionElement) obj).getArguments().calculate(context); contextObject = objectExtractor.extract(((FunctionElement) obj).getName(), arguments.toArray()); } catch (ObjectExtractor.ExtractException e) { throw new CalculateException(e); } } } } return contextObject; }
public Object extract (final String name, Object... parameters) throws ExtractException { List<Callable> callables = new ArrayList<Callable>(); if (parameters.length == 0) { callables.add(tryField()); } callables.add(tryMethod()); if (knownType(context)) callables.add(tryKnownType()); for (Callable callable : callables) { Result<Object> result = callable.execute(name, parameters); if (result.hasResult()) return result.getResult(); } throw new ExtractException("Unable to find field or method "+name+" in "+context); }