1 package org.kuali.rice.krms.tree;
2
3 import org.apache.commons.lang.StringEscapeUtils;
4 import org.apache.commons.lang.StringUtils;
5 import org.kuali.rice.core.api.util.tree.Node;
6 import org.kuali.rice.core.api.util.tree.Tree;
7 import org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage;
8 import org.kuali.rice.krms.api.repository.proposition.PropositionDefinition;
9 import org.kuali.rice.krms.api.repository.proposition.PropositionType;
10 import org.kuali.rice.krms.dto.PropositionEditor;
11 import org.kuali.rice.krms.dto.RuleEditor;
12 import org.kuali.student.enrollment.class1.krms.dto.EnrolPropositionEditor;
13 import org.kuali.student.enrollment.class1.krms.tree.node.KSCompoundOpCodeNode;
14 import org.kuali.student.enrollment.class1.krms.tree.node.KSCompoundPropositionEditNode;
15 import org.kuali.student.enrollment.class1.krms.tree.node.KSSimplePropositionEditNode;
16 import org.kuali.student.enrollment.class1.krms.tree.node.KSSimplePropositionNode;
17 import org.kuali.student.enrollment.class1.krms.dto.EnrolRuleEditor;
18 import org.kuali.rice.krms.tree.node.RuleEditorTreeNode;
19 import org.kuali.student.enrollment.class2.courseoffering.service.decorators.PermissionServiceConstants;
20 import org.kuali.student.krms.naturallanguage.util.KsKrmsConstants;
21
22
23
24
25
26
27
28
29 public class RuleEditTreeBuilder extends AbstractTreeBuilder{
30
31 private static final long serialVersionUID = 1L;
32
33 public Tree buildTree(RuleEditor rule) {
34
35 Tree myTree = new Tree<RuleEditorTreeNode, String>();
36
37 Node<RuleEditorTreeNode, String> rootNode = new Node<RuleEditorTreeNode, String>();
38 myTree.setRootElement(rootNode);
39
40 PropositionEditor prop = (PropositionEditor) rule.getProposition();
41
42 if (prop != null){
43
44 addChildNode(rule, rootNode, prop);
45 }
46
47 return myTree;
48 }
49
50
51
52
53
54
55
56 private void addChildNode(RuleEditor rule, Node sprout, PropositionEditor prop) {
57
58
59
60
61 if (prop != null) {
62 if (PropositionType.SIMPLE.getCode().equalsIgnoreCase(prop.getPropositionTypeCode())) {
63
64
65 Node<RuleEditorTreeNode, String> child = new Node<RuleEditorTreeNode, String>();
66
67
68 if (prop.isEditMode()) {
69 child.setNodeType(KSSimplePropositionEditNode.NODE_TYPE);
70 KSSimplePropositionEditNode pNode = new KSSimplePropositionEditNode(prop);
71 child.setData(pNode);
72 } else {
73 child.setNodeLabel(this.buildNodeLabel(rule, prop));
74 child.setNodeType(KSSimplePropositionNode.NODE_TYPE);
75 KSSimplePropositionNode pNode = new KSSimplePropositionNode(prop);
76 child.setData(pNode);
77 }
78 sprout.getChildren().add(child);
79 } else if (PropositionType.COMPOUND.getCode().equalsIgnoreCase(prop.getPropositionTypeCode())) {
80
81 Node<RuleEditorTreeNode, String> aNode = new Node<RuleEditorTreeNode, String>();
82
83
84 if (prop.isEditMode()) {
85 aNode.setNodeLabel("");
86 aNode.setNodeType(KSCompoundPropositionEditNode.NODE_TYPE);
87 KSCompoundPropositionEditNode pNode = new KSCompoundPropositionEditNode(prop);
88 aNode.setData(pNode);
89 } else {
90 aNode.setNodeLabel(this.buildNodeLabel(rule, prop));
91 aNode.setNodeType(RuleEditorTreeNode.COMPOUND_NODE_TYPE);
92 RuleEditorTreeNode pNode = new RuleEditorTreeNode(prop);
93 aNode.setData(pNode);
94 }
95 sprout.getChildren().add(aNode);
96
97 int counter = 0;
98 for (PropositionEditor child : prop.getCompoundEditors()) {
99
100 if (counter > 0) {
101 addOpCodeNode(aNode, prop, counter);
102 }
103 counter++;
104
105 addChildNode(rule, aNode, child);
106 }
107 }
108 }
109 }
110
111 protected String getDescription(PropositionEditor proposition) {
112
113 proposition.setDescription(super.getDescription(proposition));
114 return proposition.getDescription();
115 }
116
117 private String buildNodeLabel(RuleEditor rule, PropositionEditor prop) {
118
119 String prefix = this.getPropositionPrefix(rule, prop);
120 return prefix + StringEscapeUtils.escapeHtml(this.getDescription(prop));
121 }
122
123
124
125
126
127
128
129
130 private void addOpCodeNode(Node currentNode, PropositionEditor prop, int counter) {
131
132 Node<KSCompoundOpCodeNode, String> aNode = new Node<KSCompoundOpCodeNode, String>();
133 aNode.setNodeLabel("");
134 aNode.setNodeType("ruleTreeNode compoundOpCodeNode");
135
136
137 PropositionEditor editor = new PropositionEditor();
138 editor.setKey(prop.getKey() + counter);
139 editor.setCompoundOpCode(prop.getCompoundOpCode());
140
141 aNode.setData(new KSCompoundOpCodeNode(editor));
142 currentNode.getChildren().add(aNode);
143 }
144
145 public String getNaturalLanguageUsageKey(){
146 return KsKrmsConstants.KRMS_NL_RULE_EDIT;
147 }
148 }