annotate src/treecms/memory/OnMemoryTree.java @ 3:5fa718b63cd5

finished treecms.memory basic implementation ( not tested yet. )
author shoshi
date Fri, 18 Feb 2011 02:14:10 +0900
parents 4a5ee88f02cf
children f5ed85be5640
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
1 package treecms.memory;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
3 import java.util.LinkedList;
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
4 import java.util.concurrent.ConcurrentHashMap;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
5
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
6 import treecms.api.Forest;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
7 import treecms.api.Node;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
8 import treecms.api.NodeData;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
9 import treecms.api.NodeID;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
10 import treecms.api.Tree;
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
11 import treecms.tree.util.PreorderTreewalker;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
12
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
13 public class OnMemoryTree implements Tree
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
14 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
15 OnMemoryNode m_root;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
16 OnMemoryForest m_forest;
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
17 ConcurrentHashMap<String,OnMemoryNode> m_table;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
18
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
19 public OnMemoryTree(OnMemoryNode _newRoot,OnMemoryForest _forest)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
20 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
21 m_root = _newRoot;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
22 m_forest = _forest;
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
23
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
24 m_table = new ConcurrentHashMap<String,OnMemoryNode>();
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
25 for(Node elem : new PreorderTreewalker(m_root)){
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
26 m_table.put(elem.getID().getUUID(),(OnMemoryNode)elem);
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
27 }
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
28 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
29
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
30 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
31 public Forest getForest()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
32 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
33 return m_forest;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
34 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
35
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
36 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
37 public NodeID getID()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
38 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
39 return m_root.getID();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
40 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
41
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
42 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
43 public NodeData getData()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
44 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
45 return m_root.getData();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
46 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
47
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
48 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
49 public NodeData newData()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
50 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
51 return m_root.newData();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
52 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
53
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
54 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
55 public Node getNodeByUUID(String _uuid)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
56 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
57 return m_table.get(_uuid);
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
58 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
59
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
60 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
61 public synchronized Node updateTree(Node _target,NodeData _newData)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
62 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
63 LinkedList<OnMemoryNode> path = findAndClone(m_root,(OnMemoryNode)_target,_newData);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
64
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
65 if(path == null)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
66 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
67 //not found.
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
68 return null;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
69 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
70
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
71 m_root = path.peekFirst();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
72 return path.peekLast();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
73 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
74
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
75 OnMemoryNode cloneNode(OnMemoryNode _target,NodeData _newData)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
76 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
77 OnMemoryNode clone = m_forest.createNode(_target.getID().update());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
78
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
79 if(_newData != null){
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
80 clone.m_data.add(_newData.list());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
81 clone.m_data.set(_newData.get());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
82 }else{
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
83 clone.m_data.add(_target.m_data.list());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
84 clone.m_data.set(_target.m_data.get());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
85 }
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
86
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
87 m_table.put(clone.getID().getUUID(),clone);
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
88 return clone;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
89 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
90
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
91 LinkedList<OnMemoryNode> findAndClone(OnMemoryNode _parent,OnMemoryNode _target,NodeData _newData)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
92 {
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
93 if(_parent.getID().isFamily(_target.getID())){
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
94 //find.
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
95 LinkedList<OnMemoryNode> path = new LinkedList<OnMemoryNode>();
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
96 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,_newData);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
97 path.addFirst(clone);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
98 return path;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
99 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
100
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
101 for(Node child : _parent.getData().list()){
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
102 LinkedList<OnMemoryNode> path = findAndClone((OnMemoryNode)child,_target,_newData);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
103 if(path != null){
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
104 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,null);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
105 clone.getData().list().remove(child);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
106 clone.getData().list().add(path.peekFirst());
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
107 path.addFirst(clone);
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
108 return path;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
109 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
110 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
111
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
112 return null; //not found.
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
113 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
114
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
115 @Override
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
116 public Node getRoot()
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
117 {
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
118 return m_root;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
119 }
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
120
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
121 }