Package org.jbpm.jpdl.el.impl

Source Code of org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator

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.ExpressionEvaluator;
import org.jbpm.jpdl.el.VariableResolver;
import org.jbpm.jpdl.el.FunctionMapper;

public class JbpmExpressionEvaluator {

  static ExpressionEvaluator evaluator = new ExpressionEvaluatorImpl();
  public static void setExpressionEvaluator(ExpressionEvaluator expressionEvaluator) {
    JbpmExpressionEvaluator.evaluator = expressionEvaluator;
  }
 
  static VariableResolver variableResolver = null;
  public static void setVariableResolver(VariableResolver variableResolver) {
    JbpmExpressionEvaluator.variableResolver = variableResolver;
  }
 
  static FunctionMapper functionMapper = null;
  public static void setFunctionMapper(FunctionMapper functionMapper) {
    JbpmExpressionEvaluator.functionMapper = functionMapper;
  }
 
  public static Object evaluate(String expression, ExecutionContext executionContext) {
    return evaluate(expression, executionContext, getUsedVariableResolver(), getUsedFunctionMapper());
  }

  public static Object evaluate(String expression, ExecutionContext executionContext, VariableResolver usedVariableResolver, FunctionMapper functionMapper) {
    Object result = null;
   
    ExecutionContext.pushCurrentContext(executionContext);
    try {
      String dollarExpression = translateExpressionToDollars(expression);
      result = evaluator.evaluate(dollarExpression, Object.class, usedVariableResolver, functionMapper);

    } 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) {
    int hashIndex = expression.indexOf("#{");
    if (hashIndex == -1) return expression;
   
    char[] expressionChars = expression.toCharArray();
    do {
      expressionChars[hashIndex] = '$';
      hashIndex = expression.indexOf("#{", hashIndex + 2);
    } while (hashIndex != -1);
    return new String(expressionChars);
  }

  public static VariableResolver getUsedVariableResolver() {
    if (variableResolver!=null) {
      return variableResolver;
    }
    return (VariableResolver) JbpmConfiguration.Configs.getObject("jbpm.variable.resolver");
  }

  public static FunctionMapper getUsedFunctionMapper() {
    if (functionMapper!=null) {
      return functionMapper;
    }
    if (JbpmConfiguration.Configs.hasObject("jbpm.function.mapper")) {
      return (FunctionMapper) JbpmConfiguration.Configs.getObject("jbpm.function.mapper");
    }
    return null;
  }
}
TOP

Related Classes of org.jbpm.jpdl.el.impl.JbpmExpressionEvaluator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.