1 package org.kuali.student.common.ui.client.configurable.mvc.multiplicity;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.kuali.student.common.ui.client.configurable.mvc.sections.GroupSection;
8
9 public class SwapCompositeCondition {
10 private String conditionId;
11 private CompositeConditionOperator op;
12 private List<SwapCondition> childrenConditions;
13 private List<SwapCompositeCondition> childrenCompositeConditions;
14 public SwapCompositeCondition(CompositeConditionOperator op) {
15 setOp(op);
16 }
17 public CompositeConditionOperator getOp() {
18 return op;
19 }
20 public void setOp(CompositeConditionOperator op) {
21 this.op = op;
22 }
23 public List<SwapCondition> getChildrenConditions() {
24 if (childrenConditions == null) {
25 childrenConditions = new ArrayList<SwapCondition>();
26 }
27 return childrenConditions;
28 }
29 public void setChildrenConditions(List<SwapCondition> childrenConditions) {
30 this.childrenConditions = childrenConditions;
31 }
32 public List<SwapCompositeCondition> getChildrenCompositeConditions() {
33 return childrenCompositeConditions;
34 }
35 public void setChildrenCompositeConditions(List<SwapCompositeCondition> childrenCompositeConditions) {
36 this.childrenCompositeConditions = childrenCompositeConditions;
37 }
38 public boolean evaluate(GroupSection section, Map<String, String> helperFieldKeys) {
39 boolean result = false;
40 boolean allSubCompositeConditionsMet = true;
41 boolean allSubConditionsMet = true;
42 if (childrenCompositeConditions != null && !childrenCompositeConditions.isEmpty()) {
43 for (SwapCompositeCondition childCompositeCondition : childrenCompositeConditions) {
44 boolean subCompositeConditionMet = childCompositeCondition.evaluate(section, helperFieldKeys);
45 if (op == CompositeConditionOperator.OR) {
46
47 if (subCompositeConditionMet) {
48 allSubCompositeConditionsMet = true;
49 break;
50 }
51 } else if (op == CompositeConditionOperator.AND) {
52
53 if (!subCompositeConditionMet) {
54 allSubCompositeConditionsMet = false;
55 break;
56 }
57 }
58 }
59 }
60 if (childrenConditions != null && !childrenConditions.isEmpty()) {
61 for (SwapCondition childCondition : childrenConditions) {
62 boolean subConditionMet = childCondition.evaluate(section, helperFieldKeys);
63 if (op == CompositeConditionOperator.OR) {
64
65 if (subConditionMet) {
66 allSubConditionsMet = true;
67 break;
68 }
69 } else if (op == CompositeConditionOperator.AND) {
70
71 if (!subConditionMet) {
72 allSubConditionsMet = false;
73 break;
74 }
75 }
76 }
77 }
78 if (op == CompositeConditionOperator.OR) {
79 result = allSubCompositeConditionsMet || allSubConditionsMet;
80 } else if (op == CompositeConditionOperator.AND) {
81 result = allSubCompositeConditionsMet && allSubConditionsMet;
82 }
83 return result;
84 }
85 public String getConditionId() {
86 return conditionId;
87 }
88 public void setConditionId(String conditionId) {
89 this.conditionId = conditionId;
90 }
91
92 }