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

added javadoc
author shoshi
date Mon, 14 Mar 2011 23:24:38 +0900
parents 5fa718b63cd5
children fc19e38b669b
comparison
equal deleted inserted replaced
5:87bba22e4fa2 6:12604eb6b615
1 package treecms.memory; 1 package treecms.memory;
2 2
3 import java.util.LinkedList;
4
5 import treecms.api.Node;
6 import treecms.api.NodeData;
3 import treecms.api.TreeEditor; 7 import treecms.api.TreeEditor;
4 import treecms.merger.Merger; 8 import treecms.merger.Merger;
5 import treecms.merger.ReplaceMerger; 9 import treecms.merger.ReplaceMerger;
6 10
7 public class OnMemoryTreeEditor extends OnMemoryTree implements TreeEditor 11 public class OnMemoryTreeEditor extends OnMemoryTree implements TreeEditor
45 { 49 {
46 //call merger 50 //call merger
47 Merger merger = new ReplaceMerger(); 51 Merger merger = new ReplaceMerger();
48 m_root = (OnMemoryNode)merger.merge(m_tree.m_root,m_root); 52 m_root = (OnMemoryNode)merger.merge(m_tree.m_root,m_root);
49 } 53 }
54
55 @Override
56 public synchronized Node updateTree(Node _target,NodeData _newData)
57 {
58 LinkedList<OnMemoryNode> path = findAndClone(m_root,(OnMemoryNode)_target,_newData);
59
60 if(path == null)
61 {
62 //not found.
63 return null;
64 }
65
66 m_root = path.peekFirst();
67 return path.peekLast();
68 }
69
70 OnMemoryNode cloneNode(OnMemoryNode _target,NodeData _newData)
71 {
72 OnMemoryNode clone = m_forest.createNode(_target.getID().update(),_newData);
73 m_table.put(clone.getID().getUUID(),clone);
74 return clone;
75 }
76
77 LinkedList<OnMemoryNode> findAndClone(OnMemoryNode _parent,OnMemoryNode _target,NodeData _newData)
78 {
79 if(_parent.getID().isFamily(_target.getID())){
80 //find.
81 LinkedList<OnMemoryNode> path = new LinkedList<OnMemoryNode>();
82 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,_newData);
83 path.addFirst(clone);
84 return path;
85 }
86
87 for(Node child : _parent.getData().list()){
88 LinkedList<OnMemoryNode> path = findAndClone((OnMemoryNode)child,_target,_newData);
89 if(path != null){
90 OnMemoryNode clone = cloneNode((OnMemoryNode)_parent,null);
91 clone.getData().list().remove(child);
92 clone.getData().list().add(path.peekFirst());
93 path.addFirst(clone);
94 return path;
95 }
96 }
97
98 return null; //not found.
99 }
100
101 @Override
102 public Node getRoot()
103 {
104 return m_root;
105 }
50 } 106 }