# HG changeset patch # User misaka # Date 1305635117 -32400 # Node ID 22cd920986c54f1178ce703f2de594c96f0eba09 # Parent 8bf59f161b23fe6924939afd126cc9acc57c0c90 commit diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/api/Forest.java --- a/src/treecms/api/Forest.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/api/Forest.java Tue May 17 21:25:17 2011 +0900 @@ -38,7 +38,7 @@ * @param _tree 対象 * @return TreeEditor */ - MonotonicTree getMonotonicTree(Tree _tree); + MonotonicTree getMonotonicTree(SingleNode _root); /** * NodeDataを保持する新しいNodeを作成します.このメソッドで作成されるNodeは新しいUUIDを持ちます. diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/api/MonotonicTree.java --- a/src/treecms/api/MonotonicTree.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/api/MonotonicTree.java Tue May 17 21:25:17 2011 +0900 @@ -37,5 +37,5 @@ * この木構造のルートNodeを返します。 * @return この木構造のルートNode */ - public SingleNode getRoot(); + public MonotonicTreeNode getRoot(); } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/api/Node.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/treecms/api/Node.java Tue May 17 21:25:17 2011 +0900 @@ -0,0 +1,5 @@ +package treecms.api; + +public interface Node> extends NodeContext , NodeAttributes , NodeChildren +{ +} diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/api/NodeData.java --- a/src/treecms/api/NodeData.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/api/NodeData.java Tue May 17 21:25:17 2011 +0900 @@ -21,9 +21,19 @@ private NodeChildrenImpl m_children; private NodeAttributesImpl m_attrs; + public NodeData() + { + this(null,null); + } + + public NodeData(NodeData _newData) + { + this(_newData.m_children,_newData.m_attrs); + } + public NodeData(NodeChildren _children,NodeAttributes _attrs) { - m_children = new NodeChildrenImpl(); + m_children = new NodeChildrenImpl(_children); m_attrs = new NodeAttributesImpl(); } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/api/TreeNode.java --- a/src/treecms/api/TreeNode.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/api/TreeNode.java Tue May 17 21:25:17 2011 +0900 @@ -14,5 +14,5 @@ public interface TreeNode extends Node { public TreeNode getParent(); - public TreeNode getNode(); + public SingleNode getNode(); } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/memory/OnMemoryForest.java --- a/src/treecms/memory/OnMemoryForest.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/memory/OnMemoryForest.java Tue May 17 21:25:17 2011 +0900 @@ -5,9 +5,9 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import treecms.api.Forest; -import treecms.api.Node; import treecms.api.NodeData; import treecms.api.NodeID; +import treecms.api.SingleNode; import treecms.api.Tree; import treecms.api.MonotonicTree; import treecms.tree.id.AbstractRandomNodeID; @@ -43,10 +43,10 @@ * @param _newData Nodeが保持するNodeData * @return 作成されたOnMemoryNode */ - public OnMemoryNode createNode(NodeID _id,NodeData _newData) + public OnMemoryNode createNode(NodeID _id,NodeData _newData) { NodeID newID = (_id != null) ? _id : createID(); - NodeData newData = (_newData != null) ? _newData : new NodeData(); + NodeData newData = (_newData != null) ? _newData : new NodeData(); //newIDとnewDataを元にOnMemoryNodeを生成する. OnMemoryNode newNode = new OnMemoryNode(this,newID,newData); @@ -72,7 +72,7 @@ * @return NodeIDに対応するNode */ @Override - public Node get(NodeID _id) + public SingleNode get(NodeID _id) { return m_table.get(_id); } @@ -83,7 +83,7 @@ * @return Tree */ @Override - public Tree getTree(Node _node) + public Tree getTree(SingleNode _node) { Forest forest = _node.getForest(); if(forest != this){ @@ -99,14 +99,14 @@ * @return TreeEditor */ @Override - public MonotonicTree getMonotonicTree(Tree _tree) + public MonotonicTree getMonotonicTree(SingleNode _node) { - Forest forest = _tree.getRoot().getNode().getForest(); + Forest forest = _node.getForest(); if(forest != this){ throw new IllegalArgumentException(); } - return new OnMemoryMonotonicTree((OnMemoryTree)_tree); + return new OnMemoryMonotonicTree((OnMemoryNode)_node); } /** @@ -114,7 +114,7 @@ * @return 新しいNode */ @Override - public Node create() + public SingleNode create() { return createNode(null,null); } @@ -124,7 +124,7 @@ * @return NodeDataを保持した新しいNode */ @Override - public Node create(NodeData _data) + public SingleNode create(NodeData _data) { return createNode(null,_data); } @@ -134,7 +134,7 @@ * @return UUIDに対応する最新のNode */ @Override - public Node getTip(String _uuid) + public SingleNode getTip(String _uuid) { return m_tipTable.get(_uuid); } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/memory/OnMemoryMonotonicTree.java --- a/src/treecms/memory/OnMemoryMonotonicTree.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTree.java Tue May 17 21:25:17 2011 +0900 @@ -1,13 +1,11 @@ package treecms.memory; import treecms.api.MonotonicTree; -import treecms.api.Node; -import treecms.api.NodeData; -import treecms.tree.util.PathNotFoundException; +import treecms.api.MonotonicTreeNode; public class OnMemoryMonotonicTree implements MonotonicTree { - public OnMemoryMonotonicTree(OnMemoryTree _tree) + public OnMemoryMonotonicTree(OnMemoryNode _node) { } @@ -31,27 +29,14 @@ } @Override - public void merge() { - // TODO Auto-generated method stub - + public void merge() + { + //merge here } @Override - public Node getRoot() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Node updateTree(Node _target, NodeData _newData) - throws PathNotFoundException { - // TODO Auto-generated method stub - return null; - } - - @Override - public Node updateTree(Node _target, NodeData _newData, Node[] _path) - throws PathNotFoundException { + public MonotonicTreeNode getRoot() + { // TODO Auto-generated method stub return null; } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/memory/OnMemoryMonotonicTreeNode.java --- a/src/treecms/memory/OnMemoryMonotonicTreeNode.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/memory/OnMemoryMonotonicTreeNode.java Tue May 17 21:25:17 2011 +0900 @@ -9,8 +9,12 @@ import treecms.api.Forest; import treecms.api.MonotonicTreeNode; import treecms.api.Node; +import treecms.api.NodeAttributes; +import treecms.api.NodeChildren; import treecms.api.NodeID; +import treecms.api.SingleNode; import treecms.api.TreeNode; +import treecms.tree.util.NodeChildrenImpl; /** * SingleLinkedなNodeをラップしたDoubleLinkedなNodeの実装です. @@ -18,7 +22,6 @@ */ public class OnMemoryMonotonicTreeNode implements MonotonicTreeNode { - private OnMemoryMonotonicTree m_tree; private OnMemoryNode m_node; private OnMemoryMonotonicTreeNode m_parent; @@ -28,19 +31,14 @@ * @param _parent このDoubleLinked Nodeの親,RootNodeならnull * @param _tree このNodeがRootNodeなら,nullではいけない. */ - public OnMemoryMonotonicTreeNode(OnMemoryNode _target,OnMemoryMonotonicTreeNode _parent,OnMemoryMonotonicTree _tree) + public OnMemoryMonotonicTreeNode(OnMemoryNode _target,OnMemoryMonotonicTreeNode _parent) { if(_target == null){ throw new NullPointerException("_target must not be null."); } - if(_parent == null && _tree == null){ - throw new NullPointerException("_parent or _tree must not be null."); - } - m_node = _target; m_parent = _parent; - m_tree = _tree; } /* @@ -66,7 +64,7 @@ } @Override - public Node getNode() + public SingleNode getNode() { return m_node; } @@ -82,7 +80,7 @@ } @Override - public Map getAll() + public NodeAttributes getAll() { return m_node.getAll(); } @@ -94,7 +92,7 @@ } @Override - public void putAll(Map _map) + public void putAll(NodeAttributes _map) { m_node.putAll(_map); } @@ -112,9 +110,9 @@ } @Override - public void clear() + public void clearAttributes() { - m_node.clear(); + m_node.clearAttributes(); } /** @@ -129,7 +127,8 @@ */ public void transmit(OnMemoryNode _orig,OnMemoryNode _edit) { - Node clone = m_node.cloneNode(null); + OnMemoryForest f = (OnMemoryForest)m_node.getForest(); + OnMemoryNode clone = f.createNode(m_node.getID(),null); clone.replaceChild(_orig,_edit); if(m_parent != null){ @@ -143,56 +142,50 @@ /* * 子供関連のメソッド */ - @Override - public Iterator getChildren() + public List getList() { //NodeのリストよりMonotonicTreeNodeのリストを作成する. - LinkedList res = new LinkedList(); - for(Iterator it = m_node.getChildren();it.hasNext();){ + NodeChildren res = new NodeChildrenImpl(); + for(Iterator it = m_node.getList().iterator();it.hasNext();){ OnMemoryNode n = (OnMemoryNode)it.next(); - res.add(new OnMemoryMonotonicTreeNode(n,this,null)); + res.add(new OnMemoryMonotonicTreeNode(n,this)); } - return res.iterator(); + return res.getList(); } @Override - public void addChild(MonotonicTreeNode _n) + public boolean add(MonotonicTreeNode _n) { - m_node.addChild(_n.getNode()); + return m_node.add(_n.getNode()); } @Override - public void addChildren(List _list) + public boolean addAll(NodeChildren _list) { //MotonicTreeNodeのリストからNodeのリストを作成する. - LinkedList res = new LinkedList(); - for(Iterator it = _list.iterator();it.hasNext();){ + NodeChildren res = new NodeChildrenImpl(); + for(Iterator it = _list.getList().iterator();it.hasNext();){ MonotonicTreeNode mono = (MonotonicTreeNode)it.next(); res.add(mono.getNode()); } - m_node.addChildren(res); - } - - @Override - public void removeChild(MonotonicTreeNode _n) - { - m_node.removeChild(_n.getNode()); + return m_node.addAll(res); } @Override - public void removeChildren(List _list) + public MonotonicTreeNode remove(String _uuid) { - //MonotonicTreeNodeのリスト - LinkedList res = new LinkedList(); - for(Iterator it = _list.iterator();it.hasNext();){ - MonotonicTreeNode mono = it.next(); - res.add(mono.getNode()); - } - - m_node.removeChildren(res); + SingleNode n = m_node.remove(_uuid); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,this); + } + + @Override + public MonotonicTreeNode remove(int _index) + { + SingleNode n = m_node.remove(_index); + return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,null); } @Override @@ -200,5 +193,4 @@ { m_node.clearChildren(); } - } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/memory/OnMemoryNode.java --- a/src/treecms/memory/OnMemoryNode.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/memory/OnMemoryNode.java Tue May 17 21:25:17 2011 +0900 @@ -1,15 +1,15 @@ package treecms.memory; import treecms.api.Forest; -import treecms.api.Node; import treecms.api.NodeData; import treecms.api.NodeID; +import treecms.api.SingleNode; /** * オンメモリ上でのNodeの実装です。 * @author shoshi */ -class OnMemoryNode extends NodeData implements Node +class OnMemoryNode extends NodeData implements SingleNode { private OnMemoryForest m_forest; private NodeID m_id; @@ -20,7 +20,7 @@ * @param _id このNodeのNodeIDです. * @param _newData このNodeに割り当てるNodeDataです.防御的にコピーします. */ - public OnMemoryNode(OnMemoryForest _forest,NodeID _id,NodeData _newData) + public OnMemoryNode(OnMemoryForest _forest,NodeID _id,NodeData _newData) { super(_newData); m_id = _id; @@ -34,20 +34,8 @@ } @Override - public NodeData getData() - { - return new NodeData(this); - } - - @Override public Forest getForest() { return m_forest; } - - @Override - public Node cloneNode(NodeData _newData) - { - return m_forest.createNode(m_id,_newData); - } } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/memory/OnMemoryTreeNode.java --- a/src/treecms/memory/OnMemoryTreeNode.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/memory/OnMemoryTreeNode.java Tue May 17 21:25:17 2011 +0900 @@ -8,9 +8,12 @@ import java.util.Map; import java.util.Set; import treecms.api.Forest; -import treecms.api.Node; +import treecms.api.NodeAttributes; +import treecms.api.NodeChildren; import treecms.api.NodeID; +import treecms.api.SingleNode; import treecms.api.TreeNode; +import treecms.tree.util.NodeChildrenImpl; /** * DoubleLinkedなNodeであるTreeNodeのOnMemory実装です. @@ -50,7 +53,7 @@ } @Override - public Node getNode() + public SingleNode getNode() { return m_node; } @@ -72,57 +75,53 @@ */ @Override - public Iterator getChildren() + public List getList() { /* * m_node(対象ノード)のリストにはNodeが格納されており、TreeNodeのリストを取得するためにはTreeNodeで要素を構成する必要がある. */ LinkedList ret = new LinkedList(); - for(Iterator it = m_node.getList().iterator();it.hasNext();){ + for(Iterator it = m_node.getList().iterator();it.hasNext();){ OnMemoryNode n = (OnMemoryNode)it.next(); ret.add(new OnMemoryTreeNode(n,this)); } - return Collections.unmodifiableList(ret).iterator(); + return Collections.unmodifiableList(ret); } @Override - public void add(TreeNode _child) + public boolean add(TreeNode _child) { - m_node.add(_child.getNode()); + return m_node.add(_child.getNode()); } @Override - public void addAll(NodeChildren _children) + public boolean addAll(NodeChildren _children) { /* * TreeNodeのリストからNodeのリストへ変換する */ - LinkedList res = new LinkedList(); - for(Iterator it = _children.iterator();it.hasNext();){ + NodeChildren res = new NodeChildrenImpl(); + for(Iterator it = _children.getList().iterator();it.hasNext();){ TreeNode tn = it.next(); res.add(tn.getNode()); } - m_node.addAll(res); - } - - @Override - public void removeChild(TreeNode _child) - { - m_node.removeChild(_child.getNode()); + return m_node.addAll(res); } @Override - public void removeChildren(List _children) + public TreeNode remove(String _uuid) { - LinkedList res = new LinkedList(); - for(Iterator it = _children.iterator();it.hasNext();){ - TreeNode tn = it.next(); - res.add(tn.getNode()); - } - - m_node.removeChildren(res); + SingleNode n = m_node.remove(_uuid); + return new OnMemoryTreeNode((OnMemoryNode)n,this); + } + + @Override + public TreeNode remove(int _index) + { + SingleNode n = m_node.remove(_index); + return new OnMemoryTreeNode((OnMemoryNode)n,this); } @Override @@ -130,10 +129,6 @@ { m_node.clearChildren(); } - - /* - * 属性関連のメソッド - */ @Override public ByteBuffer get(ByteBuffer _key) @@ -142,7 +137,7 @@ } @Override - public Map getAll() + public NodeAttributes getAll() { return m_node.getAll(); } @@ -154,7 +149,7 @@ } @Override - public void putAll(Map _map) + public void putAll(NodeAttributes _map) { m_node.putAll(_map); } @@ -172,8 +167,59 @@ } @Override - public void clear() + public void clearAttributes() + { + m_node.clearAttributes(); + } + + @Override + public Map asMap() + { + return m_node.asMap(); + } + + @Override + public Set getKeySet() + { + return m_node.getKeySet(); + } + + @Override + public Set getUUIDSet() + { + return m_node.getUUIDSet(); + } + + @Override + public TreeNode get(String _uuid) { - m_node.clear(); + SingleNode n = m_node.get(_uuid); + return new OnMemoryTreeNode((OnMemoryNode)n,this); + } + + @Override + public TreeNode get(int _index) + { + SingleNode n = m_node.get(_index); + return new OnMemoryTreeNode((OnMemoryNode)n,this); + } + + @Override + public TreeNode replace(TreeNode _newChild) + { + SingleNode n = m_node.replace(_newChild.getNode()); + return new OnMemoryTreeNode((OnMemoryNode)n,this); + } + + @Override + public boolean contains(String _id) + { + return m_node.contains(_id); + } + + @Override + public boolean swap(String _uuid1, String _uuid2) + { + return m_node.swap(_uuid1,_uuid2); } } diff -r 8bf59f161b23 -r 22cd920986c5 src/treecms/tree/util/NodeChildrenImpl.java --- a/src/treecms/tree/util/NodeChildrenImpl.java Tue May 17 18:44:14 2011 +0900 +++ b/src/treecms/tree/util/NodeChildrenImpl.java Tue May 17 21:25:17 2011 +0900 @@ -27,12 +27,14 @@ m_set = new HashSet(); } - public NodeChildrenImpl(NodeChildrenImpl _list) + public NodeChildrenImpl(NodeChildren _list) { this(); if(_list != null){ addAll(_list); + }else{ + throw new NullPointerException("_list must not be null."); } }