changeset 92:14ce7a0dedca

Logging Node and Editor
author one
date Sat, 06 Sep 2014 05:03:10 +0900
parents fb1dc448ac8c
children ef68358ed0e8
files src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java
diffstat 17 files changed, 152 insertions(+), 123 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java	Sat Sep 06 05:03:10 2014 +0900
@@ -1,11 +1,12 @@
 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 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 TreeEditor
 {
-	public Either<Error,TreeNode> edit(TreeNode _root,NodePath _path,NodeEditor _transformer);
+	public Either<Error,LoggingNode> edit(TreeNode _root,NodePath _path,NodeEditor _transformer);
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,6 +3,7 @@
 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.TreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Direction;
@@ -22,7 +23,7 @@
 	}
 	
 	@Override
-	public Either<Error,TreeNode> edit(TreeNode _root,NodePath _path,NodeEditor _editor)
+	public Either<Error,LoggingNode> edit(TreeNode _root,NodePath _path,NodeEditor _editor)
 	{
 		DefaultEvaluator e = new DefaultEvaluator(_path);
 		//TraversableNodeWrapper<T> wrap = new TraversableNodeWrapper<T>(_root);
@@ -33,12 +34,12 @@
 		}
 		
 		Traversal t = either.b();
-		Either<Error,TreeNode> ret = clone(t,_editor);
+		Either<Error,LoggingNode> ret = clone(t,_editor);
 		
 		return ret;
 	}
 	
-	private Either<Error,TreeNode> clone(Traversal _t,NodeEditor _editor)
+	private Either<Error,LoggingNode> clone(Traversal _t,NodeEditor _editor)
 	{
 		// copying nodes from bottom to root
 		
@@ -56,11 +57,11 @@
 			return DefaultEither.newA(either.a());
 		}
 		
-		TreeNode newNode = either.b();
+		TreeNode newWrap = either.b();
 		
 		// top
 		int pos = targetDirection.getPosition();
-		TreeNode child = newNode;
+		TreeNode child = newWrap;
 		for(Direction<TreeNode> parentDirection : path.tail()){
 			TreeNodeChildren chs =  parentDirection.getTarget().getChildren();
 					
@@ -75,6 +76,6 @@
 		}
 		
 		TreeNode newRoot = child;
-		return DefaultEither.newB(newRoot);
+		return DefaultEither.newB(new LoggingNode(newRoot,_editor.getLog()));
 	}
 }
\ 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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java	Sat Sep 06 05:03:10 2014 +0900
@@ -1,60 +1,57 @@
-/*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.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
-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 LoggingAttributes<T extends EditableNode<T>> implements EditableAttributes<LoggingNode<T>>
+public class LoggingAttributes //implements EditableAttributes
 {
-	private final T wrap;
+	private final TreeNode wrap;
 	private final OperationLog log;
 	
-	public LoggingAttributes(T _wrap,OperationLog _log)
+	public LoggingAttributes(TreeNode _wrap,OperationLog _log)
 	{
 		wrap = _wrap;
 		log = _log;
 	}
 
-	@Override
 	public ByteBuffer get(String _key)
 	{
-		EditableAttributes<T> attributes = wrap.getAttributes();
+		TreeNodeAttributes attributes = wrap.getAttributes();
 		return attributes.get(_key);
 	}
 	
-	private Either<Error,LoggingNode<T>> edit(NodeOperation _op)
+	private Either<Error,LoggingNode> edit(NodeOperation _op)
 	{
-		Either<Error,T> either = _op.invoke(wrap);
+		Either<Error,TreeNode> either = _op.invoke(wrap);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		T newWrap = either.b();
-		OperationLog newLog = log.add(_op);
-		LoggingNode<T> newLoggingNode = new LoggingNode<T>(newWrap,newLog);
+		TreeNode newNode = either.b();
+		OperationLog newLog = log.add(_op); 
+		LoggingNode newLoggingNode = new LoggingNode(newNode,newLog);
 		
 		return DefaultEither.newB(newLoggingNode);
 	}
 
-	@Override
-	public Either<Error,LoggingNode<T>> delete(final String _key)
+	public Either<Error,LoggingNode> delete(final String _key)
 	{
 		
 		DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(_key);
 		return edit(deleteAttribute);
 	}
 
-	@Override
-	public Either<Error,LoggingNode<T>> put(final String _key,final ByteBuffer _value)
+	public Either<Error,LoggingNode> put(final String _key,final ByteBuffer _value)
 	{
 		PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value);
 		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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java	Sat Sep 06 05:03:10 2014 +0900
@@ -1,78 +1,75 @@
-/*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.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 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;
-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.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 LoggingChildren<T extends EditableNode<T>> implements EditableChildren<LoggingNode<T>>
+public class LoggingChildren //implements EditableChildren
 {
-	private final T wrap;
+	private final TreeNode wrap;
 	private final OperationLog log;
 	
-	public LoggingChildren(T _wrap,OperationLog _log)
+	public LoggingChildren(TreeNode _wrap,OperationLog _log)
 	{
 		wrap = _wrap;
 		log = _log;
 	}
 
-	@Override
 	public int size()
 	{
-		EditableChildren<T> children = wrap.getChildren();
+		Children children = wrap.getChildren();
 		return children.size();
 	}
 	
+	/*
 	@Override
-	public Iterator<LoggingNode<T>> iterator()
+	public Iterator<LoggingNode> iterator()
 	{
-		EditableChildren<T> children = wrap.getChildren();
-		return (Iterator<LoggingNode<T>>) children.iterator();
-	}
+		LoggingChildren children = wrap.getChildren();
+		return children.iterator();
+	}*/
 	
-	public Either<Error,LoggingNode<T>> edit(NodeOperation _op)
+	public Either<Error,LoggingNode> edit(NodeOperation _op)
 	{
-		Either<Error,T> either = _op.invoke(wrap);
+		Either<Error,TreeNode> either = _op.invoke(wrap);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		T newWrap = either.b();
+		TreeNode newWrap = either.b();
 		OperationLog newLog = log.add(_op);
-		LoggingNode<T> newLoggingNode = new LoggingNode<T>(newWrap,newLog);
+		LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog);
 		return DefaultEither.newB(newLoggingNode);
 	}
 	
-	@Override
-	public Either<Error,LoggingNode<T>> addNewChildAt(final int _pos)
+	public Either<Error,LoggingNode> addNewChildAt(final int _pos)
 	{
 		NodeOperation addNewChildAt = new AppendChildAtOperation(_pos);
 		return edit(addNewChildAt);
 	}
 
-	@Override
-	public Either<Error,LoggingNode<T>> deleteChildAt(final int _pos)
+	public Either<Error,LoggingNode> deleteChildAt(final int _pos)
 	{
 		NodeOperation deleteChildAt = new DeleteChildAtOperation(_pos);
 		return edit(deleteChildAt);
 	}
 
-	@Override
-	public Either<Error,LoggingNode<T>> at(int _pos)
+	public Either<Error,LoggingNode> at(int _pos)
 	{
-		EditableChildren<T> children = wrap.getChildren();
-		Either<Error,T> either = children.at(_pos);
+		Children children = wrap.getChildren();
+		Either<Error,TreeNode> either = children.at(_pos);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		T node = either.b();
-		return DefaultEither.newB(new LoggingNode<T>(node));
+		TreeNode node = either.b();
+		return DefaultEither.newB(new LoggingNode(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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java	Sat Sep 06 05:03:10 2014 +0900
@@ -1,35 +1,32 @@
-/*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.impl.TreeNode;
 
-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;
 
-public class LoggingNode<T extends EditableNode<T>> implements EditableNode<LoggingNode<T>>
+public class LoggingNode
 {
-	public LoggingNode(T _wrap)
+	public LoggingNode(TreeNode _wrap)
 	{
 		this(_wrap,new DefaultOperationLog());
 	}
 	
-	public LoggingNode(T _wrap,OperationLog _log)
+	public LoggingNode(TreeNode _wrap,OperationLog _log)
 	{
 		wrap = _wrap;
 		log = _log;
 	}
 	
-	private final T wrap;
+	private final TreeNode wrap;
 	private final OperationLog log;
 	
-	@Override
-	public EditableAttributes<LoggingNode<T>> getAttributes()
+	public LoggingAttributes getAttributes()
 	{
-		return new LoggingAttributes<T>(wrap,log);
+		return new LoggingAttributes(wrap,log);
 	}
 
-	@Override
-	public EditableChildren<LoggingNode<T>> getChildren()
+	public LoggingChildren getChildren()
 	{
-		return new LoggingChildren<T>(wrap,log);
+		return new LoggingChildren(wrap,log);
 	}
 	
 	public OperationLog getOperationLog()
@@ -37,9 +34,8 @@
 		return log;
 	}
 	
-	public T getWrap()
+	public TreeNode getWrap()
 	{
 		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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java	Sat Sep 06 05:03:10 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.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
@@ -26,15 +26,11 @@
 			return DefaultEither.newA(either.a());
 		}
 		log = editor.getLog();
-		TreeNode newLoggingNode = either.b();
-		//T newNode = newLoggingNode.getWrap();
-		//log = newLoggingNode.getOperationLog();
-		
-		return DefaultEither.newB(newLoggingNode);
+		return DefaultEither.newB(either.b());
 	}
 	
 	public OperationLog getLog()
 	{
 		return log;
 	}
-}
+}*/
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,6 +3,9 @@
 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.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 final class AppendChildAtOperation implements NodeOperation
@@ -19,12 +22,11 @@
 		return Command.APPEND_CHILD;
 	}
 	
-	/*@Override
-	public <T extends TreeNode> Either<Error,T> invoke(T _target)
+	@Override
+	public Either<Error,TreeNode> invoke(TreeNode _target)
 	{
-		AppendChildAt appendChildAt = new AppendChildAt(pos);
-		return appendChildAt.edit(_target);
-	}*/
+		return _target.getChildren().addNewChildAt(pos);
+	}
 
 	@Override
 	public int getPosition()
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,7 +3,10 @@
 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.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
+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
 {
@@ -20,13 +23,13 @@
 		return Command.DELETE_ATTRIBUTE;
 	}
 	
-	/*@Override
-	public <T extends TreeNode> Either<Error,T> invoke(T _target)
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,7 +3,10 @@
 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.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
+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
 {
@@ -20,12 +23,12 @@
 		return Command.DELETE_CHILD;
 	}
 	
-	/*@Override
-	public <T extends TreeNode> Either<Error,T> invoke(T _target)
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,11 +3,15 @@
 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.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
+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 TreeNode> Either<Error,T> invoke(T _target);
+	public Either<Error,TreeNode> invoke(TreeNode _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 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java	Sat Sep 06 05:03:10 2014 +0900
@@ -3,6 +3,10 @@
 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.impl.TreeNode;
+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
@@ -22,13 +26,11 @@
 		return Command.PUT_ATTRIBUTE;
 	}
 	
-	/*@Override
-	public <T extends TreeNode> Either<Error,T> invoke(T _target)
+	@Override
+	public Either<Error,TreeNode> invoke(TreeNode _target)
 	{
-		PutAttribute putAttribute = new PutAttribute(key,value);
-		return putAttribute.edit(_target);
-	}*/
-
+		return _target.getAttributes().put(key,value);
+	}
 	@Override
 	public int getPosition()
 	{
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java	Sat Sep 06 05:03:10 2014 +0900
@@ -12,29 +12,30 @@
 public class AppendChildAt implements NodeEditor
 {
 	private final int pos;
+	private OperationLog log;
 	
 	public AppendChildAt(int _pos)
 	{
 		pos = _pos;
+		log = new DefaultOperationLog();
 	}
 
 	@Override
-	public Either<Error,TreeNode> edit(TreeNode _e)
+	public Either<Error, TreeNode> edit(TreeNode _e) 
 	{
-		Either<Error,TreeNode> either = _e.getChildren().addNewChildAt(pos);
+		NodeOperation addNewChildOperation = new AppendChildAtOperation(pos);
+		Either<Error,TreeNode> either = addNewChildOperation.invoke(_e);
 		if(either.isA()){
 			// error
 			return either;
 		}
-		
+		log = log.add(addNewChildOperation);
 		return DefaultEither.newB(either.b());
 	}
 
 	@Override
 	public OperationLog getLog() {
-		OperationLog op = new DefaultOperationLog();
-		NodeOperation addNewChildAt = new AppendChildAtOperation(pos);
-		op = op.add(addNewChildAt);
-		return op;
+		return log;
 	}
+
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java	Sat Sep 06 05:03:10 2014 +0900
@@ -4,28 +4,35 @@
 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.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 DeleteAttribute implements NodeEditor
 {
 	private final String key;
-	
+	private OperationLog log;
 	public DeleteAttribute(String _key)
 	{
 		key = _key;
+		log = new DefaultOperationLog();
 	}
 
 	@Override
 	public Either<Error,TreeNode> edit(TreeNode _e)
 	{
-		return _e.getAttributes().delete(key);
+		DeleteAttributeOperation deleteAttributeOperation = new DeleteAttributeOperation(key);
+		Either<Error,TreeNode> either = deleteAttributeOperation.invoke(_e);
+		if(either.isA()){
+			// error
+			return either;
+		}
+		log = log.add(deleteAttributeOperation);
+		return DefaultEither.newB(either.b());
 	}
 
 	@Override
 	public OperationLog getLog() {
-		OperationLog op = new DefaultOperationLog();
-		DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(key);
-		return op.add(deleteAttribute);
+		return log;
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java	Sat Sep 06 05:03:10 2014 +0900
@@ -5,28 +5,35 @@
 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.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 DeleteChildAt implements NodeEditor
 {
 	private final int pos;
-	
+	private OperationLog log;
 	public DeleteChildAt(int _pos)
 	{
 		pos = _pos;
+		log = new DefaultOperationLog();
 	}
 
 	@Override
 	public Either<Error,TreeNode> edit(TreeNode _e)
 	{
-		return _e.getChildren().deleteChildAt(pos);
+		NodeOperation deleteChildOperation = new DeleteChildAtOperation(pos);
+		Either<Error,TreeNode> either = deleteChildOperation.invoke(_e);
+		if(either.isA()){
+			// error
+			return either;
+		}
+		log = log.add(deleteChildOperation);
+		return DefaultEither.newB(either.b());
 	}
 
 	@Override
 	public OperationLog getLog() {
-		OperationLog op = new DefaultOperationLog();
-		NodeOperation deleteChildAt = new DeleteChildAtOperation(pos);
-		return op.add(deleteChildAt);
+		return log;
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java	Sat Sep 06 05:03:10 2014 +0900
@@ -1,6 +1,8 @@
 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.TreeNodeChildren;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 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;
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java	Sat Sep 06 05:03:10 2014 +0900
@@ -6,7 +6,10 @@
 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.DeleteChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+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,24 +17,30 @@
 {
 	private final String key;
 	private final ByteBuffer value;
+	private OperationLog log;
 	
 	public PutAttribute(String _key,ByteBuffer _value)
 	{
 		key = _key;
 		value = _value;
+		log = new DefaultOperationLog();
 	}
 
 	@Override
 	public Either<Error,TreeNode> edit(TreeNode _e)
 	{
-		TreeNodeAttributes attrs = _e.getAttributes();
-		return attrs.put(key,value);
+		NodeOperation putAttributeOperation = new PutAttributeOperation(key,value);
+		Either<Error,TreeNode> either = putAttributeOperation.invoke(_e);
+		if(either.isA()){
+			// error
+			return either;
+		}
+		log = log.add(putAttributeOperation);
+		return DefaultEither.newB(either.b());
 	}
 
 	@Override
 	public OperationLog getLog() {
-		OperationLog op = new DefaultOperationLog();
-		PutAttributeOperation putAttribute = new PutAttributeOperation(key,value);
-		return op.add(putAttribute);
+		return log;
 	}
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java	Wed Sep 03 23:44:23 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java	Sat Sep 06 05:03:10 2014 +0900
@@ -7,7 +7,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNodeHook;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
@@ -45,14 +45,15 @@
 	
 	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
 	{
-		LoggingNodeHook hook = new LoggingNodeHook(_e);
-		Either<Error,TreeNode> either = editor.edit(root,_path,hook);
+		//LoggingNodeHook hook = new LoggingNodeHook(_e);
+		Either<Error,LoggingNode> either = editor.edit(root,_path,_e);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		TreeNode newNode = either.b();
-		OperationLog newLog = hook.getLog();
+		LoggingNode newLogging = either.b();
+		OperationLog newLog = newLogging.getOperationLog();
+		TreeNode newNode = newLogging.getWrap();
 		
 		IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
 			@Override