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

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