annotate src/treecms/memory/OnMemoryTreeEditor.java @ 6:12604eb6b615

added javadoc
author shoshi
date Mon, 14 Mar 2011 23:24:38 +0900
parents 5fa718b63cd5
children fc19e38b669b
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
6
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
3 import java.util.LinkedList;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
4
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
5 import treecms.api.Node;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
6 import treecms.api.NodeData;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
7 import treecms.api.TreeEditor;
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
8 import treecms.merger.Merger;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
9 import treecms.merger.ReplaceMerger;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
10
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
11 public class OnMemoryTreeEditor extends OnMemoryTree implements TreeEditor
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
12 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
13 OnMemoryTree m_tree;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
14 OnMemoryNode m_oldRoot;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
15
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
16 public OnMemoryTreeEditor(OnMemoryForest _forest,OnMemoryTree _tree)
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
17 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
18 super(_tree.m_root,_forest);
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
19 m_oldRoot = m_root;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
20 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
21
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
22 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
23 public boolean commit(boolean _force)
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
24 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
25 if(!check() || _force){
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
26 m_tree.m_root = m_root;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
27 }
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
28 return false;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
29 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
30
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
31 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
32 public boolean pull()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
33 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
34 m_root = m_tree.m_root;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
35 return true;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
36 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
37
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
38 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
39 public boolean check()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
40 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
41 if(m_tree.m_root.getID().equals(m_oldRoot.getID())){
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
42 return false;
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
43 }
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
44 return true;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
45 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
46
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
47 @Override
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
48 public void merge()
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
49 {
3
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
50 //call merger
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
51 Merger merger = new ReplaceMerger();
5fa718b63cd5 finished treecms.memory basic implementation ( not tested yet. )
shoshi
parents: 2
diff changeset
52 m_root = (OnMemoryNode)merger.merge(m_tree.m_root,m_root);
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
53 }
6
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
54
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
55 @Override
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
56 public synchronized Node updateTree(Node _target,NodeData _newData)
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
57 {
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
58 LinkedList<OnMemoryNode> path = findAndClone(m_root,(OnMemoryNode)_target,_newData);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
59
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
60 if(path == null)
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
61 {
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
62 //not found.
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
63 return null;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
64 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
65
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
66 m_root = path.peekFirst();
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
67 return path.peekLast();
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
68 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
69
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
70 OnMemoryNode cloneNode(OnMemoryNode _target,NodeData _newData)
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
71 {
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
72 OnMemoryNode clone = m_forest.createNode(_target.getID().update(),_newData);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
73 m_table.put(clone.getID().getUUID(),clone);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
74 return clone;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
75 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
76
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
77 LinkedList<OnMemoryNode> findAndClone(OnMemoryNode _parent,OnMemoryNode _target,NodeData _newData)
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
78 {
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
79 if(_parent.getID().isFamily(_target.getID())){
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
80 //find.
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
81 LinkedList<OnMemoryNode> path = new LinkedList<OnMemoryNode>();
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
82 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,_newData);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
83 path.addFirst(clone);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
84 return path;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
85 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
86
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
87 for(Node child : _parent.getData().list()){
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
88 LinkedList<OnMemoryNode> path = findAndClone((OnMemoryNode)child,_target,_newData);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
89 if(path != null){
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
90 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,null);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
91 clone.getData().list().remove(child);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
92 clone.getData().list().add(path.peekFirst());
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
93 path.addFirst(clone);
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
94 return path;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
95 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
96 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
97
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
98 return null; //not found.
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
99 }
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
100
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
101 @Override
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
102 public Node getRoot()
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
103 {
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
104 return m_root;
12604eb6b615 added javadoc
shoshi
parents: 3
diff changeset
105 }
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
106 }