17
|
1 package treecms.tree.util;
|
|
2
|
|
3 import treecms.api.Node;
|
|
4 import treecms.api.NodeID;
|
|
5
|
|
6 public class NodeFinder<T extends Node<T>>
|
|
7 {
|
|
8 private T m_root;
|
|
9 public NodeFinder(T _root)
|
|
10 {
|
|
11 m_root = _root;
|
|
12 }
|
|
13
|
|
14 public T findByUUID(final String _uuid)
|
|
15 {
|
|
16 Evaluator<T,T> ev = new Evaluator<T,T>(){
|
|
17 private T m_res = null;
|
|
18 @Override
|
|
19 public boolean evaluate(T _target)
|
|
20 {
|
|
21 if(_target.getID().getUUID().equals(_uuid)){
|
|
22 m_res = _target;
|
|
23 return true;
|
|
24 }
|
|
25 return false;
|
|
26 }
|
|
27 @Override
|
|
28 public T getResult()
|
|
29 {
|
|
30 return m_res;
|
|
31 }
|
|
32 };
|
|
33
|
|
34 _recursiveFinder(m_root,ev);
|
|
35 return ev.getResult();
|
|
36 }
|
|
37
|
|
38 public T findByNodeID(final NodeID _id)
|
|
39 {
|
|
40 Evaluator<T,T> ev = new Evaluator<T,T>(){
|
|
41 private T m_res = null;
|
|
42 @Override
|
|
43 public boolean evaluate(T _target)
|
|
44 {
|
|
45 if(_target.getID().equals(_id)){
|
|
46 m_res = _target;
|
|
47 return true;
|
|
48 }
|
|
49 return false;
|
|
50 }
|
|
51
|
|
52 @Override
|
|
53 public T getResult()
|
|
54 {
|
|
55 return m_res;
|
|
56 }
|
|
57
|
|
58 };
|
|
59
|
|
60 _recursiveFinder(m_root,ev);
|
|
61 return ev.getResult();
|
|
62 }
|
|
63
|
|
64 private boolean _recursiveFinder(T _cur,Evaluator<T,?> _e)
|
|
65 {
|
|
66 if(_e.evaluate(_cur)){
|
|
67 return true;
|
|
68 }
|
|
69
|
|
70 for(T child : _cur.getList()){
|
|
71 if(_recursiveFinder(child,_e)){
|
|
72 return true;
|
|
73 }
|
|
74 }
|
|
75
|
|
76 return false;
|
|
77 }
|
|
78
|
|
79 private static interface Evaluator<T,R>
|
|
80 {
|
|
81 public boolean evaluate(T _target);
|
|
82 public R getResult();
|
|
83 }
|
|
84 }
|