Mercurial > hg > Members > shoshi > TreeCMSv2
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 } |