@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String expressionContent = expression.getContent(); final ClassLoader scriptClassLoader = Thread.currentThread().getContextClassLoader(); final String expressionName = expression.getName(); try { final GroovyShell shell = new GroovyShell(scriptClassLoader); // can put the name here final Script script = shell.parse(expressionContent); final Binding binding = new Binding(context); script.setBinding(binding); return script.evaluate(expressionContent); } catch (final MissingPropertyException e) { final String property = e.getProperty(); final StringBuilder builder = new StringBuilder("Expression "); builder.append(expressionName).append(" with content: ").append(expressionContent).append(" depends on ").append(property) .append(" is neither defined in the script nor in dependencies"); throw new SExpressionEvaluationException(builder.toString(), e, expressionName); } catch (final GroovyRuntimeException e) { throw new SExpressionEvaluationException(e, expressionName); } catch (final Exception e) { throw new SExpressionEvaluationException("Script throws an exception" + expression, e, expressionName); } }
@Override public Object evaluate(final SExpression expression, final Map<String, Object> context, final Map<Integer, Object> resolvedExpressions, final ContainerState containerState) throws SExpressionEvaluationException { final String expressionContent = expression.getContent(); final ClassLoader scriptClassLoader = Thread.currentThread().getContextClassLoader(); final String expressionName = expression.getName(); try { final GroovyShell shell = new GroovyShell(scriptClassLoader); // can put the name here final Script script = shell.parse(expressionContent); final Binding binding = new Binding(context); script.setBinding(binding); return script.evaluate(expressionContent); } catch (final MissingPropertyException e) { final String property = e.getProperty(); final StringBuilder builder = new StringBuilder("Expression "); builder.append(expressionName).append(" with content: ").append(expressionContent).append(" depends on ").append(property) .append(" is neither defined in the script nor in dependencies"); throw new SExpressionEvaluationException(builder.toString(), e, expressionName); } catch (final GroovyRuntimeException e) { throw new SExpressionEvaluationException(e, expressionName); } catch (final Exception e) { throw new SExpressionEvaluationException("Script throws an exception" + expression, e, expressionName); } }