# HG changeset patch # User one # Date 1409966327 -32400 # Node ID ef68358ed0e87bc6b214edb218033deac8a15de6 # Parent 14ce7a0dedcac4cd8a7f3c8b3b44a6db38ac6031# Parent 7058e85875a59d1951cc5eeaa049e4788ea96deb Merge with 7058e85875a59d1951cc5eeaa049e4788ea96deb diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/TreeEditor.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java Sat Sep 06 10:18:47 2014 +0900 @@ -3,9 +3,8 @@ 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.OperationLog; +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.transaction.DefaultTreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Direction; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; @@ -24,9 +23,10 @@ } @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); Either either = traverser.traverse(_root,e); if(either.isA()){ @@ -34,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 @@ -51,16 +51,17 @@ // target Direction targetDirection = path.head(); TreeNode target = targetDirection.getTarget(); + //EditableNodeWrapper wrapper = new EditableNodeWrapper(target); Either either = _editor.edit(target); if(either.isA()){ return DefaultEither.newA(either.a()); } - TreeNode newNode = either.b(); - OperationLog log = newNode.getLog(); + 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(); @@ -74,7 +75,7 @@ pos = parentDirection.getPosition(); } - TreeNode newRoot = new DefaultTreeNode(child,log); - return DefaultEither.newB(newRoot); + TreeNode newRoot = child; + return DefaultEither.newB(new LoggingNode(newRoot,_editor.getLog())); } } \ No newline at end of file diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNode.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingNodeHook.java Sat Sep 06 10:18:47 2014 +0900 @@ -20,18 +20,17 @@ @Override public Either edit(TreeNode _e) { + //LoggingNode loggingNode = new LoggingNode(_e); Either either = editor.edit(_e); if(either.isA()){ return DefaultEither.newA(either.a()); } - TreeNode newLoggingNode = either.b(); - - return DefaultEither.newB(newLoggingNode); + log = editor.getLog(); + return DefaultEither.newB(either.b()); } public OperationLog getLog() { return log; } -} -*/ \ No newline at end of file +}*/ diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/AppendChildAtOperation.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteAttributeOperation.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/DeleteChildAtOperation.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/NodeOperation.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/PutAttributeOperation.java Sat Sep 06 10:18:47 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 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java Sat Sep 06 10:18:47 2014 +0900 @@ -1,6 +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; @@ -8,22 +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() { + return log; + } + } diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java Sat Sep 06 10:18:47 2014 +0900 @@ -1,22 +1,38 @@ 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.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() { + return log; + } } diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java Sat Sep 06 10:18:47 2014 +0900 @@ -1,22 +1,39 @@ 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.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() { + return log; + } } diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java Sat Sep 06 10:18:47 2014 +0900 @@ -1,10 +1,14 @@ 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; public interface NodeEditor { public Either edit(TreeNode _e); + public OperationLog getLog(); } \ No newline at end of file diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java Sat Sep 06 10:18:47 2014 +0900 @@ -4,6 +4,12 @@ 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.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; @@ -11,18 +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() { + return log; + } } diff -r 7058e85875a5 -r ef68358ed0e8 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 Fri Sep 05 19:49:35 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java Sat Sep 06 10:18:47 2014 +0900 @@ -7,6 +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.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,13 +46,14 @@ private Either _edit(final NodePath _path,NodeEditor _e) { //LoggingNodeHook hook = new LoggingNodeHook(_e); - Either either = editor.edit(root,_path,_e); + Either either = editor.edit(root,_path,_e); if(either.isA()){ return DefaultEither.newA(either.a()); } - TreeNode newNode = either.b(); - OperationLog newLog = newNode.getLog(); + LoggingNode newLogging = either.b(); + OperationLog newLog = newLogging.getOperationLog(); + TreeNode newNode = newLogging.getWrap(); IterableConverter.Converter converter = new IterableConverter.Converter(){ @Override