package ee.telekom.workflow.graph.node.gateway.condition;
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 condition evaluation against {@link Environment} variables.
*
* http://docs.oracle.com/javaee/7/api/javax/el/package-summary.html
*
* If the condition 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 ExpressionLanguageCondition implements Condition{
private String condition;
public ExpressionLanguageCondition( String condition ){
this.condition = condition;
}
public String getCondition(){
return condition;
}
@Override
public boolean evaluate( GraphInstance instance ){
boolean result = false;
if( StringUtils.isNotBlank( condition ) ){
ELProcessor processor = ElUtil.initNewELProcessor( instance.getEnvironment(), instance.getExternalId() );
result = (boolean)processor.eval( condition );
}
return result;
}
}