Clover Coverage Report - Kuali Student 1.1 (Aggregated)
Coverage timestamp: Sun Mar 6 2011 20:32:39 EST
../../../../../../../img/srcFileCovDistChart9.png 32% of files have more coverage
31   101   10   10.33
10   54   0.32   3
3     3.33  
1    
 
  BooleanFunction       Line # 24 31 0% 10 4 90.9% 0.90909094
 
  (40)
 
1    /**
2    * Copyright 2010 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10    * software distributed under the License is distributed on an "AS IS"
11    * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12    * or implied. See the License for the specific language governing
13    * permissions and limitations under the License.
14    */
15   
16    /**
17    *
18    */
19    package org.kuali.student.common.messagebuilder.booleanmessage.ast;
20   
21    import java.util.ArrayList;
22    import java.util.List;
23   
 
24    public class BooleanFunction {
25    private String booleanExpression;
26    private BinaryMessageTree ASTtree;
27    private BooleanNode root;
28    private ArrayList<String> funcVars = new ArrayList<String>();
29    private ArrayList<String> symbols = new ArrayList<String>();
30   
 
31  46 toggle public BooleanFunction(String booleanExpression) {
32    // Since the AST calls the Boolean Function parser,
33    // calling the AST here asserts the function is valid
34  46 ASTtree = new BinaryMessageTree();
35  46 root = ASTtree.buildTree(booleanExpression);
36  45 this.booleanExpression = booleanExpression;
37    }
38   
39    /**
40    * Parse function string to get the variables
41    * 1. Need this function at rule creation time (i.e when in BRMS) to insert
42    * the action part of the rules
43    * 2. Also need this at runtime to populate the HashMaps in the
44    * proposition which are used as tree leaf nodes in the AST.
45    *
46    * @return List of variables
47    */
 
48  44 toggle public List<String> getVariables() {
49  44 ASTtree.traverseTreePostOrderDontSetNode(root, null);
50  44 List<BooleanNode> treeNodes = ASTtree.getAllNodes();
51   
52  44 for (BooleanNode bnode : treeNodes) {
53  192 String label = bnode.getLabel();
54  192 if (label.equals("+") || label.equals("*")) {
55  74 continue;
56    }
57  118 funcVars.add(label);
58    }
59  44 return funcVars;
60    }
61   
62    /**
63    * Parse function string to get all the symbols.
64    * Need this only at rule creation time. Can't load the symbols in
65    * getVariables() because the AST removes the parenthesis and
66    * we need those. Get them from the string which has been
67    * validated in the constructor example A0*B4+(C*D)
68    *
69    * @return List of symbols
70    */
 
71  1 toggle public List<String> getSymbols() {
72  1 String workString = null;
73    // remove spaces
74  1 this.booleanExpression = (booleanExpression == null ? null : booleanExpression.replaceAll("\\s+", ""));
75   
76  1 workString = this.booleanExpression;
77   
78  12 while (workString != null && workString.length() > 0) {
79  11 String propositionKeyPattern = "^[A-Z][0-9]*";
80  11 String restOfFunctionString = null;
81  11 String theSymbol = null;
82  11 int restOfFunctionStringStartIndex = 0;
83  11 if (workString.matches(propositionKeyPattern + ".*")) {
84  4 restOfFunctionString = workString.replaceFirst(propositionKeyPattern, "");
85  4 restOfFunctionStringStartIndex = workString.indexOf(restOfFunctionString);
86  4 if (restOfFunctionStringStartIndex <= 0) {
87  0 theSymbol = workString;
88  0 workString = "";
89    } else {
90  4 theSymbol = workString.substring(0, restOfFunctionStringStartIndex);
91  4 workString = restOfFunctionString;
92    }
93    } else {
94  7 theSymbol = workString.substring(0, 1);
95  7 workString = workString.substring(1, workString.length());
96    }
97  11 symbols.add(theSymbol);
98    }
99  1 return symbols;
100    }
101    }