package ee.telekom.workflow.graph.node.input;
import javax.el.ELProcessor;
import org.apache.commons.lang.StringUtils;
import ee.telekom.workflow.graph.Environment;
import ee.telekom.workflow.graph.GraphInstance;
import ee.telekom.workflow.graph.el.ElUtil;
/**
* Provides expression language based InputMapping against {@link Environment} variables.
*
* http://docs.oracle.com/javaee/7/api/javax/el/package-summary.html
*
* If the mapping uses an unknown variable "foobar" (which has not yet been set in the Environment), an exception will occur:
* "ELResolver cannot handle a null base Object with identifier 'foobar'"
*
* @author Erko Hansar
*/
public class ExpressionLanguageMapping<T> implements InputMapping<T>{
private String expression;
public ExpressionLanguageMapping( String expression ){
this.expression = expression;
}
public String getExpression(){
return expression;
}
@Override
@SuppressWarnings("unchecked")
public T evaluate( GraphInstance instance ){
if( StringUtils.isNotBlank( expression ) ){
ELProcessor processor = ElUtil.initNewELProcessor( instance.getEnvironment(), instance.getExternalId() );
Object expressionResult = processor.eval( ElUtil.removeBrackets( expression ) );
return (T)expressionResult;
}
return null;
}
}