comparison src/treecms/tree/util/NodeFinder.java @ 17:168deb591f21

commit
author shoshi
date Tue, 24 May 2011 00:33:12 +0900
parents
children 084de6909451
comparison
equal deleted inserted replaced
16:bb9760760744 17:168deb591f21
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 }