diff src/treecms/memory/OnMemoryMonotonicTreeNode.java @ 16:bb9760760744

commit
author shoshi
date Sat, 21 May 2011 04:46:00 +0900
parents 22cd920986c5
children 168deb591f21
line wrap: on
line diff
--- a/src/treecms/memory/OnMemoryMonotonicTreeNode.java	Tue May 17 21:25:17 2011 +0900
+++ b/src/treecms/memory/OnMemoryMonotonicTreeNode.java	Sat May 21 04:46:00 2011 +0900
@@ -1,20 +1,19 @@
 package treecms.memory;
 
 import java.nio.ByteBuffer;
+
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 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;
+import treecms.tree.util.NodeData;
 
 /**
  * SingleLinkedなNodeをラップしたDoubleLinkedなNodeの実装です.
@@ -24,6 +23,7 @@
 {
 	private OnMemoryNode m_node;
 	private OnMemoryMonotonicTreeNode m_parent;
+	private OnMemoryMonotonicTree m_tree;
 	
 	/**
 	 * コンストラクタです.
@@ -33,17 +33,16 @@
 	 */
 	public OnMemoryMonotonicTreeNode(OnMemoryNode _target,OnMemoryMonotonicTreeNode _parent)
 	{
-		if(_target == null){
-			throw new NullPointerException("_target must not be null.");
-		}
-		
 		m_node  = _target;
 		m_parent = _parent;
 	}
 	
-	/*
-	 * 親関連のメソッド
-	 */
+	public OnMemoryMonotonicTreeNode(OnMemoryNode _root,OnMemoryMonotonicTree _tree)
+	{
+		m_node = _root;
+		m_tree = _tree;
+		m_parent = null;
+	}
 	
 	@Override
 	public NodeID getID()
@@ -106,13 +105,26 @@
 	@Override
 	public void removeAll(Set<ByteBuffer> _keys)
 	{
-		m_node.removeAll(_keys);
+		NodeData<SingleNode> d = new NodeData<SingleNode>(m_node);
+		d.removeAll(_keys);
+		
+		cloneAndTransmit(d);
 	}
 
 	@Override
 	public void clearAttributes()
 	{
-		m_node.clearAttributes();
+		NodeData<SingleNode> d = new NodeData<SingleNode>(m_node);
+		d.clearAttributes();
+		
+		cloneAndTransmit(d);
+	}
+	
+	public void cloneAndTransmit(NodeData<SingleNode> _d)
+	{
+		OnMemoryForest f = (OnMemoryForest)m_node.getForest();
+		OnMemoryNode clone = f.createNode(m_node.getID().update(),_d);
+		transmit(m_node,clone);
 	}
 	
 	/**
@@ -128,15 +140,13 @@
 	public void transmit(OnMemoryNode _orig,OnMemoryNode _edit)
 	{
 		OnMemoryForest f = (OnMemoryForest)m_node.getForest();
-		OnMemoryNode clone = f.createNode(m_node.getID(),null);
-		clone.replaceChild(_orig,_edit);
+		OnMemoryNode clone = f.createNode(m_node.getID().update(),null);
+		clone.replace(_edit);
 		
 		if(m_parent != null){
 			m_parent.transmit(m_node,(OnMemoryNode)clone);
 			return;
 		}
-		
-		//なにかしたい
 	}
 	
 	/*
@@ -185,7 +195,7 @@
 	public MonotonicTreeNode remove(int _index)
 	{
 		SingleNode n = m_node.remove(_index);
-		return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,null);
+		return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,(OnMemoryMonotonicTreeNode)null);
 	}
 
 	@Override
@@ -193,4 +203,55 @@
 	{
 		m_node.clearChildren();
 	}
+
+	@Override
+	public Map<ByteBuffer, ByteBuffer> asMap()
+	{
+		return m_node.asMap();
+	}
+
+	@Override
+	public Set<ByteBuffer> getKeySet()
+	{
+		return m_node.getKeySet();
+	}
+
+	@Override
+	public Set<String> getUUIDSet()
+	{
+		return m_node.getUUIDSet();
+	}
+
+	@Override
+	public MonotonicTreeNode get(String _uuid)
+	{
+		SingleNode n = m_node.get(_uuid);
+		return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,this);
+	}
+
+	@Override
+	public MonotonicTreeNode get(int _index)
+	{
+		SingleNode n = m_node.get(_index);
+		return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,this);
+	}
+
+	@Override
+	public MonotonicTreeNode replace(MonotonicTreeNode _newChild)
+	{
+		SingleNode n = m_node.replace(_newChild.getNode());
+		return new OnMemoryMonotonicTreeNode((OnMemoryNode)n,(OnMemoryMonotonicTreeNode)null);
+	}
+
+	@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);
+	}
 }