KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > za > co > csir > icomtek > workflow > handlers > RulesHandler


1 package za.co.csir.icomtek.workflow.handlers;
2
3 import java.util.Enumeration JavaDoc;
4
5 import za.co.csir.icomtek.workflow.interfaces.WorkflowContext;
6 import za.co.csir.icomtek.workflow.model.*;
7
8 /**
9  * This class handles evaluations of rules
10  */

11 public class RulesHandler extends BaseHandler {
12
13     private static final String JavaDoc AND = "and";
14     private static final String JavaDoc 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             // Recurse so we get to the base
27
for (Enumeration JavaDoc 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             // Evaluate the rules
38
for (Enumeration JavaDoc 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