# HG changeset patch # User one # Date 1409947390 -32400 # Node ID 14ce7a0dedcac4cd8a7f3c8b3b44a6db38ac6031 # Parent fb1dc448ac8c5d8a3ccda1178cf434d90bd2f120 Logging Node and Editor diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java --- 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 edit(TreeNode _root,NodePath _path,NodeEditor _transformer); + public Either edit(TreeNode _root,NodePath _path,NodeEditor _transformer); } diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java --- 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 edit(TreeNode _root,NodePath _path,NodeEditor _editor) + public Either edit(TreeNode _root,NodePath _path,NodeEditor _editor) { DefaultEvaluator e = new DefaultEvaluator(_path); //TraversableNodeWrapper wrap = new TraversableNodeWrapper(_root); @@ -33,12 +34,12 @@ } Traversal t = either.b(); - Either ret = clone(t,_editor); + Either ret = clone(t,_editor); return ret; } - private Either clone(Traversal _t,NodeEditor _editor) + private Either 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 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 diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java --- 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> implements EditableAttributes> +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 attributes = wrap.getAttributes(); + TreeNodeAttributes attributes = wrap.getAttributes(); return attributes.get(_key); } - private Either> edit(NodeOperation _op) + private Either edit(NodeOperation _op) { - Either either = _op.invoke(wrap); + Either either = _op.invoke(wrap); if(either.isA()){ return DefaultEither.newA(either.a()); } - T newWrap = either.b(); - OperationLog newLog = log.add(_op); - LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog); + TreeNode newNode = either.b(); + OperationLog newLog = log.add(_op); + LoggingNode newLoggingNode = new LoggingNode(newNode,newLog); return DefaultEither.newB(newLoggingNode); } - @Override - public Either> delete(final String _key) + public Either delete(final String _key) { DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(_key); return edit(deleteAttribute); } - @Override - public Either> put(final String _key,final ByteBuffer _value) + public Either put(final String _key,final ByteBuffer _value) { PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value); return edit(putAttribute); } } -*/ \ No newline at end of file diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java --- 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> implements EditableChildren> +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 children = wrap.getChildren(); + Children children = wrap.getChildren(); return children.size(); } + /* @Override - public Iterator> iterator() + public Iterator iterator() { - EditableChildren children = wrap.getChildren(); - return (Iterator>) children.iterator(); - } + LoggingChildren children = wrap.getChildren(); + return children.iterator(); + }*/ - public Either> edit(NodeOperation _op) + public Either edit(NodeOperation _op) { - Either either = _op.invoke(wrap); + Either 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 newLoggingNode = new LoggingNode(newWrap,newLog); + LoggingNode newLoggingNode = new LoggingNode(newWrap,newLog); return DefaultEither.newB(newLoggingNode); } - @Override - public Either> addNewChildAt(final int _pos) + public Either addNewChildAt(final int _pos) { NodeOperation addNewChildAt = new AppendChildAtOperation(_pos); return edit(addNewChildAt); } - @Override - public Either> deleteChildAt(final int _pos) + public Either deleteChildAt(final int _pos) { NodeOperation deleteChildAt = new DeleteChildAtOperation(_pos); return edit(deleteChildAt); } - @Override - public Either> at(int _pos) + public Either at(int _pos) { - EditableChildren children = wrap.getChildren(); - Either either = children.at(_pos); + Children children = wrap.getChildren(); + Either either = children.at(_pos); if(either.isA()){ return DefaultEither.newA(either.a()); } - T node = either.b(); - return DefaultEither.newB(new LoggingNode(node)); + TreeNode node = either.b(); + return DefaultEither.newB(new LoggingNode(node)); } } -*/ \ No newline at end of file diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java --- 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> implements EditableNode> +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> getAttributes() + public LoggingAttributes getAttributes() { - return new LoggingAttributes(wrap,log); + return new LoggingAttributes(wrap,log); } - @Override - public EditableChildren> getChildren() + public LoggingChildren getChildren() { - return new LoggingChildren(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 diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java --- 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; } -} +}*/ diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java --- 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 Either invoke(T _target) + @Override + public Either invoke(TreeNode _target) { - AppendChildAt appendChildAt = new AppendChildAt(pos); - return appendChildAt.edit(_target); - }*/ + return _target.getChildren().addNewChildAt(pos); + } @Override public int getPosition() diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java --- 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 Either invoke(T _target) + @Override + public Either invoke(TreeNode _target) { DeleteAttribute deleteAttribute = new DeleteAttribute(key); return deleteAttribute.edit(_target); - }*/ - + } + @Override public int getPosition() { diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java --- 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 Either invoke(T _target) + @Override + public Either invoke(TreeNode _target) { DeleteChildAt deleteChildAt = new DeleteChildAt(pos); return deleteChildAt.edit(_target); - }*/ + } @Override public int getPosition() diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java --- 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 Either invoke(T _target); + public Either invoke(TreeNode _target); public int getPosition(); public String getKey(); diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java --- 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 Either invoke(T _target) + @Override + public Either invoke(TreeNode _target) { - PutAttribute putAttribute = new PutAttribute(key,value); - return putAttribute.edit(_target); - }*/ - + return _target.getAttributes().put(key,value); + } @Override public int getPosition() { diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java --- 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 edit(TreeNode _e) + public Either edit(TreeNode _e) { - Either either = _e.getChildren().addNewChildAt(pos); + NodeOperation addNewChildOperation = new AppendChildAtOperation(pos); + Either 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; } + } diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java --- 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 edit(TreeNode _e) { - return _e.getAttributes().delete(key); + DeleteAttributeOperation deleteAttributeOperation = new DeleteAttributeOperation(key); + Either 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; } } diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java --- 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 edit(TreeNode _e) { - return _e.getChildren().deleteChildAt(pos); + NodeOperation deleteChildOperation = new DeleteChildAtOperation(pos); + Either 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; } } diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java --- 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; diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java --- 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 edit(TreeNode _e) { - TreeNodeAttributes attrs = _e.getAttributes(); - return attrs.put(key,value); + NodeOperation putAttributeOperation = new PutAttributeOperation(key,value); + Either 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; } } diff -r fb1dc448ac8c -r 14ce7a0dedca src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java --- 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 _edit(final NodePath _path,NodeEditor _e) { - LoggingNodeHook hook = new LoggingNodeHook(_e); - Either either = editor.edit(root,_path,hook); + //LoggingNodeHook hook = new LoggingNodeHook(_e); + Either 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 converter = new IterableConverter.Converter(){ @Override