001package org.kuali.rice.krms.tree; 002 003import org.kuali.rice.core.api.util.tree.Node; 004import org.kuali.rice.core.api.util.tree.Tree; 005import org.kuali.rice.krms.api.repository.LogicalOperator; 006import org.kuali.rice.krms.api.repository.proposition.PropositionType; 007import org.kuali.rice.krms.dto.PropositionEditor; 008import org.kuali.rice.krms.dto.RuleEditor; 009import org.kuali.rice.krms.tree.node.TreeNode; 010 011import java.util.HashMap; 012import java.util.List; 013import java.util.Map; 014 015/** 016 * Created with IntelliJ IDEA. 017 * User: Peggy 018 * Date: 2/4/13 019 * Time: 3:26 PM 020 * To change this template use File | Settings | File Templates. 021 */ 022public class RuleViewTreeBuilder extends AbstractTreeBuilder { 023 024 private static final long serialVersionUID = 1L; 025 026 public Tree<TreeNode, String> buildTree(RuleEditor rule) { 027 028 Tree myTree = new Tree<TreeNode, String>(); 029 030 Node<TreeNode, String> rootNode = new Node<TreeNode, String>(); 031 rootNode.setNodeLabel("root"); 032 rootNode.setNodeType("rootNode"); 033 rootNode.setData(new TreeNode("Rule:")); 034 myTree.setRootElement(rootNode); 035 036 if (rule == null) { 037 return myTree; 038 } 039 040 PropositionEditor prop = (PropositionEditor) rule.getProposition(); 041 042 if (prop != null) { 043 044 buildPreviewTree(rule, rootNode, prop); 045 046 //Underline the first node in the preview. 047 if ((rootNode.getChildren() != null) && (rootNode.getChildren().size() > 0)) { 048 Node<TreeNode, String> firstNode = rootNode.getChildren().get(0); 049 if ((firstNode.getChildren() != null) && (firstNode.getChildren().size() > 0)) { 050 firstNode.setNodeType("subruleHeader subruleElement"); 051 firstNode.setNodeLabel("<u>" + firstNode.getNodeLabel() + ":</u>"); 052 } 053 } 054 } 055 056 return myTree; 057 } 058 059 private void buildPreviewTree(RuleEditor rule, Node<TreeNode, String> currentNode, PropositionEditor prop) { 060 if (prop != null) { 061 062 Node<TreeNode, String> newNode = new Node<TreeNode, String>(); 063 newNode.setNodeLabel(this.buildNodeLabel(rule, prop)); 064 newNode.setNodeType("subruleElement"); 065 066 TreeNode tNode = new TreeNode(newNode.getNodeLabel()); 067 tNode.setListItems(this.getListItems(prop)); 068 tNode.setKey(prop.getKey()); 069 newNode.setData(tNode); 070 currentNode.getChildren().add(newNode); 071 072 if (PropositionType.COMPOUND.getCode().equalsIgnoreCase(prop.getPropositionTypeCode())) { 073 074 boolean first = true; 075 for (PropositionEditor child : prop.getCompoundEditors()) { 076 // add an opcode node in between each of the children. 077 if (!first) { 078 //addOpCodeNode(newNode, propositionEditor); 079 Node<TreeNode, String> opNode = new Node<TreeNode, String>(); 080 if (LogicalOperator.AND.getCode().equalsIgnoreCase(prop.getCompoundOpCode())) { 081 opNode.setNodeLabel("AND"); 082 } else if (LogicalOperator.OR.getCode().equalsIgnoreCase(prop.getCompoundOpCode())) { 083 opNode.setNodeLabel("OR"); 084 } 085 086 opNode.setData(new TreeNode(prop.getCompoundOpCode())); 087 newNode.getChildren().add(opNode); 088 } 089 first = false; 090 // call to build the childs node 091 buildPreviewTree(rule, newNode, child); 092 } 093 } 094 095 } 096 } 097 098 public List<String> getListItems(PropositionEditor propositionEditor) { 099 return null; 100 } 101}