1 package org.sapia.soto.state.control; 2 3 import org.apache.commons.jexl.Expression; 4 import org.apache.commons.jexl.ExpressionFactory; 5 import org.apache.commons.lang.ClassUtils; 6 import org.apache.commons.lang.StringUtils; 7 8 import org.sapia.soto.state.Result; 9 import org.sapia.soto.state.ScopeMap; 10 import org.sapia.soto.state.helpers.CompositeStep; 11 12 import java.util.Map ; 13 14 15 23 public class If extends CompositeStep { 24 private Expression _expr; 25 private String [] _scopes; 26 27 public If() { 28 } 29 30 33 public String getName() { 34 return ClassUtils.getShortClassName(getClass()); 35 } 36 37 public void setTest(String expr) throws Exception { 38 _expr = ExpressionFactory.createExpression(expr); 39 } 40 41 public void setScopes(String scopes) { 42 _scopes = StringUtils.split(scopes, ","); 43 44 for (int i = 0; i < _scopes.length; i++) { 45 _scopes[i] = _scopes[i].trim(); 46 } 47 } 48 49 52 protected boolean doExecute(Result st) { 53 Map scopes = st.getContext().getScopes(); 54 ScopeMap map = new ScopeMap(scopes, _scopes); 55 Object evaled = null; 56 57 try { 58 evaled = _expr.evaluate(map); 59 60 Boolean b = (Boolean ) evaled; 61 62 return b.booleanValue(); 63 } catch (ClassCastException e) { 64 st.error("'if' must evaluate to a Boolean, not a " + evaled); 65 66 return false; 67 } catch (Exception e) { 68 e.printStackTrace(); 69 st.error("Could not evaluate: '" + _expr.getExpression() + "' - " + 70 e.getMessage()); 71 72 return false; 73 } 74 } 75 } 76 | Popular Tags |