@Override public Map<String, Object> evaluateGroovyExpressions(final Map<String, String> expressions, final ProcessDefinitionUUID processDefinitionUUID, final Map<String, Object> context) throws ProcessNotFoundException, GroovyException { Misc.checkArgsNotNull(processDefinitionUUID); if (expressions == null || expressions.isEmpty()) { return Collections.emptyMap(); } final ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(processDefinitionUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final Binding simpleBinding = GroovyBindingBuilder.getSimpleBinding(processDefinitionUUID, null, null, context, true, true); return evaluateGroovyExpressions(expressions, simpleBinding); } catch (final Exception e) { throw new GroovyException("Exception while getting binding. ProcessDefinitionUUID: " + processDefinitionUUID, e); } finally { if (ori != null && ori != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(ori); } } }
@Override public Map<String, Object> evaluateGroovyExpressions(final Map<String, String> expressions, final ProcessInstanceUUID processInstanceUUID, final Map<String, Object> context, final boolean useInitialVariableValues, final boolean propagate) throws InstanceNotFoundException, GroovyException { Misc.checkArgsNotNull(processInstanceUUID); if (expressions == null || expressions.isEmpty()) { return Collections.emptyMap(); } final ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { final InternalProcessInstance instance = EnvTool.getAllQueriers().getProcessInstance(processInstanceUUID); final ProcessDefinitionUUID definitionUUID = instance.getProcessDefinitionUUID(); final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(definitionUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final Binding binding = getBinding(definitionUUID, processInstanceUUID, null, context, false, useInitialVariableValues, propagate); final Map<String, Object> results = evaluateGroovyExpressions(expressions, binding); propagateVariablesIfNecessary(null, processInstanceUUID, propagate, binding); return results; } catch (final Exception e) { throw new GroovyException("Exception while evaluating expression. ProcessInstanceUUID: " + processInstanceUUID, e); } finally { if (ori != null && ori != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(ori); } } }
@Override public Map<String, Object> evaluateGroovyExpressions(final Map<String, String> expressions, final ActivityInstanceUUID activityUUID, final Map<String, Object> context, final boolean useActivityScope, final boolean propagate) throws InstanceNotFoundException, ActivityNotFoundException, GroovyException { Misc.checkArgsNotNull(activityUUID); if (expressions == null || expressions.isEmpty()) { return Collections.emptyMap(); } final ClassLoader ori = Thread.currentThread().getContextClassLoader(); try { final InternalActivityInstance activityInstance = EnvTool.getAllQueriers().getActivityInstance(activityUUID); final ProcessDefinitionUUID definitionUUID = activityInstance.getProcessDefinitionUUID(); final ClassLoader processClassLoader = EnvTool.getClassDataLoader().getProcessClassLoader(definitionUUID); Thread.currentThread().setContextClassLoader(processClassLoader); final Binding binding = getBinding(definitionUUID, activityInstance.getProcessInstanceUUID(), activityUUID, context, useActivityScope, false, propagate); final Map<String, Object> results = evaluateGroovyExpressions(expressions, binding); propagateVariablesIfNecessary(activityUUID, null, propagate, binding); return results; } catch (final Exception e) { throw new GroovyException("Exception while evaluating expression. ActivityInstanceUUID: " + activityUUID, e); } finally { if (ori != null && ori != Thread.currentThread().getContextClassLoader()) { Thread.currentThread().setContextClassLoader(ori); } } }