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