131
132 @Override
133 public int compareTo(Node o) {
134 return this.getId().compareTo(o.getId());
135 }
136
137 }
Tree.java:
1 public class Tree<T extends Node> {
2
3 private String type;
4 private Node root; // root节点
5 private Map<Integer, T> nodeHolder = new HashMap<Integer, T>();// 节点持有器
6
7 private NodeStore<T> nodeStore;
8
9 /**
10 * 将平面的node list构建成树
11 *
12 * @throws TreeException
13 */
14 public void build() throws TreeException {
15 List<T> nodes = nodeStore.findByType(type);
16 // 如果nodes为空,则不做任何处理
17 if (nodes == null || nodes.isEmpty()) {
18 return;
19 }
20 // 设置root和node持有器
21 for (T node : nodes) {
22 if (node.isRootNode()) {
23 this.root = node;
24 }
25 nodeHolder.put(node.getId(), node);
26 }
27
28 // 如果root为空,则build失败了
29 if (root == null) {
30 throw new TreeException("no root node found.");
31 }
32
33 // 建立节点之前关系
34 for (T node : nodes) {
35 if (node.isRootNode()) {
36 continue;
37 }
38 Node parent = getNodeById(node.getParentId());
39 if (parent == null) {
40 throw new TreeException("no parent node found.current node id is:" + node.getId());
41 }
42 parent.addChild(node);
43 }
44
45 // 排序
46 root.sortAllChidren();
47 }
48
49 /**
50 * 得到root节点
51 *
52 * @return
53 */
54 public Node getRoot() {
55 return root;
56 }
57
58 /**
59 * 根据id得到对应节点
60 *
61 * @param id
62 * @return
63 */
64 public Node getNodeById(Integer id) {
65 return nodeHolder.get(id);
66 }
67
68 public void setType(String type) {
69 this.type = type;
70 }
71
72 public void setNodeStore(NodeStore nodeStore) {
73 this.nodeStore = nodeStore;
74 }
75
76 }
3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/