jbpmexpressionevaluator.java

来自「jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业」· Java 代码 · 共 59 行

JAVA
59
字号
package org.jbpm.jpdl.el.impl;


import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmException;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.jpdl.el.ELException;
import org.jbpm.jpdl.el.VariableResolver;

public class JbpmExpressionEvaluator {

  static ExpressionEvaluatorImpl evaluator = new ExpressionEvaluatorImpl();
  
  static VariableResolver variableResolver = null;
  public static void setVariableResolver(VariableResolver variableResolver) {
    JbpmExpressionEvaluator.variableResolver = variableResolver;
  }
  
  public static Object evaluate(String expression, ExecutionContext executionContext) {
    Object result = null;
    
    ExecutionContext.pushCurrentContext(executionContext);
    try {
      VariableResolver usedResolver = null;
      
      if (variableResolver!=null) {
        usedResolver = variableResolver;
      } else {
        usedResolver = (VariableResolver) JbpmConfiguration.Configs.getObject("jbpm.variable.resolver");
      }
      
      String dollarExpression = translateExpressionToDollars(expression);

      result = evaluator.evaluate(dollarExpression, Object.class, usedResolver, null);

    } catch (ELException e) {
      
      throw new JbpmException("couldn't evaluate expression '"+expression+"'", (e.getRootCause()!=null ? e.getRootCause() : e));
    } finally {
      ExecutionContext.popCurrentContext(executionContext);
    }
    
    return result;
  }

  static String translateExpressionToDollars(String expression) {
    char[] chars = expression.toCharArray();
    int index = 0;
    while (index!=-1) {
      index = expression.indexOf("#{", index);
      if (index!=-1) {
        chars[index] = '$';
        index++;
      }
    }
    return new String(chars);
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?