changeset 85:22bba77e09a7

Merge with a4e2f1d45fdc66e833985e19f2ce97cfe6230bc4
author one
date Wed, 03 Sep 2014 21:10:30 +0900
parents e0270d3640f8 (current diff) a4e2f1d45fdc (diff)
children fb1dc448ac8c
files src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultChildren.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNode.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java
diffstat 82 files changed, 517 insertions(+), 464 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,6 +2,7 @@
 
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
+
 import fj.data.List;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
@@ -31,7 +32,7 @@
 		JungleTree t = j.createNewTree("fuga");
 		
 		JungleTreeEditor e1 = t.getTreeEditor();
-		JungleTreeEditor e2 = t.getTreeEditor();
+		//JungleTreeEditor e2 = t.getTreeEditor();
 		
 		DefaultNodePath root = new DefaultNodePath();
 		
@@ -76,7 +77,7 @@
 		};
 		
 		DefaultTreeNode root = new DefaultTreeNode();
-		ChangeSet set = new DefaultChangeSet(root.getAsNode(),null,list,uuid,_name,0);
+		ChangeSet set = new DefaultChangeSet(root,null,list,uuid,_name,0);
 		DefaultTreeContext<DefaultTreeNode> tc = new DefaultTreeContext<DefaultTreeNode>(root,set);
 		JungleTree newTree = new DefaultJungleTree<DefaultTreeNode>(tc,uuid,journal.getWriter(),editor);
 		if(trees.putIfAbsent(_name,newTree) != null){
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,5 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
@@ -10,7 +9,8 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTransactionManager;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
 
-public class DefaultJungleTree<T extends TreeNode<T>> implements JungleTree
+
+public class DefaultJungleTree<T extends TreeNode> implements JungleTree
 {
 	private final AtomicReservableReference<TreeContext<T>> repository;
 	private final String uuid;
@@ -30,7 +30,7 @@
 	{
 		TreeContext<T> tc = repository.get();
 		DefaultTransactionManager<T> txManager = new DefaultTransactionManager<T>(writer,tc,repository,uuid);
-		T root = tc.getTreeNode();
+		TreeNode root = tc.getTreeNode();
 		return new DefaultJungleTreeEditor<T>(root,txManager,editor);
 	}
 
@@ -41,7 +41,7 @@
 	}
 	
 	@Override
-	public Node getRootNode()
+	public TreeNode getRootNode()
 	{
 		TreeContext<T> tc = repository.get();
 		ChangeSet cs = tc.getChangeSet();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/Jungle.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/Jungle.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,5 +1,6 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle;
 
+
 public interface Jungle
 {
 	public JungleTree getTreeByName(String _name);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTree.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTree.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,10 +1,11 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 
 public interface JungleTree
 {
 	public JungleTreeEditor getTreeEditor();
 	public JungleTreeEditor getLocalTreeEditor();
-	public Node getRootNode();
+	public TreeNode getRootNode();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTreeEditor.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTreeEditor.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,15 +1,17 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle;
 
 import java.nio.ByteBuffer;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public interface JungleTreeEditor
 {
-	public Node getRoot();
+	public TreeNode getRoot();
 	
 	public Either<Error,JungleTreeEditor> addNewChildAt(NodePath _path,int _pos);
 	public Either<Error,JungleTreeEditor> deleteChildAt(NodePath _path,int _pos);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/App.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/App.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,11 +1,13 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
 
 import java.nio.ByteBuffer;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
@@ -32,7 +34,7 @@
     	e.success();
     	
     	
-    	Node root = tree.getRootNode();
+    	TreeNode root = tree.getRootNode();
     	ByteBuffer v = root.getAttributes().get(key);
     	String str = new String(v.array());
     	System.out.println(str);
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/Node.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/Node.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,6 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
 
 
-public interface Node extends AttributesContainer , Parent<Node>
+public interface Node extends AttributesContainer
 {
-}
\ No newline at end of file
+}*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/Parent.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/Parent.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,7 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
 
 public interface Parent<T>
 {
 	public Children<T> getChildren();
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultChangeListWriter.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultChangeListWriter.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,8 +2,7 @@
 
 import java.nio.ByteBuffer;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 
 public class DefaultChangeListWriter implements ChangeListWriter
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultJournal.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultJournal.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,5 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent;
 
-import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
@@ -8,7 +7,6 @@
 import java.nio.MappedByteBuffer;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileChannel.MapMode;
-import java.nio.channels.WritableByteChannel;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/NullJournal.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/NullJournal.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,12 +1,9 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent;
 
-import java.nio.ByteBuffer;
+
 import java.util.Iterator;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
 
 public class NullJournal implements Journal
 {
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/ChangeSet.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/ChangeSet.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,12 +1,13 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 
 public interface ChangeSet
 {
-	public Node getRoot();
+	public TreeNode getRoot();
 	public ChangeSet prev();
 	public ChangeList getChangeList();
 	
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java	Wed Sep 03 21:10:30 2014 +0900
@@ -7,5 +7,5 @@
 
 public interface TreeEditor
 {
-	public <T extends TreeNode<T>> Either<Error,T> edit(T _root,NodePath _path,NodeEditor _transformer);
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _root,NodePath _path,NodeEditor _transformer);
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultAttributes.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultAttributes.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,16 +2,11 @@
 
 import java.nio.ByteBuffer;
 
-import fj.data.List;
 import fj.data.Option;
 import fj.data.TreeMap;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
 
 public class DefaultAttributes implements Attributes
 {
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,21 +1,20 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 
 import java.util.Iterator;
 import fj.data.List;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableWrapper;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public class DefaultChildren implements Children<Node>
+public class DefaultChildren<T extends TreeNode<T>> implements Children<TreeNode<T>>
 {
-	private final List<Node> children;
+	private final List<TreeNode<T>> children;
 	
-	public DefaultChildren(List<Node> _children)
+	public DefaultChildren(List<TreeNode<T>> _children)
 	{
 		children = _children;
 	}
@@ -35,7 +34,7 @@
 		DefaultNode newNode = new DefaultNode(newList,attrs);
 		return DefaultEither.newB(newNode);
 	}
-	*/
+	
 	
 	@Override
 	public int size()
@@ -72,28 +71,28 @@
 		return DefaultEither.newB(newNode);
 	}
 	
-	*/
+	
 	
 	@Override
-	public Either<Error,Node> at(int _pos)
+	public Either<Error,TreeNode<T>> at(int _pos)
 	{
-		Node target = children.index(_pos);
+		TreeNode<T> target = children.index(_pos);
 		if(target == null){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); // TODO
 		}
-		Node ret = target;
+		TreeNode<T> ret = target;
 		
 		return DefaultEither.newB(ret);
 	}
 	
-	public List<Node> getChildrenAsRawList()
+	public List<TreeNode<T>> getChildrenAsRawList()
 	{
 		return children;
 	}
 
 	@Override
-	public Iterator<Node> iterator()
+	public Iterator<TreeNode<T>> iterator()
 	{
-		return children.iterator();
+		return (new IterableWrapper<TreeNode<T>>(children)).iterator();
 	}
-}
+}*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import java.nio.ByteBuffer;
 import fj.Ord;
@@ -42,3 +42,4 @@
 		return new DefaultAttributes(attrs);
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Wed Sep 03 21:10:30 2014 +0900
@@ -22,60 +22,59 @@
 	}
 	
 	@Override
-	public <T extends TreeNode<T>> Either<Error,T> edit(T _root,NodePath _path,NodeEditor _editor)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _root,NodePath _path,NodeEditor _editor)
 	{
 		DefaultEvaluator e = new DefaultEvaluator(_path);
-		TraversableNodeWrapper<T> wrap = new TraversableNodeWrapper<T>(_root);
-		Either<Error, Traversal<TraversableNodeWrapper<T>>> either = traverser.traverse(wrap,e);
+		//TraversableNodeWrapper<T> wrap = new TraversableNodeWrapper<T>(_root);
+		Either<Error, Traversal<TreeNode>> either = traverser.traverse(_root,e);
 		
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		Traversal<TraversableNodeWrapper<T>> t = either.b();
-		Either<Error,T> ret = clone(t,_editor);
+		Traversal<TreeNode> t = either.b();
+		Either<Error,TreeNode> ret = clone(t,_editor);
 		
 		return ret;
 	}
 	
-	private <T extends TreeNode<T>> Either<Error,T> clone(Traversal<TraversableNodeWrapper<T>> _t,NodeEditor _editor)
+	private <T extends TreeNode> Either<Error,TreeNode> clone(Traversal<T> _t,NodeEditor _editor)
 	{
 		// copying nodes from bottom to root
 		
-		List<Direction<TraversableNodeWrapper<T>>> path = List.nil();
-		for(Direction<TraversableNodeWrapper<T>> direction : _t){
+		List<Direction<T>> path = List.nil();
+		for(Direction<T> direction : _t){
 			path = path.cons(direction);
 		}
 		
 		// target
-		Direction<TraversableNodeWrapper<T>> targetDirection = path.head();
-		T target = targetDirection.getTarget().getWrapped();
-		EditableNodeWrapper<T> wrapper = new EditableNodeWrapper<T>(target);
-		Either<Error,EditableNodeWrapper<T>> either = _editor.edit(wrapper);
+		Direction<T> targetDirection = path.head();
+		T target = targetDirection.getTarget();
+		//EditableNodeWrapper<T> wrapper = new EditableNodeWrapper<T>(target);
+		Either<Error,TreeNode> either = _editor.edit(target);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		T newNode = either.b().getWrap();
+		TreeNode newNode = either.b();
 		
 		// top
 		int pos = targetDirection.getPosition();
-		T child = newNode;
-		for(Direction<TraversableNodeWrapper<T>> parentDirection : path.tail()){
-			TraversableNodeWrapper<T> parent = parentDirection.getTarget();
-			TreeNodeChildren<T> chs = parent.getWrapped().getChildren();
-			
-			Either<Error,T> ret = chs.replaceNode(pos,child);
+		TreeNode child = newNode;
+		for(Direction<T> parentDirection : path.tail()){
+			TreeNodeChildren<TreeNode> chs =  parentDirection.getTarget().getChildren();
+					
+			Either<Error,TreeNode> ret = chs.replaceNode(pos,child);
 			if(ret.isA()){
 				return DefaultEither.newA(ret.a());
 			}
 			
-			T newParent = ret.b();
+			TreeNode newParent = ret.b();
 			child = newParent;
 			pos = parentDirection.getPosition();
 		}
 		
-		T newRoot = child;
+		TreeNode newRoot = child;
 		return DefaultEither.newB(newRoot);
 	}
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,9 +1,9 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import java.nio.ByteBuffer;
 import java.util.Iterator;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
@@ -16,9 +16,9 @@
 {
 	private final T wrap;
 	
-	public EditableNodeWrapper(T _wrap)
+	public EditableNodeWrapper(T target)
 	{
-		wrap = _wrap;
+		wrap = target;
 	}
 
 	@Override
@@ -42,7 +42,7 @@
 	{
 		private final TreeNodeAttributes<T> attributes;
 		
-		public EditableAttributesWrapper(T _wrap)
+		public EditableAttributesWrapper(TreeNode<T> _wrap)
 		{
 			attributes = _wrap.getAttributes();
 		}
@@ -90,15 +90,15 @@
 		}
 
 		@Override
-		public Either<Error,Node> at(int _pos)
+		public Either<Error, EditableNodeWrapper<T>> at(int _pos)
 		{
 			Either<Error,T> either = children.at(_pos);
 			if(either.isA()){
 				return DefaultEither.newA(either.a());
 			}
-			
+
 			T target = either.b();
-			Node newWrapper = new NodeWrapper<T>(target);
+			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(target);
 			return DefaultEither.newB(newWrapper);
 		}
 
@@ -109,17 +109,17 @@
 		}
 
 		@Override
-		public Iterator<Node> iterator()
+		public Iterator<EditableNodeWrapper<T>> iterator()
 		{
-			IterableConverter.Converter<Node,T> converter = new IterableConverter.Converter<Node,T>(){
+			IterableConverter.Converter<EditableNodeWrapper<T>,T> converter = new IterableConverter.Converter<EditableNodeWrapper<T>,T>(){
 				@Override
-				public Node conv(T _b){
-					return new NodeWrapper<T>(_b);
+				public EditableNodeWrapper<T> conv(T _b){
+					return new EditableNodeWrapper<T>(_b);
 				}
 			};
 			
 			
-			return new IterableConverter<Node,T>(children,converter).iterator();
+			return new IterableConverter<EditableNodeWrapper<T>,T>(children,converter).iterator();
 		}
 
 		@Override
@@ -149,3 +149,4 @@
 		}
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/NodeWrapper.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/NodeWrapper.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import java.util.Iterator;
 
@@ -74,3 +74,4 @@
 		}
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TraversableNodeWrapper.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TraversableNodeWrapper.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import java.util.Iterator;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
@@ -66,4 +66,4 @@
 			}
 		};
 	}
-}
+}*/
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,18 +1,15 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainer;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Parent;
 
-public interface TreeNode<T extends TreeNode<T>> extends Parent<T> , AttributesContainer
+public interface TreeNode extends AttributesContainer
 {
-	@Override
-	public TreeNodeChildren<T> getChildren();
+	public TreeNodeChildren<TreeNode> getChildren();
 	
 	@Override
-	public TreeNodeAttributes<T> getAttributes();
+	public TreeNodeAttributes<TreeNode> getAttributes();
 	
-	public Node getAsNode();
+	public TreeNode createNewNode();
+	//public Node getAsNode();
 	
-	public T createNewNode();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNodeAttributes.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNodeAttributes.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,12 +2,14 @@
 
 import java.nio.ByteBuffer;
 
+import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public interface TreeNodeAttributes<T extends TreeNode<T>> extends Attributes
+public interface TreeNodeAttributes<T extends TreeNode> extends Attributes
 {
-	public Either<Error,T> delete(String _key);
-	public Either<Error,T> put(String _key,ByteBuffer _value);
+	public Either<Error,TreeNode> delete(String _key);
+	public Either<Error,TreeNode> put(String _key,ByteBuffer _value);
+	public TreeMap<String,ByteBuffer> getAttributesAsRawMap();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNodeChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/TreeNodeChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,15 +1,15 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;
 
+import fj.data.List;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Parent;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public interface TreeNodeChildren<T extends Parent<T>> extends Children<T>
+public interface TreeNodeChildren<T extends TreeNode> extends Children<T>
 {
-	public Either<Error,T> addNewChildAt(int _pos);
-	public Either<Error,T> deleteChildAt(int _pos);
-	public Either<Error,T> addNewChildAt(int _pos,T _newChild);
-	public Either<Error,T> replaceNode(int _pos,T _replacement);
+	public Either<Error,TreeNode> addNewChildAt(int _pos);
+	public Either<Error,TreeNode> deleteChildAt(int _pos);
+	public Either<Error,TreeNode> addNewChildAt(int _pos,T _newChild);
+	public Either<Error,TreeNode> replaceNode(int _pos,TreeNode _replacement);
+	public List<TreeNode> getChildrenAsRawList();
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
 
 import java.nio.ByteBuffer;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
@@ -57,3 +57,4 @@
 		return edit(putAttribute);
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,7 +1,6 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
 
 import java.util.Iterator;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
@@ -30,10 +29,10 @@
 	}
 	
 	@Override
-	public Iterator<Node> iterator()
+	public Iterator<LoggingNode<T>> iterator()
 	{
 		EditableChildren<T> children = wrap.getChildren();
-		return children.iterator();
+		return (Iterator<LoggingNode<T>>) children.iterator();
 	}
 	
 	public Either<Error,LoggingNode<T>> edit(NodeOperation _op)
@@ -64,15 +63,16 @@
 	}
 
 	@Override
-	public Either<Error,Node> at(int _pos)
+	public Either<Error,LoggingNode<T>> at(int _pos)
 	{
 		EditableChildren<T> children = wrap.getChildren();
-		Either<Error,Node> either = children.at(_pos);
+		Either<Error,T> either = children.at(_pos);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		Node node = either.b();
-		return DefaultEither.newB(node);
+		T node = either.b();
+		return DefaultEither.newB(new LoggingNode<T>(node));
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren;
@@ -42,3 +42,4 @@
 		return wrap;
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,6 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -18,19 +18,19 @@
 	}
 
 	@Override
-	public <T extends EditableNode<T>> Either<Error, T> edit(T _e)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e)
 	{
-		LoggingNode<T> loggingNode = new LoggingNode<T>(_e);
-		Either<Error, LoggingNode<T>> either = editor.edit(loggingNode);
+		//LoggingNode<T> loggingNode = new LoggingNode<T>(_e);
+		Either<Error,TreeNode> either = editor.edit(_e);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
+		log = editor.getLog();
+		TreeNode newLoggingNode = either.b();
+		//T newNode = newLoggingNode.getWrap();
+		//log = newLoggingNode.getOperationLog();
 		
-		LoggingNode<T> newLoggingNode = either.b();
-		T newNode = newLoggingNode.getWrap();
-		log = newLoggingNode.getOperationLog();
-		
-		return DefaultEither.newB(newNode);
+		return DefaultEither.newB(newLoggingNode);
 	}
 	
 	public OperationLog getLog()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,10 +3,7 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
 
 public final class AppendChildAtOperation implements NodeOperation
 {
@@ -22,12 +19,12 @@
 		return Command.APPEND_CHILD;
 	}
 	
-	@Override
-	public <T extends EditableNode<T>> Either<Error,T> invoke(T _target)
+	/*@Override
+	public <T extends TreeNode> Either<Error,T> invoke(T _target)
 	{
 		AppendChildAt appendChildAt = new AppendChildAt(pos);
 		return appendChildAt.edit(_target);
-	}
+	}*/
 
 	@Override
 	public int getPosition()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,10 +3,7 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
 
 public final class DeleteAttributeOperation implements NodeOperation
 {
@@ -23,12 +20,12 @@
 		return Command.DELETE_ATTRIBUTE;
 	}
 	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	/*@Override
+	public <T extends TreeNode> Either<Error,T> invoke(T _target)
 	{
 		DeleteAttribute deleteAttribute = new DeleteAttribute(key);
 		return deleteAttribute.edit(_target);
-	}
+	}*/
 
 	@Override
 	public int getPosition()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,10 +3,7 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
 
 public class DeleteChildAtOperation implements NodeOperation
 {
@@ -23,12 +20,12 @@
 		return Command.DELETE_CHILD;
 	}
 	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	/*@Override
+	public <T extends TreeNode> Either<Error,T> invoke(T _target)
 	{
 		DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
 		return deleteChildAt.edit(_target);
-	}
+	}*/
 
 	@Override
 	public int getPosition()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,14 +3,11 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public interface NodeOperation
 {
 	public Command getCommand();
-	public <T extends EditableNode<T>> Either<Error,T> invoke(T _target);
+//	public <T extends TreeNode> Either<Error,T> invoke(T _target);
 	
 	public int getPosition();
 	public String getKey();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,10 +3,7 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
 
 public class PutAttributeOperation implements NodeOperation
 {
@@ -25,12 +22,12 @@
 		return Command.PUT_ATTRIBUTE;
 	}
 	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	/*@Override
+	public <T extends TreeNode> Either<Error,T> invoke(T _target)
 	{
 		PutAttribute putAttribute = new PutAttribute(key,value);
 		return putAttribute.edit(_target);
-	}
+	}*/
 
 	@Override
 	public int getPosition()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,5 +1,10 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
@@ -14,9 +19,9 @@
 	}
 
 	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e)
 	{
-		Either<Error,T> either = _e.getChildren().addNewChildAt(pos);
+		Either<Error,TreeNode> either = _e.getChildren().addNewChildAt(pos);
 		if(either.isA()){
 			// error
 			return either;
@@ -24,4 +29,12 @@
 		
 		return DefaultEither.newB(either.b());
 	}
+
+	@Override
+	public OperationLog getLog() {
+		OperationLog op = new DefaultOperationLog();
+		NodeOperation addNewChildAt = new AppendChildAtOperation(pos);
+		op = op.add(addNewChildAt);
+		return op;
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,5 +1,9 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
@@ -13,8 +17,15 @@
 	}
 
 	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e)
 	{
 		return _e.getAttributes().delete(key);
 	}
+
+	@Override
+	public OperationLog getLog() {
+		OperationLog op = new DefaultOperationLog();
+		DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(key);
+		return op.add(deleteAttribute);
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,5 +1,10 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
@@ -13,8 +18,15 @@
 	}
 
 	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e)
 	{
 		return _e.getChildren().deleteChildAt(pos);
 	}
+
+	@Override
+	public OperationLog getLog() {
+		OperationLog op = new DefaultOperationLog();
+		NodeOperation deleteChildAt = new DeleteChildAtOperation(pos);
+		return op.add(deleteChildAt);
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableAttributes.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableAttributes.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
 import java.nio.ByteBuffer;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
@@ -10,3 +10,4 @@
 	public Either<Error,T> delete(String _key);
 	public Either<Error,T> put(String _key,ByteBuffer _value);
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,16 +1,16 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Parent;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 
-public interface EditableChildren<T extends Parent<Node>> extends Children<Node>
+public interface EditableChildren<T extends Parent<T>> extends Children<T>
 {
 	public Either<Error,T> addNewChildAt(int _pos);
 	public Either<Error,T> deleteChildAt(int _pos);
 	
 	public final Error OUT_OF_RANGE = new DefaultError();
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/EditableNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,12 +1,12 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainer;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Parent;
 
-public interface EditableNode<T extends Parent<Node>> extends AttributesContainer , Parent<Node>
+public interface EditableNode<T extends Parent<T>> extends AttributesContainer , Parent<T>
 {
 	public EditableAttributes<T> getAttributes();
 	public EditableChildren<T> getChildren();
 }
 
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,9 +1,12 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public interface NodeEditor
 {
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e);
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e);
+	public OperationLog getLog();
 }
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,6 +2,11 @@
 
 import java.nio.ByteBuffer;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
@@ -17,9 +22,16 @@
 	}
 
 	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
+	public <T extends TreeNode> Either<Error,TreeNode> edit(T _e)
 	{
-		EditableAttributes<T> attrs = _e.getAttributes();
+		TreeNodeAttributes<TreeNode> attrs = _e.getAttributes();
 		return attrs.put(key,value);
 	}
+
+	@Override
+	public OperationLog getLog() {
+		OperationLog op = new DefaultOperationLog();
+		PutAttributeOperation putAttribute = new PutAttributeOperation(key,value);
+		return op.add(putAttribute);
+	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/AtomicReservableReference.java	Wed Sep 03 21:10:30 2014 +0900
@@ -11,7 +11,7 @@
 		String fuga = "fuga";
 		AtomicReservableReference<String> arr = new AtomicReservableReference<String>(hoge);
 		AtomicReservableReference<String>.Reservation r1 = arr.makeReservation(hoge,fuga);
-		AtomicReservableReference<String>.Reservation r2 = arr.makeReservation(hoge,fuga);
+		//AtomicReservableReference<String>.Reservation r2 = arr.makeReservation(hoge,fuga);
 		
 		System.out.println(arr.get());
 		r1.confirm();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultChangeSet.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultChangeSet.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,20 +1,20 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 
 public class DefaultChangeSet implements ChangeSet
 {
-	private final Node root;
+	private final TreeNode root;
 	private final ChangeSet previous;
 	private final ChangeList changeList;
 	private final String uuid;
 	private final String treeName;
 	private final long revision;
 	
-	public DefaultChangeSet(Node _node,ChangeSet _prev,ChangeList _log,String _uuid, String _treeName, long _revision)
+	public DefaultChangeSet(TreeNode _node,ChangeSet _prev,ChangeList _log,String _uuid, String _treeName, long _revision)
 	{
 		root = _node;
 		previous = _prev;
@@ -25,7 +25,7 @@
 	}
 
 	@Override
-	public Node getRoot()
+	public TreeNode getRoot()
 	{
 		return root;
 	}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,8 +1,8 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
 
 import java.nio.ByteBuffer;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
@@ -23,21 +23,21 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
 
-public class DefaultJungleTreeEditor<T extends TreeNode<T>> implements JungleTreeEditor
+public class DefaultJungleTreeEditor<T extends TreeNode> implements JungleTreeEditor
 {
 	private final TransactionManager<T> txManager;
-	private final T root;
+	private final TreeNode root;
 	private final TreeEditor editor;
 	private final TreeOperationLog log;
 
-	public DefaultJungleTreeEditor(T _root,TransactionManager<T> _txManager,TreeEditor _editor)
+	public DefaultJungleTreeEditor(TreeNode _root,TransactionManager<T> _txManager,TreeEditor _editor)
 	{
 		this(_root,_txManager,_editor,new DefaultTreeOperationLog());
 	}
 	
-	public DefaultJungleTreeEditor(T _root,TransactionManager<T> _txManager,TreeEditor _editor,TreeOperationLog _log)
+	public DefaultJungleTreeEditor(TreeNode newNode,TransactionManager<T> _txManager,TreeEditor _editor,TreeOperationLog _log)
 	{
-		root = _root;
+		root = newNode;
 		txManager = _txManager;
 		editor = _editor;
 		log = _log;
@@ -46,12 +46,12 @@
 	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
 	{
 		LoggingNodeHook hook = new LoggingNodeHook(_e);
-		Either<Error,T> either = editor.edit(root,_path,hook);
+		Either<Error,TreeNode> either = editor.edit(root,_path,hook);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		T newNode = either.b();
+		TreeNode newNode = either.b();
 		OperationLog newLog = hook.getLog();
 		
 		IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
@@ -130,7 +130,7 @@
 	}
 
 	@Override
-	public Node getRoot()
+	public TreeNode getRoot()
 	{
 		return null;
 	}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,7 +1,6 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
 
 import java.util.Iterator;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
@@ -15,7 +14,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public class DefaultTransactionManager<T extends TreeNode<T>> implements TransactionManager<T>
+public class DefaultTransactionManager<T extends TreeNode> implements TransactionManager<T>
 {
 	private final AtomicReservableReference<TreeContext<T>> repository;
 	private final TreeContext<T> tip;
@@ -32,7 +31,7 @@
 	}
 	
 	@Override
-	public Either<Error,TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log)
+	public Either<Error,TransactionManager<T>> commit(TreeNode _newRoot,final TreeOperationLog _log)
 	{
 		ChangeSet cs = tip.getChangeSet();
 		long currentRevision = cs.revision();
@@ -54,8 +53,7 @@
 			}
 		};
 		
-		Node root = _newRoot.getAsNode();
-		DefaultChangeSet newCs = new DefaultChangeSet(root,cs,list,uuid, _treeName, nextRevision);
+		DefaultChangeSet newCs = new DefaultChangeSet(_newRoot,cs,list,uuid, _treeName, nextRevision);
 		DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs);
 		
 		@SuppressWarnings("rawtypes")
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeContext.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeContext.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,12 +3,12 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 
-public class DefaultTreeContext<T extends TreeNode<T>> implements TreeContext<T>
+public class DefaultTreeContext<T extends TreeNode> implements TreeContext<T>
 {
-	private final T root;
+	private final TreeNode root;
 	private final ChangeSet cs;
 	
-	public DefaultTreeContext(T _newRoot,ChangeSet _cs)
+	public DefaultTreeContext(TreeNode _newRoot,ChangeSet _cs)
 	{
 		root = _newRoot;
 		cs = _cs;
@@ -21,7 +21,7 @@
 	}
 
 	@Override
-	public T getTreeNode()
+	public TreeNode getTreeNode()
 	{
 		return root;
 	}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,49 +1,64 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import java.nio.ByteBuffer;
+
+import fj.Ord;
+import fj.data.List;
+import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 
-public class DefaultTreeNode implements TreeNode<DefaultTreeNode>
+public class DefaultTreeNode implements TreeNode
 {
-	private final DefaultNode wrap;
+	//private final DefaultNode wrap;
+	public List<TreeNode> children;
+	public TreeMap<String,ByteBuffer> attrs;
+	
+	private static final List<TreeNode> NIL_LIST = List.nil();
+	private static final TreeMap<String,ByteBuffer> NIL_MAP = TreeMap.empty(Ord.stringOrd);
 	
 	public DefaultTreeNode()
 	{
-		this(new DefaultNode());
+		this(NIL_LIST,NIL_MAP);
 	}
 	
-	public DefaultTreeNode(DefaultNode _wrap)
+	public DefaultTreeNode(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
 	{
-		wrap = _wrap;
+		attrs = _attrs;
+		children = _children;
 	}
 
 	@Override
 	public DefaultTreeNodeChildren getChildren()
 	{
-		return new DefaultTreeNodeChildren(wrap);
+		return new DefaultTreeNodeChildren(children, attrs);
 	}
 
 	@Override
 	public DefaultTreeNodeAttribute getAttributes()
 	{
-		return new DefaultTreeNodeAttribute(wrap);
+		return new DefaultTreeNodeAttribute(children, attrs);
 	}
 	
 	@Override
-	public DefaultTreeNode createNewNode()
-	{
-		return new DefaultTreeNode(new DefaultNode());
+	public DefaultTreeNode createNewNode(){
+		return new DefaultTreeNode();
 	}
 	
-	public DefaultNode getWrap()
+	/*public DefaultNode getWrap()
 	{
 		return wrap;
-	}
+	}*/
 
-	@Override
+	/*@Override
 	public Node getAsNode()
 	{
 		return getWrap();
 	}
+	*/
+	public DefaultTreeNode clone()
+	{
+		return new DefaultTreeNode(children,attrs);
+	}
+	
+	
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,68 +1,77 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
 
 import java.nio.ByteBuffer;
+
+import fj.data.List;
+import fj.data.Option;
 import fj.data.TreeMap;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public class DefaultTreeNodeAttribute implements TreeNodeAttributes<DefaultTreeNode>
+public class DefaultTreeNodeAttribute implements TreeNodeAttributes<TreeNode>
 {
-	private final DefaultNode wrap;
+	public List<TreeNode> children;
+	public TreeMap<String,ByteBuffer> attrs;
 	
-	public DefaultTreeNodeAttribute(DefaultNode _wrap)
+	public DefaultTreeNodeAttribute(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
 	{
-		wrap = _wrap;
+		children = _children;
+		attrs = _attrs;
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> delete(String _key)
+	public TreeMap<String,ByteBuffer> getAttributesAsRawMap(){
+		return attrs;
+	}
+	
+	@Override
+	public Either<Error,TreeNode> delete(String _key)
 	{
 		if(_key == null){
 			return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
 		}
 		
-		DefaultAttributes attrs = wrap.getAttributes();
-		DefaultChildren children = wrap.getChildren();
-		
-		TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
-		if(!raw.contains(_key)){
+		if(!attrs.contains(_key)){
 			return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
 		}
 		
-		TreeMap<String,ByteBuffer> newMap = raw.delete(_key);
+		TreeMap<String,ByteBuffer> newMap = attrs.delete(_key);
 		
-		DefaultNode newNode = new DefaultNode(children.getChildrenAsRawList(),newMap);
+		TreeNode newNode = new DefaultTreeNode(children,newMap);
 		
-		return DefaultEither.newB(new DefaultTreeNode(newNode));
+		return DefaultEither.newB(newNode);
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> put(String _key, ByteBuffer _value)
+	public Either<Error,TreeNode> put(String _key, ByteBuffer _value)
 	{
 		if(_key == null || _value == null){
 			return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
 		}
 		
-		DefaultAttributes attrs = wrap.getAttributes();
-		DefaultChildren children = wrap.getChildren();
+		//DefaultAttributes attrs = wrap.getAttributes();
+		//DefaultChildren children = wrap.getChildren();
 		
-		TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
-		TreeMap<String,ByteBuffer> newMap = raw.set(_key,_value);
+		//TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
+		TreeMap<String,ByteBuffer> newMap = attrs.set(_key,_value);
 		
-		DefaultNode newNode = new DefaultNode(children.getChildrenAsRawList(),newMap);
+		TreeNode newNode = new DefaultTreeNode(children,newMap);
 		
-		return DefaultEither.newB(new DefaultTreeNode(newNode));
+		return DefaultEither.newB(newNode);
 	}
 
 	@Override
 	public ByteBuffer get(String _key)
 	{
-		return wrap.getAttributes().get(_key);
+		if(_key == null){
+			return null;
+		}
+		
+		Option<ByteBuffer> result = attrs.get(_key);
+		return result.isSome() ? result.some() : null;
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -6,18 +6,14 @@
 import fj.P2;
 import fj.data.List;
 import fj.data.TreeMap;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
 
-public class DefaultTreeNodeChildren implements TreeNodeChildren<DefaultTreeNode>
+public class DefaultTreeNodeChildren implements TreeNodeChildren<TreeNode>
 {
 	public static void main(String _args[])
 	{
@@ -28,16 +24,18 @@
 		
 	}
 	
-	private final DefaultNode node;
+	public List<TreeNode> children;
+	public TreeMap<String,ByteBuffer> attrs;
 	
-	public DefaultTreeNodeChildren(DefaultNode _node)
+	public DefaultTreeNodeChildren(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
 	{
-		node = _node;
+		children = _children;
+		attrs = _attrs;
 	}
 	
 	private boolean boundaryCheck(int _pos)
 	{
-		int size = node.getChildren().size();
+		int size = children.length();
 		if(size < _pos){
 			return false;
 		}
@@ -46,112 +44,93 @@
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> addNewChildAt(int _pos)
+	public List<TreeNode> getChildrenAsRawList(){
+		return children;
+	}
+	@Override
+	public Either<Error,TreeNode> addNewChildAt(int _pos)
 	{
 		if(!boundaryCheck(_pos) || _pos < 0){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
 		}
 		
-		DefaultChildren children = node.getChildren();
-		DefaultAttributes attrs = node.getAttributes();
 		
-		List<Node> raw = children.getChildrenAsRawList();
 		
-		P2<List<Node>,List<Node>> split = raw.splitAt(_pos);
-		List<Node> newChildren = split._1().snoc(new DefaultNode()).append(split._2());
-		Node newNode = new DefaultNode(newChildren,attrs.getAttributesAsRawMap());
+		P2<List<TreeNode>,List<TreeNode>> split = children.splitAt(_pos);
+		List<TreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2());
+		TreeNode newNode = new DefaultTreeNode(newChildren,attrs);
 		
-		return DefaultEither.newB(new DefaultTreeNode(newNode));
+		return DefaultEither.newB(newNode);
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> deleteChildAt(int _pos)
+	public Either<Error,TreeNode> deleteChildAt(int _pos)
 	{
 		if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
 		}
-		
-		DefaultChildren chs = node.getChildren();
-		List<Node> raw = chs.getChildrenAsRawList();
-		
-		P2<List<Node>,List<Node>> split = raw.splitAt(_pos);
-		List<Node> newChildren = split._1().append(split._2().tail());
+				
+		P2<List<TreeNode>,List<TreeNode>> split = children.splitAt(_pos);
+		List<TreeNode> newChildren = split._1().append(split._2().tail());
 		
-		DefaultAttributes attrs = node.getAttributes();
-		TreeMap<String, ByteBuffer> map = attrs.getAttributesAsRawMap();
 		
-		DefaultNode newNode = new DefaultNode(newChildren,map);
+		TreeNode newNode = new DefaultTreeNode(newChildren,attrs);
 		
-		return DefaultEither.newB(new DefaultTreeNode(newNode));
+		return DefaultEither.newB(newNode);
 	}
 
 	@Override
 	public int size()
 	{
-		return node.getChildren().size();
+		return children.length();
 	}
 
 	@Override
-	public Iterator<DefaultTreeNode> iterator()
+	public Iterator<TreeNode> iterator()
 	{
-		IterableConverter.Converter<DefaultTreeNode,DefaultNode> converter = new IterableConverter.Converter<DefaultTreeNode,DefaultNode>(){
-			@Override
-			public DefaultTreeNode conv(DefaultNode _b)
-			{
-				return new DefaultTreeNode(_b);
-			}
-		};
-		
-		List<Node> raw = node.getChildren().getChildrenAsRawList();
-		return new IterableConverter<DefaultTreeNode,DefaultNode>(raw,converter).iterator();
+		return children.iterator();
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement)
+	public Either<Error,TreeNode> replaceNode(int _pos,TreeNode _replacement)
 	{
-		int size = node.getChildren().size();
+		int size = children.length();
 		if(!(0 <= _pos && _pos < size)){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
 		}
-		DefaultNode replacement = _replacement.getWrap();
+		TreeNode replacement = _replacement;
 		
-		List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList();
-		P2<List<DefaultNode>,List<DefaultNode>> split = rawList.splitAt(_pos + 1);
-		List<DefaultNode> init = split._1().reverse().tail().reverse();
-		List<DefaultNode> newInit = init.snoc(replacement);
-		List<DefaultNode> newList = newInit.append(split._2());
-		TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap();
-		
-		return DefaultEither.newB(new DefaultTreeNode(new DefaultNode(newList,rawMap)));
+		P2<List<TreeNode>,List<TreeNode>> split = children.splitAt(_pos + 1);
+		List<TreeNode> init = split._1().reverse().tail().reverse();
+		List<TreeNode> newInit = init.snoc(replacement);
+		List<TreeNode> newList = newInit.append(split._2());
+		TreeNode node = new DefaultTreeNode(newList,attrs);
+		return DefaultEither.newB(node);
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> at(int _pos)
+	public Either<Error,TreeNode> at(int _pos)
 	{
-		List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList();
-		DefaultNode ch = rawList.index(_pos);
-		if(ch == null){
+		TreeNode Node = children.index(_pos);
+		if(Node == null){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
 		}
 		
-		return DefaultEither.newB(new DefaultTreeNode(ch));
+		return DefaultEither.newB(Node);
 	}
 
 	@Override
-	public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild)
+	public Either<Error,TreeNode> addNewChildAt(int _pos,TreeNode _newChild)
 	{
 		if(!boundaryCheck(_pos) || _pos < 0){
 			return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
 		}
-		Node newChild = _newChild.getWrap();
 		
-		List<Node> raw = node.getChildren().getChildrenAsRawList();
-		TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap();
 		
-		P2<List<Node>,List<DefaultNode>> split = raw.splitAt(_pos);
-		List<Node> newChildren = split._1().snoc(newChild).append(split._2());
-		Node newNode = new DefaultNode(newChildren,rawMap);
+		P2<List<TreeNode>,List<TreeNode>> split = children.splitAt(_pos);
+		List<TreeNode> newChildren = split._1().snoc(_newChild).append(split._2());
+		TreeNode newNode = new DefaultTreeNode(newChildren,attrs);
 		
-		return DefaultEither.newB(new DefaultTreeNode(newNode));
+		return DefaultEither.newB(newNode);
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TransactionManager.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TransactionManager.java	Wed Sep 03 21:10:30 2014 +0900
@@ -5,9 +5,9 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
-public interface TransactionManager<T extends TreeNode<T>>
+public interface TransactionManager<T extends TreeNode>
 {
-	public Either<Error,TransactionManager<T>> commit(T _newRoot,TreeOperationLog _log);
+	public Either<Error,TransactionManager<T>> commit(TreeNode _newRoot,TreeOperationLog _log);
 	public String getUUID();
 	public long getRevision();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,8 +3,8 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 
-public interface TreeContext<T extends TreeNode<T>>
+public interface TreeContext<T extends TreeNode>
 {
 	public ChangeSet getChangeSet();
-	public T getTreeNode();
+	public TreeNode getTreeNode();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultEvaluator.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultEvaluator.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,7 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class DefaultEvaluator implements Evaluator
@@ -13,7 +14,7 @@
 	}
 	
 	@Override
-	public <T extends TraversableNode<T>> Evaluation evaluate(T _current,int _pos)
+	public <T extends TreeNode> Evaluation evaluate(T _current,int _pos)
 	{
 		Pair<Integer,NodePath> pop = path.pop();
 		int head = pop.left();
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultTraverser.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/DefaultTraverser.java	Wed Sep 03 21:10:30 2014 +0900
@@ -3,6 +3,7 @@
 import java.util.Iterator;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -12,7 +13,7 @@
 public class DefaultTraverser implements Traverser
 {
 	@Override
-	public <T extends TraversableNode<T>> Either<Error,Traversal<T>> traverse(final T _root,Evaluator _evaluator)
+	public <T extends TreeNode> Either<Error,Traversal<TreeNode>> traverse(final T _root,Evaluator _evaluator)
 	{
 		Children<T> wrapper = new Children<T>(){
 			@Override
@@ -36,24 +37,24 @@
 		//Children<T> chs = _root.getChildren();
 		Children<T> chs = wrapper;
 		
-		Either<Error,List<Direction<T>>> ret = _traverse(chs,_evaluator,-1);
+		Either<Error,List<Direction<TreeNode>>> ret = _traverse(chs,_evaluator,-1);
 		if(ret.isA()){
 			return DefaultEither.newA(ret.a());
 		}
 		
-		List<Direction<T>> list = ret.b();
+		List<Direction<TreeNode>> list = ret.b();
 		
-		final Iterable<Direction<T>> iterable = list;
-		final T destination = ret.b().last().getTarget();
+		final Iterable<Direction<TreeNode>> iterable = list;
+		final TreeNode destination = ret.b().last().getTarget();
 		
-		Traversal<T> traversal = new Traversal<T>(){
+		Traversal<TreeNode> traversal = new Traversal<TreeNode>(){
 			@Override
-			public Iterator<Direction<T>> iterator(){
+			public Iterator<Direction<TreeNode>> iterator(){
 				return iterable.iterator();
 			}
 
 			@Override
-			public T destination(){
+			public TreeNode destination(){
 				return destination;
 			}
 		};
@@ -61,10 +62,10 @@
 		return DefaultEither.newB(traversal);
 	}
 	
-	private <T extends TraversableNode<T>> Either<Error,List<Direction<T>>> _traverse(Children<T> _chs,Evaluator _evaluator,int _pos)
+	private <T extends TreeNode> Either<Error,List<Direction<TreeNode>>> _traverse(Children<T> _chs,Evaluator _evaluator,int _pos)
 	{
 		int pos = _pos;
-		for(T ch : _chs){
+		for(TreeNode ch : _chs){
 			Evaluation e = _evaluator.evaluate(ch,pos);
 			Result r = e.result();
 			if(r == Result.ACCEPT){
@@ -90,7 +91,7 @@
 		return DefaultEither.newA(TraverserError.PATH_NOT_FOUND);
 	}
 	
-	private <T extends TraversableNode<T>> List<Direction<T>> _goal(final T _current,final int _pos)
+	private <T extends TreeNode> List<Direction<T>> _goal(final T _current,final int _pos)
 	{
 		Direction<T> d = new Direction<T>(){
 			@Override
@@ -111,16 +112,16 @@
 		return newList;
 	}
 	
-	private <T extends TraversableNode<T>> Either<Error,List<Direction<T>>> _accept(final T _current,final int _pos,Evaluator _evaluator)
+	private <T extends TreeNode> Either<Error,List<Direction<TreeNode>>> _accept(final T _current,final int _pos,Evaluator _evaluator)
 	{
-		Children<T> chs = _current.getChildren();
-		Either<Error,List<Direction<T>>> either = _traverse(chs,_evaluator,0);
+		Children<TreeNode> chs = _current.getChildren();
+		Either<Error,List<Direction<TreeNode>>> either = _traverse(chs,_evaluator,0);
 		if(either.isA()){
 			return either;
 		}
 		
-		List<Direction<T>> list = either.b();
-		Direction<T> d = new Direction<T>(){
+		List<Direction<TreeNode>> list = either.b();
+		Direction<TreeNode> d = new Direction<TreeNode>(){
 			@Override
 			public int getPosition()
 			{
@@ -133,7 +134,7 @@
 			}
 		};
 		
-		List<Direction<T>> newList = list.cons(d);
+		List<Direction<TreeNode>> newList = list.cons(d);
 		return DefaultEither.newB(newList);
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Evaluator.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Evaluator.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,8 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+
 public interface Evaluator
 {
-	public <T extends TraversableNode<T>> Evaluation evaluate(T _current,int _pos);
+	public <T extends TreeNode> Evaluation evaluate(T _current,int _pos);
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traversable.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traversable.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,9 +1,10 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public interface Traversable<T extends TraversableNode<T>>
 {
-	public Either<Error,Traversal<T>> traverse(Evaluator _e);
+	public Either<Error,Traversal> traverse(Evaluator _e);
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraversableChildren.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraversableChildren.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,7 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
 public interface TraversableChildren<T> extends Iterable<T>
 {
 	public int size();
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraversableNode.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/TraversableNode.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,7 +1,8 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Parent;
 
 public interface TraversableNode<T> extends Parent<T>
 {
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traversal.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traversal.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,8 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
-public interface Traversal<T extends TraversableNode<T>> extends Iterable<Direction<T>>
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+
+public interface Traversal<T extends TreeNode> extends Iterable<Direction<T>>
 {
 	public T destination();
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traverser.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/Traverser.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,9 +1,12 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 public interface Traverser
 {
-	public <T extends TraversableNode<T>> Either<Error,Traversal<T>> traverse(T _root,Evaluator _evaluator);
+	public <T extends TreeNode> Either<Error,Traversal<TreeNode>> traverse(final T _root,Evaluator _evaluator);
+
+	
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/util/IterableWrapper.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/util/IterableWrapper.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util;
 
 import java.util.Iterator;
 
@@ -45,3 +45,4 @@
 		}
 	}
 }
+*/
\ No newline at end of file
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/util/TraversableWrapper.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/util/TraversableWrapper.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.TraversableNode;
@@ -13,3 +13,4 @@
 	}
 
 }
+*/
\ No newline at end of file
--- a/src/test/java/DefaultJungleTreeTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/DefaultJungleTreeTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,11 +1,12 @@
 import java.nio.ByteBuffer;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Result;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -25,7 +26,7 @@
 	public static final String key = "KEY";
 	public static final ByteBuffer value = ByteBuffer.wrap(key.getBytes());
 	
-	public void testSampleTest()
+	public <T extends TreeNode>void testSampleTest()
 	{
 		Jungle j = instance();
 		j.createNewTree("tree");
@@ -44,7 +45,7 @@
 		editor1.success();
 		
 		// check the value ;
-		Node node = tree.getRootNode();
+		TreeNode node = tree.getRootNode();
 		ByteBuffer v = node.getAttributes().get(key);
 		Assert.assertEquals(0,v.compareTo(value));
 		
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/ChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/ChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,17 +1,20 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNodeChildren;
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
 public abstract class ChildrenTest<T> extends TestCase
 {
 	public abstract int expectSize();
-	public abstract Children<T> instance();
+	public abstract DefaultTreeNodeChildren instance();
 	
 	public void testSize()
 	{
 		int expect = expectSize();
-		Children<T> children = instance();
+		Children<TreeNode> children = instance();
 		
 		Assert.assertEquals(expect,children.size());
 	}
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/ParentTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/ParentTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core;
 
 import org.junit.Ignore;
 import org.junit.Test;
@@ -19,3 +19,4 @@
 		Assert.assertNotNull(children);
 	}
 }
+*/
\ No newline at end of file
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,9 +1,10 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.impl.treeeditor;
 
 import java.nio.ByteBuffer;
+
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TraversableNodeWrapper;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.tests.util.TestUtil;
@@ -26,36 +27,36 @@
 	
 	public void testEdittingDoesNotEffectToOtherTree()
 	{
-		DefaultTreeNode root = TestUtil.createMockTree(3);
+		TreeNode root = TestUtil.createMockTree(3);
 		DefaultTreeEditor editor = new DefaultTreeEditor(new DefaultTraverser());
 		DefaultNodePath path = new DefaultNodePath().add(0).add(2);
 		
-		DefaultTreeNode oldRoot = root;
+		TreeNode oldRoot = root;
 		
 		DefaultTreeEditor currentEditor = editor;
 		String key = "path";
 		
 		
-		DefaultTreeNode currentRoot = root;
+		TreeNode currentRoot = root;
 		for(DefaultNodePath part : path.inits()){
 			ByteBuffer value = ByteBuffer.wrap(part.toString().getBytes());
 			PutAttribute putAttribute = new PutAttribute(key,value);
-			Either<Error,DefaultTreeNode> either = currentEditor.edit(currentRoot,part,putAttribute);
+			Either<Error,TreeNode> either = currentEditor.edit(currentRoot,part,putAttribute);
 			if(either.isA()){
 				Assert.fail();
 			}
 			currentRoot = either.b();
 		}
 		
-		DefaultTreeNode newRoot = currentRoot;
+		TreeNode newRoot = currentRoot;
 		DefaultTraverser traverser = new DefaultTraverser();
 		
 		for(DefaultNodePath part : path.inits()){
-			Either<Error,Traversal<TraversableNodeWrapper<DefaultTreeNode>>> either = traverser.traverse(new TraversableNodeWrapper<DefaultTreeNode>(newRoot),new DefaultEvaluator(part));
+			Either<Error,Traversal<TreeNode>> either = traverser.traverse(newRoot,new DefaultEvaluator(part));
 			if(either.isA()){
 				Assert.fail();
 			}
-			DefaultTreeNode target = either.b().destination().getWrapped();
+			TreeNode target = either.b().destination();
 			String expected = part.toString();
 			String actual = new String(target.getAttributes().get(key).array());
 			
@@ -63,11 +64,11 @@
 		}
 		
 		for(DefaultNodePath part : path.inits()){
-			Either<Error,Traversal<TraversableNodeWrapper<DefaultTreeNode>>> either = traverser.traverse(new TraversableNodeWrapper<DefaultTreeNode>(oldRoot),new DefaultEvaluator(part));
+			Either<Error,Traversal<TreeNode>> either = traverser.traverse(oldRoot,new DefaultEvaluator(part));
 			if(either.isA()){
 				Assert.fail();
 			}
-			DefaultTreeNode target = either.b().destination().getWrapped();
+			TreeNode target = either.b().destination();
 			ByteBuffer actual = target.getAttributes().get(key);
 			
 			Assert.assertNull(actual);
@@ -81,11 +82,11 @@
 		DefaultTreeNode node = new DefaultTreeNode();
 		DefaultNodePath path = new DefaultNodePath();
 		
-		Either<Error,DefaultTreeNode> either = instance.edit(node,path,new AppendChildAt(0));
+		Either<Error,TreeNode> either = instance.edit(node,path,new AppendChildAt(0));
 		if(either.isA()){
 			Assert.fail();
 		}
-		DefaultTreeNode newRoot = either.b();
+		TreeNode newRoot = either.b();
 		Assert.assertEquals(1,newRoot.getChildren().size());
 	}
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/AppendChildAtTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/AppendChildAtTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,7 +1,7 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -13,15 +13,14 @@
 {
 	public void testEdit()
 	{
-		DefaultTreeNode node = new DefaultTreeNode(new DefaultNode());
+		TreeNode node = new DefaultTreeNode();
 		AppendChildAt op = new AppendChildAt(0);
-		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(node);
-		Either<Error, EditableNodeWrapper<DefaultTreeNode>> either = op.edit(wrapper);
+		Either<Error, TreeNode> either = op.edit(node);
 		if(either.isA()){
 			Assert.fail();
 		}
 		
-		DefaultTreeNode newNode = either.b().getWrap();
+		TreeNode newNode = either.b();
 		Assert.assertEquals(1,newNode.getChildren().size());
 	}
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteAttributeAtTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteAttributeAtTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,8 +1,8 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
 
 import java.nio.ByteBuffer;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -17,20 +17,19 @@
 		String key = "KEY";
 		ByteBuffer value = ByteBuffer.wrap(key.getBytes());
 		
-		DefaultTreeNode node = new DefaultTreeNode(new DefaultNode());
-		Either<Error,DefaultTreeNode> either = node.getAttributes().put(key, value);
+		TreeNode node = new DefaultTreeNode();
+		Either<Error,TreeNode> either = node.getAttributes().put(key, value);
 		if(either.isA()){
 			Assert.fail();
 		}
 		node = either.b();
 		
 		DeleteAttribute op = new DeleteAttribute(key);
-		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(node);
-		Either<Error, EditableNodeWrapper<DefaultTreeNode>> either2 = op.edit(wrapper);
+		Either<Error,TreeNode> either2 = op.edit(node);
 		if(either2.isA()){
 			Assert.fail();
 		}
-		DefaultTreeNode newNode = either2.b().getWrap();
+		TreeNode newNode = either2.b();
 		ByteBuffer ret = newNode.getAttributes().get(key);
 		Assert.assertNull(ret);
 	}
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteChildAtTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteChildAtTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,6 +1,6 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -12,8 +12,8 @@
 {
 	public void testEdit()
 	{
-		DefaultTreeNode node = new DefaultTreeNode();
-		Either<Error,DefaultTreeNode> either = node.getChildren().addNewChildAt(0);
+		TreeNode node = new DefaultTreeNode();
+		Either<Error,TreeNode> either = node.getChildren().addNewChildAt(0);
 		if(either.isA()){
 			Assert.fail();
 		}
@@ -21,12 +21,11 @@
 		Assert.assertEquals(1,node.getChildren().size());
 		
 		DeleteChildAt op = new DeleteChildAt(0);
-		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(node);
-		Either<Error,EditableNodeWrapper<DefaultTreeNode>> either2 = op.edit(wrapper);
+		Either<Error,TreeNode> either2 = op.edit(node);
 		if(either2.isA()){
 			Assert.fail();
 		}
-		node = either2.b().getWrap();
+		node = either2.b();
 		
 		Assert.assertEquals(0,node.getChildren().size());
 	}
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/EditableAttributesTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/EditableAttributesTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,20 +1,23 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
 
 import java.nio.ByteBuffer;
+
 import org.junit.Assert;
+
 import fj.P;
 import fj.P2;
 import fj.data.List;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import junit.framework.TestCase;
 
-public abstract class EditableAttributesTest<T extends EditableNode<T>> extends TestCase
+public abstract class EditableAttributesTest<T extends TreeNode<T>> extends TestCase
 {
-	public abstract EditableAttributes<T> instance();
+	public abstract TreeNodeAttributes<T> instance();
 	
 	@SuppressWarnings("unchecked")
 	public static final List<P2<String,ByteBuffer>> ENTRIES = List.list(
@@ -23,12 +26,12 @@
 		P.p("KEY3",ByteBuffer.wrap("VALUE3".getBytes()))
 	);
 	
-	public EditableAttributes<T> createTestData()
+	public TreeNodeAttributes<T> createTestData()
 	{
-		EditableAttributes<T> instance = instance();
+		TreeNodeAttributes<T> instance = instance();
 		
 		T node;
-		EditableAttributes<T> attr = instance;
+		TreeNodeAttributes<T> attr = instance;
 		for(P2<String,ByteBuffer> entry : ENTRIES){
 			Either<Error,T> either = attr.put(entry._1(),entry._2());
 			if(either.isA()){
@@ -44,7 +47,7 @@
 	
 	public void testPutDoesNotAcceptNullValue()
 	{
-		EditableAttributes<T> instance = instance();
+		TreeNodeAttributes<T> instance = instance();
 		
 		Either<Error,T> either = instance.put("KEY",null);
 		if(!either.isA()){
@@ -69,7 +72,7 @@
 	
 	public void testDeleteIfKeyExsist()
 	{
-		EditableAttributes<T> attr = createTestData();
+		TreeNodeAttributes<T> attr = createTestData();
 		
 		for(P2<String,ByteBuffer> entry : ENTRIES){
 			Either<Error,T> either = attr.delete(entry._1());
@@ -85,7 +88,7 @@
 	
 	public void testDeleteIfKeyNotExist()
 	{
-		EditableAttributes<T> attr = createTestData();
+		TreeNodeAttributes<T> attr = createTestData();
 		
 		Either<Error,T> either = attr.delete(DUMMY_KEY);
 		if(!either.isA()){
@@ -93,3 +96,4 @@
 		}
 	}
 }
+*/
\ No newline at end of file
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/EditableChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/EditableChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,7 +1,7 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor;
 
 import java.nio.ByteBuffer;
-import org.junit.Assert;
+/*import org.junit.Assert;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
@@ -132,4 +132,4 @@
 		
 		Assert.assertEquals(size,children.size());
 	}
-}
+}*/
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/PutAttributeTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/PutAttributeTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -4,8 +4,7 @@
 
 import org.junit.Assert;
 
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -18,15 +17,15 @@
 	{
 		String key = "KEY";
 		ByteBuffer value = ByteBuffer.wrap(key.getBytes());
-		DefaultTreeNode node = new DefaultTreeNode(new DefaultNode());
+		TreeNode node = new DefaultTreeNode();
 		PutAttribute op = new PutAttribute(key,value);
-		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(node);
-		Either<Error, EditableNodeWrapper<DefaultTreeNode>> either = op.edit(wrapper);
+		//EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(node);
+		Either<Error, TreeNode> either = op.edit(node);
 		if(either.isA()){
 			Assert.fail();
 		}
 		
-		DefaultTreeNode newNode = either.b().getWrap();
+		TreeNode newNode = either.b();
 		ByteBuffer ret = newNode.getAttributes().get(key);
 		Assert.assertEquals(0,ret.compareTo(value));
 	}
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/TreeNodeChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/TreeNodeChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.treeeditor;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.treeeditor;
 
 import java.nio.ByteBuffer;
 import org.junit.Assert;
@@ -34,7 +34,7 @@
 			instance = either.b();
 		}
 		
-		T newNode = instance.createNewNode();
+		TreeNode<T> newNode = instance.createNewNode();
 		String key = "KEY";
 		ByteBuffer value = ByteBuffer.wrap("VALUE".getBytes());
 		
@@ -78,7 +78,7 @@
 		// prepare
 		
 		for(int i = 0;i < _count;i ++){
-			T newNode = instance.createNewNode();
+			TreeNode<T> newNode = instance.createNewNode();
 			Either<Error,T> either = newNode.getAttributes().put(key,value);
 			if(either.isA()){
 				Assert.fail("failed to put attributes to child");
@@ -99,7 +99,7 @@
 		// create node for replacement.
 		
 		ByteBuffer replaceNodeValue = ByteBuffer.wrap("EULAV".getBytes());
-		T replacement = instance.createNewNode();
+		TreeNode<T> replacement = instance.createNewNode();
 		Either<Error,T> either = replacement.getAttributes().put(key,replaceNodeValue);
 		if(either.isA()){
 			Assert.fail("failed to create replacement node");
@@ -128,4 +128,4 @@
 			Assert.assertEquals(0,expect.compareTo(actual));
 		}
 	}
-}
+}*/
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeAttributesTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeAttributesTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,17 +1,16 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.clonable;
 
 import java.nio.ByteBuffer;
+
 import fj.Ord;
 import fj.P2;
 import fj.data.List;
 import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor.EditableAttributesTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNodeAttribute;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
@@ -21,20 +20,20 @@
 	{
 		TestSuite suite = new TestSuite();
 		suite.addTestSuite(AttributeTestImpl.class);
-		suite.addTestSuite(EditableAttributesTestImpl.class);
+		//suite.addTestSuite(EditableAttributesTestImpl.class);
 		return suite;
 	}
 	
 	public static DefaultTreeNode instance()
 	{
-		List<DefaultNode> rawList = List.nil();
+		List<TreeNode> rawList = List.nil();
 		TreeMap<String,ByteBuffer> rawMap = TreeMap.empty(Ord.stringOrd);
 		
 		for(P2<String,ByteBuffer> entry : AttributesTest.ENTRIES){
 			rawMap = rawMap.set(entry._1(),entry._2());
 		}
 		
-		return new DefaultTreeNode(new DefaultNode(rawList,rawMap));
+		return new DefaultTreeNode(rawList,rawMap);
 	}
 	
 	public static class AttributeTestImpl extends AttributesTest
@@ -48,16 +47,15 @@
 		
 	}
 	
-	public static class EditableAttributesTestImpl extends EditableAttributesTest<EditableNodeWrapper<DefaultTreeNode>>
+	/*public static class EditableAttributesTestImpl extends EditableAttributesTest<DefaultTreeNode>
 	{
 
 		@Override
-		public EditableAttributes<EditableNodeWrapper<DefaultTreeNode>> instance()
+		public DefaultTreeNodeAttribute instance()
 		{
 			DefaultTreeNode instance = DefaultTreeNodeAttributesTest.instance();
-			EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(instance);
-			return wrapper.getAttributes();
+			return instance.getAttributes();
 		}
 		
-	}
+	}*/
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,8 +1,7 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.clonable;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.clonable;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor.EditableChildrenTest;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.treeeditor.TreeNodeChildrenTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
@@ -21,7 +20,7 @@
 	
 	public static DefaultTreeNode instance()
 	{
-		return new DefaultTreeNode(new DefaultNode());
+		return new DefaultTreeNode();
 	}
 	
 	public static class TreeNodeChildrenTestImpl extends TreeNodeChildrenTest<DefaultTreeNode>
@@ -43,4 +42,4 @@
 			return wrapper.getChildren();
 		}
 	}
-}
+}*/
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,8 +2,6 @@
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainer;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainerTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.ParentTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -15,22 +13,19 @@
 	{
 		TestSuite suite = new TestSuite();
 		suite.addTestSuite(AttributesContaierTestImpl.class);
-		suite.addTestSuite(ParentTestImpl.class);
+		//suite.addTestSuite(ParentTestImpl.class);
 		return suite;
 	}
 	
 	public static DefaultTreeNode instance()
 	{
-		DefaultTreeNode node = new DefaultTreeNode(new DefaultNode());
+		DefaultTreeNode node = new DefaultTreeNode();
 		return node;
 	}
 	
 	public void testGetWrapped()
 	{
 		DefaultTreeNode instance = instance();
-		DefaultNode wrapped = instance.getWrap();
-		
-		Assert.assertNotNull(wrapped);
 	}
 	
 	public void testCreateNewNode()
@@ -50,7 +45,7 @@
 		}
 	}
 	
-	public static class ParentTestImpl extends ParentTest<DefaultTreeNode>
+	/*public static class ParentTestImpl extends ParentTest<DefaultTreeNode>
 	{
 
 		@Override
@@ -58,5 +53,5 @@
 		{
 			return DefaultTreeNodeTest.instance();
 		}
-	}
+	}*/
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingAttributesTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingAttributesTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
 
 import java.nio.ByteBuffer;
 
@@ -9,7 +9,6 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesTest;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor.EditableAttributesTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
@@ -29,14 +28,14 @@
 	
 	public static LoggingNode<EditableNodeWrapper<DefaultTreeNode>> instance()
 	{
-		List<DefaultNode> rawList = List.nil();
+		List<DefaultTreeNode> rawList = List.nil();
 		TreeMap<String,ByteBuffer> rawMap = TreeMap.empty(Ord.stringOrd);
 		
 		for(P2<String, ByteBuffer> entry : AttributesTest.ENTRIES){
 			rawMap = rawMap.set(entry._1(),entry._2());
 		}
 		
-		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(new DefaultTreeNode(new DefaultNode(rawList,rawMap)));
+		EditableNodeWrapper<DefaultTreeNode> wrapper = new EditableNodeWrapper<DefaultTreeNode>(new DefaultTreeNode (rawList,rawMap));
 		return new LoggingNode<EditableNodeWrapper<DefaultTreeNode>>(wrapper);
 	}
 	
@@ -61,3 +60,4 @@
 		
 	}
 }
+*/
\ No newline at end of file
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor.EditableChildrenTest;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper;
@@ -32,3 +32,4 @@
 		}
 	}
 }
+*/
\ No newline at end of file
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingNodeTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingNodeTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,4 +1,4 @@
-package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
+/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.logging;
 
 import java.nio.ByteBuffer;
 import org.junit.Assert;
@@ -158,4 +158,4 @@
 			return LoggingNodeTest.instance();
 		}
 	}
-}
+}*/
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultAttributesTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultAttributesTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -11,13 +11,16 @@
 import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesTest;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNodeAttribute;
 
 public class DefaultAttributesTest extends AttributesTest
 {
-	public DefaultAttributes instance()
+	public TreeNodeAttributes<TreeNode> instance()
 	{
-		List<DefaultNode> rawList = List.nil();
+		List<TreeNode> rawList = List.nil();
 		TreeMap<String,ByteBuffer> rawMap = TreeMap.empty(Ord.stringOrd);
 		
 		// add attributes
@@ -26,13 +29,13 @@
 			rawMap = rawMap.set(entry._1(),entry._2());
 		}
 		
-		DefaultNode node = new DefaultNode(rawList,rawMap);
+		TreeNode node = new DefaultTreeNode(rawList,rawMap);
 		return node.getAttributes();
 	}
 	
 	public void testGetAttributesAsRawMap()
 	{
-		DefaultAttributes attrs = instance();
+		TreeNodeAttributes<TreeNode> attrs = instance();
 		TreeMap<String,ByteBuffer> rawMap = attrs.getAttributesAsRawMap();
 		
 		// testing rawmap is not null.
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultChildrenTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultChildrenTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -8,24 +8,24 @@
 import fj.data.List;
 import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.ChildrenTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNodeChildren;
 
-public class DefaultChildrenTest extends ChildrenTest<Node>
+public class DefaultChildrenTest extends ChildrenTest<TreeNode>
 {
 	
 	@Override
-	public DefaultChildren instance()
+	public DefaultTreeNodeChildren instance()
 	{
-		List<DefaultNode> rawList = List.nil();
+		List<TreeNode> rawList = List.nil();
 		for(int i = 0;i < expectSize();i ++){
-			rawList = rawList.cons(new DefaultNode());
+			rawList = rawList.cons(new DefaultTreeNode());
 		}
 		
 		TreeMap<String,ByteBuffer> rawMap = TreeMap.empty(Ord.stringOrd);
 		
-		return new DefaultNode(rawList,rawMap).getChildren();
+		return new DefaultTreeNode(rawList,rawMap).getChildren();
 	}
 
 	@Override
@@ -36,8 +36,8 @@
 	
 	public void testGetChildrenAsRawList()
 	{
-		DefaultChildren instance = instance();
-		List<DefaultNode> rawList = instance.getChildrenAsRawList();
+		DefaultTreeNodeChildren instance = instance();
+		List<TreeNode> rawList = instance.getChildrenAsRawList();
 		
 		Assert.assertNotNull(rawList);
 		Assert.assertEquals(expectSize(),rawList.length());
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultNodeTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/node/DefaultNodeTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -7,8 +7,8 @@
 import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainer;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainerTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.ParentTest;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
@@ -23,15 +23,15 @@
 	{
 		TestSuite suite = new TestSuite();
 		suite.addTestSuite(DefaultNodeTest.AttributesContaierTestImpl.class);
-		suite.addTestSuite(DefaultNodeTest.ParentTestImpl.class);
+		//suite.addTestSuite(DefaultNodeTest.ParentTestImpl.class);
 		return suite;
 	}
 	
-	public static DefaultNode instance()
+	public static DefaultTreeNode instance()
 	{
-		List<DefaultNode> rawList = List.nil();
+		List<TreeNode> rawList = List.nil();
 		TreeMap<String,ByteBuffer> rawMap = TreeMap.empty(Ord.stringOrd);
-		DefaultNode node = new DefaultNode(rawList,rawMap);
+		DefaultTreeNode node = new DefaultTreeNode(rawList,rawMap);
 		
 		return node;
 	}
@@ -45,13 +45,13 @@
 		}
 	}
 	
-	public static class ParentTestImpl extends ParentTest<DefaultNode>
+	/*public static class ParentTestImpl extends ParentTest<DefaultTreeNode>
 	{
 
 		@Override
-		public DefaultNode instance()
+		public DefaultTreeNode instance()
 		{
 			return DefaultNodeTest.instance();
 		}
-	}
+	}*/
 }
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/tests/util/TestUtil.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/tests/util/TestUtil.java	Wed Sep 03 21:10:30 2014 +0900
@@ -2,11 +2,11 @@
 
 import java.nio.ByteBuffer;
 
-
 import org.junit.Ignore;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
@@ -14,15 +14,15 @@
 @Ignore
 public class TestUtil
 {
-	public static DefaultTreeNode createMockTree(int _maxDepth)
+	public static TreeNode createMockTree(int _maxDepth)
 	{
 		return _createMockTree(1,_maxDepth,new DefaultNodePath());
 	}
 	
-	public static DefaultTreeNode _createMockTree(int _currentDepth,int _maxDepth,NodePath _path)
+	public static TreeNode _createMockTree(int _currentDepth,int _maxDepth,NodePath _path)
 	{
-		DefaultTreeNode parent = new DefaultTreeNode();
-		Either<Error, DefaultTreeNode> either = parent.getAttributes().put("KEY",ByteBuffer.wrap(_path.toString().getBytes()));
+		TreeNode parent = new DefaultTreeNode();
+		Either<Error, TreeNode> either = parent.getAttributes().put("KEY",ByteBuffer.wrap(_path.toString().getBytes()));
 		if(either.isA()){
 			return null;
 		}
@@ -30,7 +30,7 @@
 		
 		if(_currentDepth != _maxDepth){
 			for(int i = 0;i <= _currentDepth;i ++){
-				DefaultTreeNode ch = _createMockTree(_currentDepth + 1,_maxDepth,_path.add(i));
+				TreeNode ch = _createMockTree(_currentDepth + 1,_maxDepth,_path.add(i));
 				either = parent.getChildren().addNewChildAt(i,ch);
 				if(either.isA()){
 					return null;
--- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java	Wed Sep 03 20:56:24 2014 +0900
+++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java	Wed Sep 03 21:10:30 2014 +0900
@@ -1,14 +1,13 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverse;
 
 import java.nio.ByteBuffer;
+
 import org.junit.Assert;
 
 import fj.data.List;
-
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TraversableNodeWrapper;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Direction;
@@ -25,9 +24,9 @@
 	public void testTraverse()
 	{
 		int maxHeight = 3;
-		DefaultTreeNode root = createTree(0,0,maxHeight,new DefaultNodePath());
+		TreeNode root = createTree(0,0,maxHeight,new DefaultNodePath());
 		
-		TraversableNodeWrapper<DefaultTreeNode> traversable = new TraversableNodeWrapper<DefaultTreeNode>(root);
+		//TraversableNodeWrapper<DefaultTreeNode> traversable = new TraversableNodeWrapper<DefaultTreeNode>(root);
 		Traverser traverser = instance();
 	
 		// generate all pattern.
@@ -36,24 +35,24 @@
 		
 		for(DefaultNodePath path : paths){
 			DefaultEvaluator evaluator = new DefaultEvaluator(path);
-			Either<Error,Traversal<TraversableNodeWrapper<DefaultTreeNode>>> ret = traverser.traverse(traversable,evaluator);
+			Either<Error,Traversal<TreeNode>> ret = traverser.traverse(root,evaluator);
 			if(ret.isA()){
 				Assert.fail();
 			}
 			
-			Traversal<TraversableNodeWrapper<DefaultTreeNode>> traversal = ret.b();
-			TraversableNodeWrapper<DefaultTreeNode> target = traversal.destination();
+			Traversal<TreeNode> traversal = ret.b();
+			TreeNode target = traversal.destination();
 			String expect = path.toString();
-			ByteBuffer value = target.getWrapped().getAttributes().get(key);
+			ByteBuffer value = target.getAttributes().get(key);
 			String actual = new String(value.array());
 			Assert.assertEquals(expect,actual);
 			
 			List<DefaultNodePath> parts = path.inits();
 			
-			for(Direction<TraversableNodeWrapper<DefaultTreeNode>> d : traversal){
+			for(Direction<TreeNode> d : traversal){
 				DefaultNodePath part = parts.head();
 				parts = parts.tail();
-				value = d.getTarget().getWrapped().getAttributes().get(key);
+				value = d.getTarget().getAttributes().get(key);
 				String actualCurrentPathStr = new String(value.array());
 				String expectCurrentPathStr = part.toString();
 				Assert.assertEquals(expectCurrentPathStr,actualCurrentPathStr);
@@ -78,12 +77,12 @@
 	
 	public static String key = "KEY";
 	public static ByteBuffer value = ByteBuffer.wrap(key.getBytes());
-	public static DefaultTreeNode factory = new DefaultTreeNode(new DefaultNode());
+	public static DefaultTreeNode factory = new DefaultTreeNode();
 	
-	public DefaultTreeNode createTree(int _curX,int _curY,int _maxHeight,NodePath _address)
+	public TreeNode createTree(int _curX,int _curY,int _maxHeight,NodePath _address)
 	{
-		DefaultTreeNode parent = factory.createNewNode();
-		Either<Error,DefaultTreeNode> either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes()));
+		TreeNode parent = factory.createNewNode();
+		Either<Error,TreeNode> either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes()));
 		if(either.isA()){
 			Assert.fail();
 		}
@@ -94,7 +93,7 @@
 		}
 		
 		for(int i = 0;i < _curY + 1;i ++){
-			DefaultTreeNode ch = createTree(i,_curY + 1,_maxHeight,_address.add(i));
+			TreeNode ch = createTree(i,_curY + 1,_maxHeight,_address.add(i));
 			either = parent.getChildren().addNewChildAt(i,ch);
 			if(either.isA()){
 				Assert.fail();