# HG changeset patch # User Shoshi TAMAKI # Date 1360310922 -32400 # Node ID 650fe2a0dcccf839b82e0b63e3ac416f83170906 # Parent ed890dcb673e4ce376b1d66bc0438ded39e5f103 modified tests diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java Fri Feb 08 17:08:42 2013 +0900 @@ -2,27 +2,52 @@ 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; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.NullJournal; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.Operation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; +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.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +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; public class DefaultJungle implements Jungle { private Journal journal; private ConcurrentHashMap trees; private String uuid; + private TreeEditor editor; - public DefaultJungle(String _uuid) + public static void main(String _args[]) + { + DefaultJungle j = new DefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser())); + JungleTree t = j.createNewTree("fuga"); + + JungleTreeEditor e1 = t.getTreeEditor(); + JungleTreeEditor e2 = t.getTreeEditor(); + + DefaultNodePath root = new DefaultNodePath(); + + Either either = e1.addNewChildAt(root,0); + e1 = either.b(); + either = e1.addNewChildAt(root.add(0),0); + e1 = either.b(); + e1.success(); + } + + public DefaultJungle(Journal _journal,String _uuid,TreeEditor _editor) { journal = new NullJournal(); trees = new ConcurrentHashMap(); uuid = _uuid; + editor = _editor; } @Override @@ -36,14 +61,16 @@ { ChangeList list = new ChangeList(){ @Override - public Iterator iterator() { - List nil = List.nil(); + public Iterator iterator() { + List nil = List.nil(); return nil.iterator(); } }; - DefaultNode node = new DefaultNode(); - DefaultChangeSet set = new DefaultChangeSet(node,null,list,uuid,0); - DefaultJungleTree newTree = new DefaultJungleTree(set,uuid,journal.getWriter()); + + DefaultTreeNode root = new DefaultTreeNode(); + ChangeSet set = new DefaultChangeSet(root.getAsNode(),null,list,uuid,0); + DefaultTreeContext tc = new DefaultTreeContext(root,set); + JungleTree newTree = new DefaultJungleTree(tc,uuid,journal.getWriter(),editor); if(trees.putIfAbsent(_name,newTree) != null){ return null; } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,116 +1,44 @@ package jp.ac.u_ryukyu.ie.cr.shoshi.jungle; -import java.util.Iterator; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Attributes; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.AttributesContainer; -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.persistent.ChangeListWriter; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; +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.transaction.AtomicReservableReference; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTransactionManager; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -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; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter.Converter; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; -public class DefaultJungleTree implements JungleTree +public class DefaultJungleTree> implements JungleTree { - private final AtomicReservableReference repository; + private final AtomicReservableReference> repository; private final String uuid; private final ChangeListWriter writer; + private final TreeEditor editor; - public DefaultJungleTree(DefaultChangeSet _set,String _uuid,ChangeListWriter _writer) + public DefaultJungleTree(TreeContext _tc,String _uuid,ChangeListWriter _writer,TreeEditor _editor) { - repository = new AtomicReservableReference(_set); + repository = new AtomicReservableReference>(_tc); uuid = _uuid; writer = _writer; + editor = _editor; } @Override - public DefaultJungleTreeEditor getTreeEditor() + public JungleTreeEditor getTreeEditor() { - DefaultChangeSet tip = repository.get(); - DefaultTransactionManager txManager = new DefaultTransactionManager(writer,tip,repository,uuid); - DefaultNode root = tip.getRoot(); - return new DefaultJungleTreeEditor(root,txManager,new DefaultTraverser()); + TreeContext tc = repository.get(); + DefaultTransactionManager txManager = new DefaultTransactionManager(writer,tc,repository,uuid); + T root = tc.getTreeNode(); + return new DefaultJungleTreeEditor(root,txManager,editor); } @Override public Node getRootNode() { - ChangeSet set = repository.get(); - return set.getRoot(); - } - - public static class NodeWrapper & AttributesContainer> implements Node - { - private final T wrap; - - public NodeWrapper(T _wrap) - { - wrap = _wrap; - } - - @Override - public Attributes getAttributes() - { - return wrap.getAttributes(); - } - - @Override - public Children getChildren() - { - Children children = wrap.getChildren(); - return new ChildrenWrapper(children); - } - - public static class ChildrenWrapper & AttributesContainer> implements Children - { - private Children wrap; - - public ChildrenWrapper(Children _wrap) - { - wrap = _wrap; - } - - @Override - public Iterator iterator() - { - Converter converter = new IterableConverter.Converter(){ - @Override - public Node conv(T _b){ - return new NodeWrapper(_b); - } - }; - - IterableConverter iterable = new IterableConverter(wrap,converter); - return iterable.iterator(); - } - - @Override - public Either at(int _pos) - { - Either either = wrap.at(_pos); - if(either.isA()){ - return DefaultEither.newA(either.a()); - } - T node = either.b(); - Node wrapper = new NodeWrapper(node); - return DefaultEither.newB(wrapper); - } - - @Override - public int size() - { - return wrap.size(); - } - } + TreeContext tc = repository.get(); + ChangeSet cs = tc.getChangeSet(); + return cs.getRoot(); } } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/App.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/App.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/App.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,12 +1,14 @@ 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.traverser.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; /** * Hello world! @@ -16,7 +18,7 @@ { public static void main( String[] args ) { - DefaultJungle jungle = new DefaultJungle("sample"); + DefaultJungle jungle = new DefaultJungle(null,"sample",new DefaultTreeEditor(new DefaultTraverser())); jungle.createNewTree("hoge"); JungleTree tree = jungle.getTreeByName("hoge"); JungleTreeEditor editor = tree.getTreeEditor(); diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultJournal.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultJournal.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/DefaultJournal.java Fri Feb 08 17:08:42 2013 +0900 @@ -9,8 +9,6 @@ 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.store.operations.Operation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; @@ -120,9 +118,4 @@ { return writer; } - - public interface OperationParser - { - T parse(String _line); - } } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java Fri Feb 08 17:08:42 2013 +0900 @@ -30,7 +30,7 @@ @Override public EditableChildren> getChildren() { - return null; + return new EditableChildrenWrapper(wrap); } public T getWrap() @@ -127,7 +127,7 @@ { Either either = children.addNewChildAt(_pos); if(either.isA()){ - DefaultEither.newA(either.a()); + return DefaultEither.newA(either.a()); } T newWrap = either.b(); EditableNodeWrapper newWrapper = new EditableNodeWrapper(newWrap); @@ -140,7 +140,7 @@ { Either either = children.deleteChildAt(_pos); if(either.isA()){ - DefaultEither.newA(either.a()); + return DefaultEither.newA(either.a()); } T newWrap = either.b(); EditableNodeWrapper newWrapper = new EditableNodeWrapper(newWrap); diff -r ed890dcb673e -r 650fe2a0dccc 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 Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,18 +1,12 @@ package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; import java.nio.ByteBuffer; -import java.util.Iterator; - -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.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; -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.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.LoggingNodeHook; 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; @@ -24,7 +18,6 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; 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; @@ -32,30 +25,28 @@ public class DefaultJungleTreeEditor> implements JungleTreeEditor { - private final TransactionManager txManager; + private final TransactionManager txManager; private final T root; private final TreeEditor editor; - private final Traverser traverser; private final TreeOperationLog log; - public DefaultJungleTreeEditor(T _root,TransactionManager _txManager,Traverser _traverser,TreeEditor _editor) + public DefaultJungleTreeEditor(T _root,TransactionManager _txManager,TreeEditor _editor) { - this(_root,_txManager,_traverser,_editor,new DefaultTreeOperationLog()); + this(_root,_txManager,_editor,new DefaultTreeOperationLog()); } - public DefaultJungleTreeEditor(T _root,TransactionManager _txManager,Traverser _traverser,TreeEditor _editor,TreeOperationLog _log) + public DefaultJungleTreeEditor(T _root,TransactionManager _txManager,TreeEditor _editor,TreeOperationLog _log) { root = _root; txManager = _txManager; editor = _editor; - traverser = _traverser; log = _log; } 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,hook); if(either.isA()){ return DefaultEither.newA(either.a()); } @@ -74,7 +65,7 @@ DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog(iterable,newLog.length()); TreeOperationLog newTreeOpLog = log.append(treeOperationLog); - JungleTreeEditor newEditor = new DefaultJungleTreeEditor(newNode,txManager,traverser,editor,newTreeOpLog); + JungleTreeEditor newEditor = new DefaultJungleTreeEditor(newNode,txManager,editor,newTreeOpLog); return DefaultEither.newB(newEditor); } @@ -115,14 +106,13 @@ @Override public Either success() { - Node node = root.getAsNode(); - Either either = txManager.commit(node,log); + Either> either = txManager.commit(root,log); if(either.isA()){ return DefaultEither.newA(either.a()); } - TransactionManager newTxManager = either.b(); - JungleTreeEditor newTreeEditor = new DefaultJungleTreeEditor(root,newTxManager,traverser,editor); + TransactionManager newTxManager = either.b(); + JungleTreeEditor newTreeEditor = new DefaultJungleTreeEditor(root,newTxManager,editor); return DefaultEither.newB(newTreeEditor); } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Fri Feb 08 17:08:42 2013 +0900 @@ -5,6 +5,8 @@ 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; +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.impl.logger.TreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; @@ -13,26 +15,27 @@ 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 implements TransactionManager +public class DefaultTransactionManager> implements TransactionManager { - private final AtomicReservableReference repository; - private final DefaultChangeSet tip; + private final AtomicReservableReference> repository; + private final TreeContext tip; private final ChangeListWriter writer; private final String uuid; - public DefaultTransactionManager(ChangeListWriter _writer,DefaultChangeSet _changeSet, - AtomicReservableReference _repository,String _uuid) + public DefaultTransactionManager(ChangeListWriter _writer,TreeContext _tip, + AtomicReservableReference> _repository,String _uuid) { repository = _repository; - tip = _changeSet; + tip = _tip; writer = _writer; uuid = _uuid; } @Override - public Either commit(Node _newRoot,final TreeOperationLog _log) + public Either> commit(T _newRoot,final TreeOperationLog _log) { - long currentRevision = tip.revision(); + ChangeSet cs = tip.getChangeSet(); + long currentRevision = cs.revision(); long nextRevision = currentRevision + 1; ChangeList list = new ChangeList(){ @@ -42,15 +45,19 @@ } }; - DefaultChangeSet changeSet = new DefaultChangeSet(_newRoot,tip,list,uuid,nextRevision); - Reservation reservation = repository.makeReservation(tip,changeSet); + Node root = _newRoot.getAsNode(); + DefaultChangeSet newCs = new DefaultChangeSet(root,cs,list,uuid,nextRevision); + DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs); + + @SuppressWarnings("rawtypes") + Reservation reservation = repository.makeReservation(tip,newContext); if(reservation == null){ return DefaultEither.newA((Error)new DefaultError()); } Result r = writer.write(list); if(r == Result.SUCCESS){ reservation.confirm(); - TransactionManager txManager = new DefaultTransactionManager(writer,changeSet,repository,uuid); + TransactionManager txManager = new DefaultTransactionManager(writer,newContext,repository,uuid); return DefaultEither.newB(txManager); } @@ -66,6 +73,7 @@ @Override public long getRevision() { - return tip.revision(); + ChangeSet cs = tip.getChangeSet(); + return cs.revision(); } } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeContext.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeContext.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,28 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; + +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> implements TreeContext +{ + private final T root; + private final ChangeSet cs; + + public DefaultTreeContext(T _newRoot,ChangeSet _cs) + { + root = _newRoot; + cs = _cs; + } + + @Override + public ChangeSet getChangeSet() + { + return cs; + } + + @Override + public T getTreeNode() + { + return root; + } +} diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TransactionManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TransactionManager.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TransactionManager.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,13 +1,13 @@ 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.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; 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 +public interface TransactionManager> { - public Either commit(Node _newRoot,TreeOperationLog _log); + public Either> commit(T _newRoot,TreeOperationLog _log); public String getUUID(); public long getRevision(); } diff -r ed890dcb673e -r 650fe2a0dccc src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/TreeContext.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,10 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; + +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> +{ + public ChangeSet getChangeSet(); + public T getTreeNode(); +} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/DefaultJungleTreeTest.java --- a/src/test/java/DefaultJungleTreeTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/DefaultJungleTreeTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,13 +1,15 @@ 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.traverser.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Result; 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.Assert; import junit.framework.TestCase; @@ -16,7 +18,7 @@ { public Jungle instance() { - Jungle j = new DefaultJungle("hogehoge"); + Jungle j = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser())); return j; } @@ -53,7 +55,7 @@ } editor2 = either.b(); Either r = editor2.success(); - Assert.assertTrue(either.isA()); + Assert.assertTrue(r.isA()); } public void testIsolation() diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/impl/treeeditor/DefaultTreeEditorTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -7,7 +7,7 @@ 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; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +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.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; @@ -26,36 +26,36 @@ public void testEdittingDoesNotEffectToOtherTree() { - ClonableDefaultNode root = TestUtil.createMockTree(3); + DefaultTreeNode root = TestUtil.createMockTree(3); DefaultTreeEditor editor = new DefaultTreeEditor(new DefaultTraverser()); DefaultNodePath path = new DefaultNodePath().add(0).add(2); - ClonableDefaultNode oldRoot = root; + DefaultTreeNode oldRoot = root; DefaultTreeEditor currentEditor = editor; String key = "path"; - ClonableDefaultNode currentRoot = root; + DefaultTreeNode currentRoot = root; for(DefaultNodePath part : path.inits()){ ByteBuffer value = ByteBuffer.wrap(part.toString().getBytes()); PutAttribute putAttribute = new PutAttribute(key,value); - Either either = currentEditor.edit(currentRoot,part,putAttribute); + Either either = currentEditor.edit(currentRoot,part,putAttribute); if(either.isA()){ Assert.fail(); } currentRoot = either.b(); } - ClonableDefaultNode newRoot = currentRoot; + DefaultTreeNode newRoot = currentRoot; DefaultTraverser traverser = new DefaultTraverser(); for(DefaultNodePath part : path.inits()){ - Either>> either = traverser.traverse(new TraversableNodeWrapper(newRoot),new DefaultEvaluator(part)); + Either>> either = traverser.traverse(new TraversableNodeWrapper(newRoot),new DefaultEvaluator(part)); if(either.isA()){ Assert.fail(); } - ClonableDefaultNode target = either.b().destination().getWrapped(); + DefaultTreeNode target = either.b().destination().getWrapped(); String expected = part.toString(); String actual = new String(target.getAttributes().get(key).array()); @@ -63,11 +63,11 @@ } for(DefaultNodePath part : path.inits()){ - Either>> either = traverser.traverse(new TraversableNodeWrapper(oldRoot),new DefaultEvaluator(part)); + Either>> either = traverser.traverse(new TraversableNodeWrapper(oldRoot),new DefaultEvaluator(part)); if(either.isA()){ Assert.fail(); } - ClonableDefaultNode target = either.b().destination().getWrapped(); + DefaultTreeNode target = either.b().destination().getWrapped(); ByteBuffer actual = target.getAttributes().get(key); Assert.assertNull(actual); @@ -78,14 +78,14 @@ public void testEdit() { DefaultTreeEditor instance = instance(); - ClonableDefaultNode node = new ClonableDefaultNode(); + DefaultTreeNode node = new DefaultTreeNode(); DefaultNodePath path = new DefaultNodePath(); - Either either = instance.edit(node,path,new AppendChildAt(0)); + Either either = instance.edit(node,path,new AppendChildAt(0)); if(either.isA()){ Assert.fail(); } - ClonableDefaultNode newRoot = either.b(); + DefaultTreeNode newRoot = either.b(); Assert.assertEquals(1,newRoot.getChildren().size()); } } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/AppendChildAtTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/AppendChildAtTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/AppendChildAtTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,8 +1,9 @@ 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.trasnformer.AppendChildAt; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +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; import junit.framework.Assert; @@ -12,14 +13,15 @@ { public void testEdit() { - ClonableDefaultNode node = new ClonableDefaultNode(new DefaultNode()); + DefaultTreeNode node = new DefaultTreeNode(new DefaultNode()); AppendChildAt op = new AppendChildAt(0); - Either either = op.edit(node); + EditableNodeWrapper wrapper = new EditableNodeWrapper(node); + Either> either = op.edit(wrapper); if(either.isA()){ Assert.fail(); } - node = either.b(); - Assert.assertEquals(1,node.getChildren().size()); + DefaultTreeNode newNode = either.b().getWrap(); + Assert.assertEquals(1,newNode.getChildren().size()); } } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteAttributeAtTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteAttributeAtTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteAttributeAtTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,10 +1,10 @@ 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.trasnformer.DeleteAttribute; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +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; import junit.framework.Assert; @@ -17,19 +17,20 @@ String key = "KEY"; ByteBuffer value = ByteBuffer.wrap(key.getBytes()); - ClonableDefaultNode node = new ClonableDefaultNode(new DefaultNode()); - Either either = node.getAttributes().put(key, value); + DefaultTreeNode node = new DefaultTreeNode(new DefaultNode()); + Either either = node.getAttributes().put(key, value); if(either.isA()){ Assert.fail(); } node = either.b(); DeleteAttribute op = new DeleteAttribute(key); - either = op.edit(node); - if(either.isA()){ + EditableNodeWrapper wrapper = new EditableNodeWrapper(node); + Either> either2 = op.edit(wrapper); + if(either2.isA()){ Assert.fail(); } - ClonableDefaultNode newNode = either.b(); + DefaultTreeNode newNode = either2.b().getWrap(); ByteBuffer ret = newNode.getAttributes().get(key); Assert.assertNull(ret); } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteChildAtTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteChildAtTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/DeleteChildAtTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,9 +1,8 @@ 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.trasnformer.AppendChildAt; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.EditableNodeWrapper; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +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; import junit.framework.Assert; @@ -13,8 +12,8 @@ { public void testEdit() { - ClonableDefaultNode node = new ClonableDefaultNode(new DefaultNode()); - Either either = node.getChildren().addNewChildAt(0); + DefaultTreeNode node = new DefaultTreeNode(); + Either either = node.getChildren().addNewChildAt(0); if(either.isA()){ Assert.fail(); } @@ -22,11 +21,13 @@ Assert.assertEquals(1,node.getChildren().size()); DeleteChildAt op = new DeleteChildAt(0); - either = op.edit(node); - if(either.isA()){ + EditableNodeWrapper wrapper = new EditableNodeWrapper(node); + Either> either2 = op.edit(wrapper); + if(either2.isA()){ Assert.fail(); } - node = either.b(); + node = either2.b().getWrap(); + Assert.assertEquals(0,node.getChildren().size()); } } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/PutAttributeTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/PutAttributeTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/PutAttributeTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -5,8 +5,9 @@ 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.trasnformer.PutAttribute; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +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; import junit.framework.TestCase; @@ -17,15 +18,16 @@ { String key = "KEY"; ByteBuffer value = ByteBuffer.wrap(key.getBytes()); - ClonableDefaultNode node = new ClonableDefaultNode(new DefaultNode()); + DefaultTreeNode node = new DefaultTreeNode(new DefaultNode()); PutAttribute op = new PutAttribute(key,value); - Either either = op.edit(node); + EditableNodeWrapper wrapper = new EditableNodeWrapper(node); + Either> either = op.edit(wrapper); if(either.isA()){ Assert.fail(); } - node = either.b(); - ByteBuffer ret = node.getAttributes().get(key); + DefaultTreeNode newNode = either.b().getWrap(); + ByteBuffer ret = newNode.getAttributes().get(key); Assert.assertEquals(0,ret.compareTo(value)); } } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/ClonableChildrenTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/ClonableChildrenTest.java Fri Feb 08 12:32:37 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.treeeditor; - -import java.nio.ByteBuffer; -import org.junit.Assert; -import fj.data.List; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.ClonableChildren; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.ClonableNode; -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 ClonableChildrenTest> extends TestCase -{ - public abstract ClonableNode instance(); - - public void testAddNewChildAtWithNode() - { - int count = 5; - for(Integer pos : List.range(0,5)){ - _testAddNewChildAtWithNode(count,pos); - } - } - - public void _testAddNewChildAtWithNode(int _count,int _pos) - { - ClonableNode instance = instance(); - - Either either; - for(int i = 0;i < _count;i ++){ - either = instance.getChildren().addNewChildAt(0); - if(either.isA()){ - Assert.fail(); - } - instance = either.b(); - } - - T newNode = instance.createNewNode(); - String key = "KEY"; - ByteBuffer value = ByteBuffer.wrap("VALUE".getBytes()); - - either = newNode.getAttributes().put(key,value); - if(either.isA()){ - Assert.fail(); - } - newNode = either.b(); - - either = instance.getChildren().addNewChildAt(_pos,newNode); - if(either.isA()){ - Assert.fail(); - } - instance = either.b(); - - // check - either = instance.getChildren().at(_pos); - if(either.isA()){ - Assert.fail(); - } - - T checkTarget = either.b(); - ByteBuffer actual = checkTarget.getAttributes().get(key); - Assert.assertEquals(0,value.compareTo(actual)); - } - - public void testReplaceAt() - { - int count = 5; - for(Integer pos : List.range(0,count)){ - _testReplaceAt(count,pos); - } - } - - public void _testReplaceAt(int _count,int _pos) - { - ClonableNode instance = instance(); - String key = "KEY"; - ByteBuffer value = ByteBuffer.wrap("VALUE".getBytes()); - - // prepare - - for(int i = 0;i < _count;i ++){ - T newNode = instance.createNewNode(); - Either either = newNode.getAttributes().put(key,value); - if(either.isA()){ - Assert.fail("failed to put attributes to child"); - } - - newNode = either.b(); - either = instance.getChildren().addNewChildAt(0,newNode); - if(either.isA()){ - Assert.fail("failed to add child to instance"); - } - - instance = either.b(); - } - - int size = instance.getChildren().size(); - Assert.assertEquals(_count,size); - - // create node for replacement. - - ByteBuffer replaceNodeValue = ByteBuffer.wrap("EULAV".getBytes()); - T replacement = instance.createNewNode(); - Either either = replacement.getAttributes().put(key,replaceNodeValue); - if(either.isA()){ - Assert.fail("failed to create replacement node"); - } - replacement = either.b(); - - // replace - - either = instance.getChildren().replaceNode(_pos,replacement); - if(either.isA()){ - Assert.fail("failed to replace node."); - } - instance = either.b(); - - ClonableChildren children = instance.getChildren(); - for(Integer pos : List.range(0,_count)){ - either = children.at(pos.intValue()); - if(either.isA()){ - Assert.fail("failed to get node."); - } - - T ch = either.b(); - ByteBuffer expect = (_pos != pos) ? value : replaceNodeValue; - ByteBuffer actual = ch.getAttributes().get(key); - - Assert.assertEquals(0,expect.compareTo(actual)); - } - } -} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/TreeNodeChildrenTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/treeeditor/TreeNodeChildrenTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,131 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.treeeditor; + +import java.nio.ByteBuffer; +import org.junit.Assert; +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.TreeNodeChildren; +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 TreeNodeChildrenTest> extends TestCase +{ + public abstract TreeNode instance(); + + public void testAddNewChildAtWithNode() + { + int count = 5; + for(Integer pos : List.range(0,5)){ + _testAddNewChildAtWithNode(count,pos); + } + } + + public void _testAddNewChildAtWithNode(int _count,int _pos) + { + TreeNode instance = instance(); + + Either either; + for(int i = 0;i < _count;i ++){ + either = instance.getChildren().addNewChildAt(0); + if(either.isA()){ + Assert.fail(); + } + instance = either.b(); + } + + T newNode = instance.createNewNode(); + String key = "KEY"; + ByteBuffer value = ByteBuffer.wrap("VALUE".getBytes()); + + either = newNode.getAttributes().put(key,value); + if(either.isA()){ + Assert.fail(); + } + newNode = either.b(); + + either = instance.getChildren().addNewChildAt(_pos,newNode); + if(either.isA()){ + Assert.fail(); + } + instance = either.b(); + + // check + either = instance.getChildren().at(_pos); + if(either.isA()){ + Assert.fail(); + } + + T checkTarget = either.b(); + ByteBuffer actual = checkTarget.getAttributes().get(key); + Assert.assertEquals(0,value.compareTo(actual)); + } + + public void testReplaceAt() + { + int count = 5; + for(Integer pos : List.range(0,count)){ + _testReplaceAt(count,pos); + } + } + + public void _testReplaceAt(int _count,int _pos) + { + TreeNode instance = instance(); + String key = "KEY"; + ByteBuffer value = ByteBuffer.wrap("VALUE".getBytes()); + + // prepare + + for(int i = 0;i < _count;i ++){ + T newNode = instance.createNewNode(); + Either either = newNode.getAttributes().put(key,value); + if(either.isA()){ + Assert.fail("failed to put attributes to child"); + } + + newNode = either.b(); + either = instance.getChildren().addNewChildAt(0,newNode); + if(either.isA()){ + Assert.fail("failed to add child to instance"); + } + + instance = either.b(); + } + + int size = instance.getChildren().size(); + Assert.assertEquals(_count,size); + + // create node for replacement. + + ByteBuffer replaceNodeValue = ByteBuffer.wrap("EULAV".getBytes()); + T replacement = instance.createNewNode(); + Either either = replacement.getAttributes().put(key,replaceNodeValue); + if(either.isA()){ + Assert.fail("failed to create replacement node"); + } + replacement = either.b(); + + // replace + + either = instance.getChildren().replaceNode(_pos,replacement); + if(either.isA()){ + Assert.fail("failed to replace node."); + } + instance = either.b(); + + TreeNodeChildren children = instance.getChildren(); + for(Integer pos : List.range(0,_count)){ + either = children.at(pos.intValue()); + if(either.isA()){ + Assert.fail("failed to get node."); + } + + T ch = either.b(); + ByteBuffer expect = (_pos != pos) ? value : replaceNodeValue; + ByteBuffer actual = ch.getAttributes().get(key); + + Assert.assertEquals(0,expect.compareTo(actual)); + } + } +} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultAttributesTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultAttributesTest.java Fri Feb 08 12:32:37 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -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.trasnformer.EditableAttributes; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultAttributes; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -public class ClonableDefaultAttributesTest extends TestCase -{ - public static TestSuite suite() - { - TestSuite suite = new TestSuite(); - suite.addTestSuite(AttributeTestImpl.class); - suite.addTestSuite(EditableAttributesTestImpl.class); - return suite; - } - - public static ClonableDefaultAttributes instance() - { - List rawList = List.nil(); - TreeMap rawMap = TreeMap.empty(Ord.stringOrd); - - for(P2 entry : AttributesTest.ENTRIES){ - rawMap = rawMap.set(entry._1(),entry._2()); - } - - return new ClonableDefaultNode(new DefaultNode(rawList,rawMap)).getAttributes(); - } - - public static class AttributeTestImpl extends AttributesTest - { - - @Override - public Attributes instance() - { - return ClonableDefaultAttributesTest.instance(); - } - - } - - public static class EditableAttributesTestImpl extends EditableAttributesTest - { - - @Override - public EditableAttributes instance() - { - return ClonableDefaultAttributesTest.instance(); - } - - } -} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultChildrenTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultChildrenTest.java Fri Feb 08 12:32:37 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -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.ClonableChildrenTest; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -public class ClonableDefaultChildrenTest extends TestCase -{ - public static TestSuite suite() - { - TestSuite suite = new TestSuite(); - suite.addTestSuite(EditableChildrenTestImpl.class); - suite.addTestSuite(ClonableChildrenTestImpl.class); - return suite; - } - - public static ClonableDefaultNode instance() - { - return new ClonableDefaultNode(new DefaultNode()); - } - - public static class ClonableChildrenTestImpl extends ClonableChildrenTest - { - @Override - public ClonableDefaultNode instance() - { - return ClonableDefaultChildrenTest.instance(); - } - } - - public static class EditableChildrenTestImpl extends EditableChildrenTest - { - @Override - public EditableChildren instance() - { - return ClonableDefaultChildrenTest.instance().getChildren(); - } - } -} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultNodeTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/ClonableDefaultNodeTest.java Fri Feb 08 12:32:37 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.clonable; - -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.ClonableDefaultNode; -import junit.framework.Assert; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -public class ClonableDefaultNodeTest extends TestCase -{ - public static TestSuite suite() - { - TestSuite suite = new TestSuite(); - suite.addTestSuite(AttributesContaierTestImpl.class); - suite.addTestSuite(ParentTestImpl.class); - return suite; - } - - public static ClonableDefaultNode instance() - { - ClonableDefaultNode node = new ClonableDefaultNode(new DefaultNode()); - return node; - } - - public void testGetWrapped() - { - ClonableDefaultNode instance = instance(); - DefaultNode wrapped = instance.getWrapped(); - - Assert.assertNotNull(wrapped); - } - - public void testCreateNewNode() - { - ClonableDefaultNode instance = instance(); - ClonableDefaultNode node = instance.createNewNode(); - - Assert.assertNotNull(node); - } - - public static class AttributesContaierTestImpl extends AttributesContainerTest - { - @Override - public AttributesContainer instance() - { - return ClonableDefaultNodeTest.instance(); - } - } - - public static class ParentTestImpl extends ParentTest - { - - @Override - public ClonableDefaultNode instance() - { - return ClonableDefaultNodeTest.instance(); - } - } -} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeAttributesTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeAttributesTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,63 @@ +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.transaction.DefaultTreeNode; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +public class DefaultTreeNodeAttributesTest extends TestCase +{ + public static TestSuite suite() + { + TestSuite suite = new TestSuite(); + suite.addTestSuite(AttributeTestImpl.class); + suite.addTestSuite(EditableAttributesTestImpl.class); + return suite; + } + + public static DefaultTreeNode instance() + { + List rawList = List.nil(); + TreeMap rawMap = TreeMap.empty(Ord.stringOrd); + + for(P2 entry : AttributesTest.ENTRIES){ + rawMap = rawMap.set(entry._1(),entry._2()); + } + + return new DefaultTreeNode(new DefaultNode(rawList,rawMap)); + } + + public static class AttributeTestImpl extends AttributesTest + { + + @Override + public Attributes instance() + { + return DefaultTreeNodeAttributesTest.instance().getAttributes(); + } + + } + + public static class EditableAttributesTestImpl extends EditableAttributesTest> + { + + @Override + public EditableAttributes> instance() + { + DefaultTreeNode instance = DefaultTreeNodeAttributesTest.instance(); + EditableNodeWrapper wrapper = new EditableNodeWrapper(instance); + return wrapper.getAttributes(); + } + + } +} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeChildrenTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeChildrenTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,46 @@ +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; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +public class DefaultTreeNodeChildrenTest extends TestCase +{ + public static TestSuite suite() + { + TestSuite suite = new TestSuite(); + suite.addTestSuite(EditableChildrenTestImpl.class); + suite.addTestSuite(TreeNodeChildrenTestImpl.class); + return suite; + } + + public static DefaultTreeNode instance() + { + return new DefaultTreeNode(new DefaultNode()); + } + + public static class TreeNodeChildrenTestImpl extends TreeNodeChildrenTest + { + @Override + public DefaultTreeNode instance() + { + return DefaultTreeNodeChildrenTest.instance(); + } + } + + public static class EditableChildrenTestImpl extends EditableChildrenTest> + { + @Override + public EditableChildren> instance() + { + DefaultTreeNode wrap = DefaultTreeNodeChildrenTest.instance(); + EditableNodeWrapper wrapper = new EditableNodeWrapper(wrap); + return wrapper.getChildren(); + } + } +} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/clonable/DefaultTreeNodeTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -0,0 +1,62 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.impl.clonable; + +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; +import junit.framework.TestSuite; + +public class DefaultTreeNodeTest extends TestCase +{ + public static TestSuite suite() + { + TestSuite suite = new TestSuite(); + suite.addTestSuite(AttributesContaierTestImpl.class); + suite.addTestSuite(ParentTestImpl.class); + return suite; + } + + public static DefaultTreeNode instance() + { + DefaultTreeNode node = new DefaultTreeNode(new DefaultNode()); + return node; + } + + public void testGetWrapped() + { + DefaultTreeNode instance = instance(); + DefaultNode wrapped = instance.getWrap(); + + Assert.assertNotNull(wrapped); + } + + public void testCreateNewNode() + { + DefaultTreeNode instance = instance(); + DefaultTreeNode node = instance.createNewNode(); + + Assert.assertNotNull(node); + } + + public static class AttributesContaierTestImpl extends AttributesContainerTest + { + @Override + public AttributesContainer instance() + { + return DefaultTreeNodeTest.instance(); + } + } + + public static class ParentTestImpl extends ParentTest + { + + @Override + public DefaultTreeNode instance() + { + return DefaultTreeNodeTest.instance(); + } + } +} diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingAttributesTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingAttributesTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingAttributesTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -10,9 +10,10 @@ 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; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -26,7 +27,7 @@ return suite; } - public static LoggingNode instance() + public static LoggingNode> instance() { List rawList = List.nil(); TreeMap rawMap = TreeMap.empty(Ord.stringOrd); @@ -35,7 +36,8 @@ rawMap = rawMap.set(entry._1(),entry._2()); } - return new LoggingNode(new ClonableDefaultNode(new DefaultNode(rawList,rawMap))); + EditableNodeWrapper wrapper = new EditableNodeWrapper(new DefaultTreeNode(new DefaultNode(rawList,rawMap))); + return new LoggingNode>(wrapper); } public static class AttributeTestImpl extends AttributesTest @@ -49,11 +51,10 @@ } - public static class EditableAttributesTestImpl extends EditableAttributesTest> + public static class EditableAttributesTestImpl extends EditableAttributesTest>> { - @Override - public EditableAttributes> instance() + public EditableAttributes>> instance() { return LoggingAttributesTest.instance().getAttributes(); } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingChildrenTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingChildrenTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingChildrenTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -1,11 +1,10 @@ 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.core.treeeditor.ClonableChildrenTest; -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.EditableChildren; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -15,28 +14,19 @@ { TestSuite suite = new TestSuite(); suite.addTestSuite(EditableChildrenTestImpl.class); - suite.addTestSuite(ClonableChildrenTestImpl.class); return suite; } - public static LoggingNode instance() + public static LoggingNode> instance() { - return new LoggingNode(new ClonableDefaultNode(new DefaultNode())); + EditableNodeWrapper wrapper = new EditableNodeWrapper(new DefaultTreeNode()); + return new LoggingNode>(wrapper); } - public static class ClonableChildrenTestImpl extends ClonableChildrenTest> + public static class EditableChildrenTestImpl extends EditableChildrenTest>> { @Override - public LoggingNode instance() - { - return LoggingChildrenTest.instance(); - } - } - - public static class EditableChildrenTestImpl extends EditableChildrenTest> - { - @Override - public EditableChildren> instance() + public EditableChildren>> instance() { return LoggingChildrenTest.instance().getChildren(); } diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingNodeTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingNodeTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/impl/logging/LoggingNodeTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -7,12 +7,11 @@ 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.Command; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.Logger; +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.operations.Operation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.SetAttributeOperation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.ClonableDefaultNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; +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; import junit.framework.TestCase; @@ -23,28 +22,28 @@ public void testGetLoggerIsNotNull() { LoggingNode instance = instance(); - Logger log = instance.getLogger(); + OperationLog log = instance.getOperationLog(); Assert.assertNotNull(log); } public void testGetWrappedIsNotNull() { LoggingNode instance = instance(); - Object wrap = instance.getWrapper(); + Object wrap = instance.getWrap(); Assert.assertNotNull(wrap); } public void testLoggingAddNewChildAt() { - LoggingNode instance = instance(); - Either> either = instance.getChildren().addNewChildAt(0); + LoggingNode> instance = instance(); + Either>> either = instance.getChildren().addNewChildAt(0); if(either.isA()){ Assert.fail(); } instance = either.b(); List expectOps = List.list(Command.APPEND_CHILD); - for(Operation op : instance.getLogger()){ + for(NodeOperation op : instance.getOperationLog()){ Command actual = op.getCommand(); Command expect = expectOps.head(); Assert.assertEquals(expect,actual); @@ -56,8 +55,8 @@ public void testLoggingDeleteChildAt() { - LoggingNode instance = instance(); - Either> either = instance.getChildren().addNewChildAt(0); + LoggingNode> instance = instance(); + Either>> either = instance.getChildren().addNewChildAt(0); if(either.isA()){ Assert.fail(); } @@ -69,7 +68,7 @@ instance = either.b(); List expectOps = List.list(Command.APPEND_CHILD,Command.DELETE_CHILD); - for(Operation op : instance.getLogger()){ + for(NodeOperation op : instance.getOperationLog()){ Command actual = op.getCommand(); Command expect = expectOps.head(); Assert.assertEquals(expect,actual); @@ -83,36 +82,29 @@ { String key = "KEY"; ByteBuffer value = ByteBuffer.wrap(key.getBytes()); - LoggingNode instance = instance(); - Either> either = instance.getAttributes().put(key,value); + LoggingNode> instance = instance(); + Either>> either = instance.getAttributes().put(key,value); if(either.isA()){ Assert.fail(); } instance = either.b(); - List expectOps = List.list(Command.SET_ATTRIBUTE); - for(Operation op : instance.getLogger()){ + List expectOps = List.list(Command.PUT_ATTRIBUTE); + for(NodeOperation op : instance.getOperationLog()){ Command actual = op.getCommand(); Command expect = expectOps.head(); Assert.assertEquals(expect,actual); - - SetAttributeOperation sa = (SetAttributeOperation)op; - String actualKey = sa.getKey(); - ByteBuffer actualValue = sa.getValue(); - Assert.assertEquals(key,actualKey); - Assert.assertEquals(0,value.compareTo(actualValue)); - expectOps = expectOps.tail(); } - Assert.assertEquals(0,expectOps.length()); + Assert.assertEquals(1,expectOps.length()); } public void testDeleteAttributeTest() { String key = "KEY"; ByteBuffer value = ByteBuffer.wrap(key.getBytes()); - LoggingNode instance = instance(); - Either> either = instance.getAttributes().put(key,value); + LoggingNode> instance = instance(); + Either>> either = instance.getAttributes().put(key,value); if(either.isA()){ Assert.fail(); } @@ -123,8 +115,8 @@ } instance = either.b(); - List expectOps = List.list(Command.SET_ATTRIBUTE,Command.DELETE_ATTRIBUTE); - for(Operation op : instance.getLogger()){ + List expectOps = List.list(Command.PUT_ATTRIBUTE,Command.DELETE_ATTRIBUTE); + for(NodeOperation op : instance.getOperationLog()){ Command actual = op.getCommand(); Command expect = expectOps.head(); Assert.assertEquals(expect,actual); @@ -143,9 +135,10 @@ return suite; } - public static LoggingNode instance() + public static LoggingNode> instance() { - return new LoggingNode(new ClonableDefaultNode(new DefaultNode())); + EditableNodeWrapper wrapper = new EditableNodeWrapper(new DefaultTreeNode()); + return new LoggingNode>(wrapper); } public static class ParentTestImpl extends ParentTest> diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/tests/util/TestUtil.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/tests/util/TestUtil.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/tests/util/TestUtil.java Fri Feb 08 17:08:42 2013 +0900 @@ -4,21 +4,21 @@ 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.transaction.ClonableDefaultNode; +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; public class TestUtil { - public static ClonableDefaultNode createMockTree(int _maxDepth) + public static DefaultTreeNode createMockTree(int _maxDepth) { return _createMockTree(1,_maxDepth,new DefaultNodePath()); } - public static ClonableDefaultNode _createMockTree(int _currentDepth,int _maxDepth,NodePath _path) + public static DefaultTreeNode _createMockTree(int _currentDepth,int _maxDepth,NodePath _path) { - ClonableDefaultNode parent = new ClonableDefaultNode(); - Either either = parent.getAttributes().put("KEY",ByteBuffer.wrap(_path.toString().getBytes())); + DefaultTreeNode parent = new DefaultTreeNode(); + Either either = parent.getAttributes().put("KEY",ByteBuffer.wrap(_path.toString().getBytes())); if(either.isA()){ return null; } @@ -26,7 +26,7 @@ if(_currentDepth != _maxDepth){ for(int i = 0;i <= _currentDepth;i ++){ - ClonableDefaultNode ch = _createMockTree(_currentDepth + 1,_maxDepth,_path.add(i)); + DefaultTreeNode ch = _createMockTree(_currentDepth + 1,_maxDepth,_path.add(i)); either = parent.getChildren().addNewChildAt(i,ch); if(either.isA()){ return null; diff -r ed890dcb673e -r 650fe2a0dccc src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java Fri Feb 08 12:32:37 2013 +0900 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverse/TraverserTest.java Fri Feb 08 17:08:42 2013 +0900 @@ -9,14 +9,13 @@ 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.transaction.ClonableDefaultNode; +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; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; 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.Pair; import junit.framework.TestCase; public abstract class TraverserTest extends TestCase @@ -26,9 +25,9 @@ public void testTraverse() { int maxHeight = 3; - ClonableDefaultNode root = createTree(0,0,maxHeight,new DefaultNodePath()); + DefaultTreeNode root = createTree(0,0,maxHeight,new DefaultNodePath()); - TraversableNodeWrapper traversable = new TraversableNodeWrapper(root); + TraversableNodeWrapper traversable = new TraversableNodeWrapper(root); Traverser traverser = instance(); // generate all pattern. @@ -37,13 +36,13 @@ for(DefaultNodePath path : paths){ DefaultEvaluator evaluator = new DefaultEvaluator(path); - Either>> ret = traverser.traverse(traversable,evaluator); + Either>> ret = traverser.traverse(traversable,evaluator); if(ret.isA()){ Assert.fail(); } - Traversal> traversal = ret.b(); - TraversableNodeWrapper target = traversal.destination(); + Traversal> traversal = ret.b(); + TraversableNodeWrapper target = traversal.destination(); String expect = path.toString(); ByteBuffer value = target.getWrapped().getAttributes().get(key); String actual = new String(value.array()); @@ -51,7 +50,7 @@ List parts = path.inits(); - for(Direction> d : traversal){ + for(Direction> d : traversal){ DefaultNodePath part = parts.head(); parts = parts.tail(); value = d.getTarget().getWrapped().getAttributes().get(key); @@ -79,12 +78,12 @@ public static String key = "KEY"; public static ByteBuffer value = ByteBuffer.wrap(key.getBytes()); - public static ClonableDefaultNode factory = new ClonableDefaultNode(new DefaultNode()); + public static DefaultTreeNode factory = new DefaultTreeNode(new DefaultNode()); - public ClonableDefaultNode createTree(int _curX,int _curY,int _maxHeight,NodePath _address) + public DefaultTreeNode createTree(int _curX,int _curY,int _maxHeight,NodePath _address) { - ClonableDefaultNode parent = factory.createNewNode(); - Either either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes())); + DefaultTreeNode parent = factory.createNewNode(); + Either either = parent.getAttributes().put(key,ByteBuffer.wrap(_address.toString().getBytes())); if(either.isA()){ Assert.fail(); } @@ -95,7 +94,7 @@ } for(int i = 0;i < _curY + 1;i ++){ - ClonableDefaultNode ch = createTree(i,_curY + 1,_maxHeight,_address.add(i)); + DefaultTreeNode ch = createTree(i,_curY + 1,_maxHeight,_address.add(i)); either = parent.getChildren().addNewChildAt(i,ch); if(either.isA()){ Assert.fail();