|
1 | 1 | package edu.rpi.legup.model.tree;
|
2 | 2 |
|
| 3 | +import com.google.firebase.database.core.operation.Merge; |
3 | 4 | import edu.rpi.legup.controller.TreeController;
|
4 | 5 | import edu.rpi.legup.model.gameboard.Board;
|
| 6 | +import edu.rpi.legup.model.rules.MergeRule; |
5 | 7 | import edu.rpi.legup.ui.proofeditorui.treeview.TreeView;
|
6 |
| -import java.util.ArrayList; |
7 |
| -import java.util.HashSet; |
8 |
| -import java.util.List; |
9 |
| -import java.util.Set; |
| 8 | + |
| 9 | +import java.util.*; |
10 | 10 |
|
11 | 11 | /**
|
12 | 12 | * Represents a tree structure in a puzzle. The tree consists of {@link TreeNode}s and {@link
|
@@ -96,18 +96,54 @@ public TreeElement addTreeElement(TreeTransition transition, TreeNode treeNode)
|
96 | 96 | public void removeTreeElement(TreeElement element) {
|
97 | 97 | if (element.getType() == TreeElementType.NODE) {
|
98 | 98 | TreeNode node = (TreeNode) element;
|
99 |
| - |
100 |
| - node.getParent().removeChild(node); |
101 |
| - node.getParent().setChildNode(null); |
| 99 | + removeTreeNode(node); |
102 | 100 | } else {
|
103 |
| - TreeTransition transition = (TreeTransition) element; |
| 101 | + TreeTransition trans = (TreeTransition) element; |
| 102 | + removeTreeTransition(trans); |
| 103 | + |
| 104 | +// trans.getParents().forEach(n -> n.removeChild(trans)); |
| 105 | +// TreeController treeController = new TreeController(); |
| 106 | +// TreeView treeView = new TreeView(treeController); |
| 107 | +// treeView.removeTreeTransition(trans); |
| 108 | + } |
| 109 | + } |
| 110 | + |
| 111 | + public void removeTreeNode(TreeNode node) { |
| 112 | +// node.getParent().removeChild(node); |
| 113 | + node.getParent().setChildNode(null); |
| 114 | + |
| 115 | + List<TreeTransition> children = node.getChildren(); |
| 116 | + if (children != null) { |
| 117 | + Iterator<TreeTransition> childrenItr = children.iterator(); |
| 118 | + while (childrenItr.hasNext()) { |
| 119 | + TreeTransition transition = childrenItr.next(); |
| 120 | + if (transition.getRule() instanceof MergeRule) { |
| 121 | + Iterator<TreeNode> iterator = transition.getParents().iterator(); |
| 122 | + while (iterator.hasNext()) { |
| 123 | + TreeNode parent = iterator.next(); |
| 124 | + if (parent != node) { |
| 125 | + parent.getChildren().remove(transition); |
| 126 | + } |
| 127 | + } |
| 128 | + } else { |
| 129 | + removeTreeTransition(transition); |
| 130 | + } |
| 131 | + } |
| 132 | + } |
| 133 | + } |
| 134 | + |
| 135 | + public void removeTreeTransition(TreeTransition trans) { |
| 136 | + List<TreeNode> parents = trans.getParents(); |
| 137 | + |
| 138 | + trans.getParents().forEach(n -> n.removeChild(trans)); |
| 139 | + TreeController treeController = new TreeController(); |
| 140 | + TreeView treeView = new TreeView(treeController); |
| 141 | + treeView.removeTreeTransition(trans); |
104 | 142 |
|
105 |
| - transition.getParents().forEach(n -> n.removeChild(transition)); |
106 |
| - TreeController treeController = new TreeController(); |
107 |
| - TreeView treeView = new TreeView(treeController); |
108 |
| - treeView.removeTreeTransition(transition); |
109 |
| - transition.getParents().get(0).getChildren().forEach(TreeTransition::reverify); |
| 143 | + if (trans.getChildNode() != null) { |
| 144 | + removeTreeNode(trans.getChildNode()); |
110 | 145 | }
|
| 146 | + parents.getFirst().getChildren().forEach(TreeTransition::reverify); |
111 | 147 | }
|
112 | 148 |
|
113 | 149 | /**
|
|
0 commit comments