1 package za.co.csir.icomtek.workflow.handlers; 2 3 import java.util.Enumeration ; 4 5 import za.co.csir.icomtek.workflow.interfaces.WorkflowContext; 6 import za.co.csir.icomtek.workflow.model.*; 7 8 11 public class RulesHandler extends BaseHandler { 12 13 private static final String AND = "and"; 14 private static final String OR = "or"; 15 16 public static boolean evaluateRules(Rules rules, WorkflowContext ctx){ 17 LogicalOperator operator = rules.getLogicalOperator(); 18 return evaluateLogicalTree(operator, ctx); 19 } 20 21 private static boolean evaluateLogicalTree(LogicalOperator operator, 22 WorkflowContext ctx) 23 { 24 boolean retVal = true; 25 if (operator.getLogicalOperatorCount() > 0) { 26 for (Enumeration e = operator.enumerateLogicalOperator(); 28 e.hasMoreElements(); ) { 29 LogicalOperator lo = (LogicalOperator)e.nextElement(); 30 if (operator.getOperatorName().equalsIgnoreCase(AND)) { 31 retVal &= evaluateLogicalTree(lo, ctx); 32 } else if (operator.getOperatorName().equalsIgnoreCase(OR)) { 33 retVal |= evaluateLogicalTree(lo, ctx); 34 } 35 } 36 } else { 37 for (Enumeration e = operator.enumerateRule(); e.hasMoreElements();) { 39 Rule rule = (Rule)e.nextElement(); 40 boolean ruleEval = evaluateRule(rule, ctx); 41 System.err.println("<< rulesHandler retVal before: "+retVal); 42 if (operator.getOperatorName().equalsIgnoreCase(AND)) { 43 retVal &= ruleEval; 44 } else if (operator.getOperatorName().equalsIgnoreCase(OR)) { 45 retVal |= ruleEval; 46 } 47 System.err.println("<< rulesHandler evaluated rule to: "+ruleEval); 48 System.err.println("<< rulesHandler retVal after: "+retVal); 49 } 50 } 51 System.err.println("<< rulesHandler returning: "+retVal); 52 return retVal; 53 } 54 55 private static boolean evaluateRule (Rule rule, WorkflowContext ctx) { 56 return ComparatorHandler.compare(rule.getComparator(), 57 rule.getParameterElementAsReference(), 58 ctx); 59 } 60 61 } 62 | Popular Tags |