# HG changeset patch # User one # Date 1414144188 -32400 # Node ID 6e9a8d26e0cf2bb110d14cd588da0b20ff3539d5 # Parent f46a6e0e459460987432b2753eae42aac2edf7da refactor diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java Fri Oct 24 18:49:48 2014 +0900 @@ -80,10 +80,6 @@ return name; } - @Override - public int getLogSize() { - return 0; - } }; DefaultTreeNode root = new DefaultTreeNode(); diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java Fri Oct 24 18:49:48 2014 +0900 @@ -91,14 +91,6 @@ } @Override - public int getLogSize(){ - TreeContext tc = repository.get(); - ChangeSet cs = tc.getChangeSet(); - ChangeList cl = cs.getChangeList(); - return cl.getLogSize(); - } - - @Override public Iterable getLog() { TreeContext tc = repository.get(); ChangeSet cs = tc.getChangeSet(); diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTree.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTree.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/JungleTree.java Fri Oct 24 18:49:48 2014 +0900 @@ -20,6 +20,5 @@ public TreeNode getRootNode(); public TreeMap>>> getIndex(); public IndexJungleTreeEditor getIndexTreeEditor(); - public int getLogSize(); public Iterable getLog(); } diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeList.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeList.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/persistent/ChangeList.java Fri Oct 24 18:49:48 2014 +0900 @@ -6,5 +6,4 @@ { public String uuid(); public String getTreeName(); - public int getLogSize(); } diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/NodePath.java Fri Oct 24 18:49:48 2014 +0900 @@ -8,4 +8,5 @@ public Pair pop(); public NodePath tail(); public int size(); + public Pair last(); } diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNodePath.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNodePath.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultNodePath.java Fri Oct 24 18:49:48 2014 +0900 @@ -4,7 +4,6 @@ import fj.F; import fj.data.List; - import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; @@ -52,6 +51,13 @@ } @Override + public Pair last(){ + Integer last = path.last(); + List list = path.reverse().tail().reverse(); + return new Pair(last,new DefaultNodePath(list)); + } + + @Override public String toString() { return path.toString(); @@ -81,6 +87,7 @@ }); } + @Override public NodePath tail() { List tail = path.reverse(); diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/AppendChildAt.java Fri Oct 24 18:49:48 2014 +0900 @@ -48,10 +48,4 @@ return new LoggingNode(node, op); } - @Override - public TreeMap>>> getIndex() { - // TODO Auto-generated method stub - return null; - } - } diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteAttribute.java Fri Oct 24 18:49:48 2014 +0900 @@ -43,10 +43,4 @@ public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } - - @Override - public TreeMap>>> getIndex() { - // TODO Auto-generated method stub - return null; - } } diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/DeleteChildAt.java Fri Oct 24 18:49:48 2014 +0900 @@ -47,9 +47,4 @@ return new LoggingNode(node, op); } - @Override - public TreeMap>>> getIndex() { - // TODO Auto-generated method stub - return null; - } } diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/NodeEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -15,5 +15,4 @@ { public Either edit(TreeNode _e); public LoggingNode wrap(TreeNode node, OperationLog op); - public TreeMap>>> getIndex(); } \ No newline at end of file diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/PutAttribute.java Fri Oct 24 18:49:48 2014 +0900 @@ -54,9 +54,4 @@ return new LoggingNode(node, op); } - @Override - public TreeMap>>> getIndex() { - // TODO Auto-generated method stub - return null; - } } diff -r f46a6e0e4594 -r 6e9a8d26e0cf 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 Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Fri Oct 24 18:49:48 2014 +0900 @@ -56,10 +56,7 @@ public String uuid(){ return uuid; } - @Override - public int getLogSize() { - return _log.length(); - } + }; DefaultChangeSet newCs = new DefaultChangeSet(_newRoot,cs,list,uuid, _treeName, nextRevision,index); diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/IndexJungleTreeEditor.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/IndexJungleTreeEditor.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/IndexJungleTreeEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -25,6 +25,8 @@ 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.Pair; +import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index.AddChildrenIndexTest; +import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.AddNewChildrenIndexEditor; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.DefaultIndexEditor; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.DeleteChildIndexEditor; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.DeleteIndexEditor; @@ -97,7 +99,7 @@ public Either addNewChildAt(NodePath _path, int _pos) { AppendChildAt appendChildAt = new AppendChildAt(_pos); - DefaultIndexEditor indexEditor = new DefaultIndexEditor(); + AddNewChildrenIndexEditor indexEditor = new AddNewChildrenIndexEditor(_pos, _path); Either either = _edit(_path,appendChildAt,indexEditor); Either newEither = DefaultEither.newB(either.b()); return newEither; diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/AddNewChildrenIndexEditor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/AddNewChildrenIndexEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -0,0 +1,123 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index; + +import java.util.Iterator; + +import fj.F; +import fj.Ord; +import fj.P2; +import fj.data.List; +import fj.data.Option; +import fj.data.TreeMap; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +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.DefaultNodePath; +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.transaction.IndexJungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager; +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.Pair; + +public class AddNewChildrenIndexEditor implements IndexEditor { + + NodePath editNodePath; + + public AddNewChildrenIndexEditor(int pos, NodePath path) { + this.editNodePath = path.add(pos); + } + + @Override + public Either edit( + TreeNode root, + TransactionManager txManager, + TreeEditor editor, + TreeOperationLog log, + TreeMap>>> index) { + + TreeMap>>> newIndex = editIndex(index); + IndexJungleTreeEditor newEditor = new IndexJungleTreeEditor(root, txManager, editor, newIndex); + return DefaultEither.newB(newEditor); + } + + public TreeMap>>> editIndex( + TreeMap>>> index) { + + if (!index.isEmpty()) { + List keyList = index.keys(); + TreeMap>>> newIndex = TreeMap.empty(Ord.stringOrd); + TreeMap>> newInnerIndex = TreeMap.empty(Ord.stringOrd); + + for (String indexKey : keyList) { + TreeMap>> innerIndex = index.get(indexKey).some(); + List innerIndexKeyList = innerIndex.keys(); + + for (String innerIndexKey : innerIndexKeyList) { + List> pairList = innerIndex.get(innerIndexKey).some(); + List> list = checkPath(pairList); + if (!list.isEmpty()){ + System.out.println(new String(list.head().left().getAttributes().get("KEY").array())); + newInnerIndex = newInnerIndex.set(innerIndexKey, list); + } + } + newIndex = newIndex.set(indexKey, newInnerIndex); + } + return newIndex; + } else { + return index; + } + } + + public List> checkPath(List> pairList){ + + List> list = List.nil(); + for (Pair pair : pairList) { + + NodePath path = pair.right(); + System.out.println("oldPath = " + path.toString()); + NodePath newPath = new DefaultNodePath(); + + + if (editNodePath.size() > path.size()) { + list = list.cons(pair); + continue; + } + + Pair editNodePathCopy = editNodePath.pop(); + int loopCount = 0; + + for (Integer pathInt : path) { + loopCount++; + + if (pathInt == -1) + continue; + + if (editNodePathCopy.right().size() > 0) { + editNodePathCopy = editNodePathCopy.right().pop(); + + if (loopCount == editNodePath.size() && editNodePathCopy.left() <= pathInt) { + newPath = newPath.add(pathInt + 1); + continue; + } + + if (!(editNodePathCopy.left() == pathInt)) { + newPath = path; + break; + } + } + + newPath = newPath.add(pathInt); + + } + + System.out.println("newPath = " + newPath.toString()); + Pair newPair = new Pair(pair.left(), newPath); + list = list.cons(newPair); + } + + return list; + } + +} diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteChildIndexEditor.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteChildIndexEditor.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteChildIndexEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -97,9 +97,9 @@ if (pathInt == -1) continue; if (editNodePathCopy.right().size() > 0) { + editNodePathCopy = editNodePathCopy.right().pop(); - if (loopCount >= editNodePath.size() - && editNodePathCopy.left() < pathInt) { + if (loopCount == editNodePath.size() && editNodePathCopy.left() < pathInt) { newPath = newPath.add(pathInt - 1); continue; } diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteIndexEditor.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteIndexEditor.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/DeleteIndexEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -45,6 +45,7 @@ public TreeMap>>> editIndex(String attribute, TreeMap>>> index){ Option>>> innerIndexOp = index.get(key); + if (innerIndexOp.isSome()) { TreeMap>> innerIndex = innerIndexOp.some(); Option>> listOp = innerIndex.get(attribute); diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/PutIndexEditor.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/PutIndexEditor.java Tue Oct 21 19:47:25 2014 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/store/index/PutIndexEditor.java Fri Oct 24 18:49:48 2014 +0900 @@ -55,12 +55,12 @@ if (attribute != null) { if (innerIndexOp.isNone()) { - TreeMap>> innerIndex = TreeMap.empty(Ord.stringOrd); - List> list = List.nil(); - list = list.cons(pathNode); - innerIndex = innerIndex.set(attribute, list); - TreeMap>>> newIndex = index.set(key, innerIndex); - return newIndex; +// TreeMap>> innerIndex = TreeMap.empty(Ord.stringOrd); +// List> list = List.nil(); +// list = list.cons(pathNode); +// innerIndex = innerIndex.set(attribute, list); +// TreeMap>>> newIndex = index.set(key, innerIndex); + return index; } else { TreeMap>> innerIndex = innerIndexOp.some(); diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/AddChildrenIndexTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/AddChildrenIndexTest.java Fri Oct 24 18:49:48 2014 +0900 @@ -0,0 +1,105 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +import org.junit.Test; +import org.junit.experimental.theories.suppliers.TestedOn; + +import fj.data.List; +import fj.data.Option; +import fj.data.TreeMap; +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.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; +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.Assert; + +public class AddChildrenIndexTest { + + @Test + public void DeleteChildrenTest(){ + Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTreeEditor(new DefaultTraverser())); + jungle.createNewTree("tree"); + JungleTree tree = jungle.getTreeByName("tree"); + createTree(tree); + tree.getRootNode(); + InterfaceTraverser ifTraverser = tree.getTraverser(); + + Iterator> pairIterator = ifTraverser.find((TreeNode node) -> { + ByteBuffer attribute = node.getAttributes().get(key); + if (attribute != null) { + byte[] byteAttribute = attribute.array(); + String str = new String(byteAttribute); + System.out.println("attribute = " + str); + return str.equals("<-1,0,1>"); + } + return false; + }, key, "<-1,0,1>"); + + for (;pairIterator.hasNext();pairIterator.next()) { + + } + ifTraverser.commitIndex(); + + IndexJungleTreeEditor editor = tree.getIndexTreeEditor(); + Either either = editor.addNewChildAt(new DefaultNodePath().add(0), 0); + either.b().success(); + + InterfaceTraverser newIfTraverser = tree.getTraverser(); + TreeMap>>> newIndex = newIfTraverser.getIndex(); + Assert.assertTrue(newIndex.get(key).some().get("<-1,0,0>").isNone()); + Assert.assertEquals(newIndex.get(key).some().get("<-1,0,1>").some().head().right().toString(),"<-1,0,2>"); + + } + public static String key = "KEY"; + public static DefaultTreeNode factory = new DefaultTreeNode(); + + public void createTree(JungleTree tree) { + NodePath root = new DefaultNodePath(); + createChildren(tree, root, 0); + + for (int x = 0; x < 3; x++) { + createChildren(tree, root.add(0), x); + for (int y = 0; y < 3; y++) { + createChildren(tree, root.add(0).add(x), y); + } + } + + } + + public void createChildren(JungleTree tree, NodePath root, int num) { + JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成 + Either either = editor + .addNewChildAt(root, num); // 新しく入れるところへのパス + if (either.isA()) { + Assert.fail(); + } + editor = either.b(); + either = editor.success(); + if (either.isA()) { + Assert.fail(); + } + NodePath childPath = root.add(num); + editor = tree.getTreeEditor(); + NodePath attribute = root.add(num); + System.out.println(attribute.toString()); + either = editor.putAttribute(childPath, key,ByteBuffer.wrap(attribute.toString().getBytes())); + if (either.isA()) { + Assert.fail(); + } + editor = either.b(); + either = editor.success(); + } +} diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/DeleteChildrenIndexTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/DeleteChildrenIndexTest.java Fri Oct 24 18:49:48 2014 +0900 @@ -0,0 +1,108 @@ +package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +import org.junit.Test; +import org.junit.experimental.theories.suppliers.TestedOn; + +import fj.data.List; +import fj.data.Option; +import fj.data.TreeMap; +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.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; +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.Assert; + +public class DeleteChildrenIndexTest { + + @Test + public void DeleteChildrenTest(){ + Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTreeEditor(new DefaultTraverser())); + jungle.createNewTree("tree"); + JungleTree tree = jungle.getTreeByName("tree"); + createTree(tree); + tree.getRootNode(); + InterfaceTraverser ifTraverser = tree.getTraverser(); + + Iterator> pairIterator = ifTraverser.find((TreeNode node) -> { + ByteBuffer attribute = node.getAttributes().get(key); + if (attribute != null) { + byte[] byteAttribute = attribute.array(); + String str = new String(byteAttribute); + System.out.println("attribute = " + str); + return str.equals("<-1,0,1>"); + } + return false; + }, key, "<-1,0,1>"); + + for (;pairIterator.hasNext();pairIterator.next()) { + + } + //check index + ifTraverser.commitIndex(); + TreeMap>>> index = ifTraverser.getIndex(); + Assert.assertTrue(index.get(key).some().get("<-1,0,0>").isSome()); + + IndexJungleTreeEditor editor = tree.getIndexTreeEditor(); + Either either = editor.deleteChildAt(new DefaultNodePath().add(0), 0); + either.b().success(); + + InterfaceTraverser newIfTraverser = tree.getTraverser(); + TreeMap>>> newIndex = newIfTraverser.getIndex(); + Assert.assertEquals(newIndex.get(key).some().get("<-1,0,1>").some().head().right().toString(),"<-1,0,0>"); + + } + public static String key = "KEY"; + public static DefaultTreeNode factory = new DefaultTreeNode(); + + public void createTree(JungleTree tree) { + NodePath root = new DefaultNodePath(); + createChildren(tree, root, 0); + + for (int x = 0; x < 3; x++) { + createChildren(tree, root.add(0), x); + for (int y = 0; y < 3; y++) { + createChildren(tree, root.add(0).add(x), y); + } + } + + } + + public void createChildren(JungleTree tree, NodePath root, int num) { + JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成 + Either either = editor + .addNewChildAt(root, num); // 新しく入れるところへのパス + if (either.isA()) { + Assert.fail(); + } + editor = either.b(); + either = editor.success(); + if (either.isA()) { + Assert.fail(); + } + NodePath childPath = root.add(num); + editor = tree.getTreeEditor(); + NodePath attribute = root.add(num); + System.out.println(attribute.toString()); + either = editor.putAttribute(childPath, key, + ByteBuffer.wrap(attribute.toString().getBytes())); + if (either.isA()) { + Assert.fail(); + } + editor = either.b(); + either = editor.success(); + } +} diff -r f46a6e0e4594 -r 6e9a8d26e0cf src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/DeleteChildrenTest.java --- a/src/test/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle/index/DeleteChildrenTest.java Tue Oct 21 19:47:25 2014 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.index; - -import java.nio.ByteBuffer; -import java.util.Iterator; - -import org.junit.Test; -import org.junit.experimental.theories.suppliers.TestedOn; - -import fj.data.List; -import fj.data.Option; -import fj.data.TreeMap; -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.store.NodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; -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.Assert; - -public class DeleteChildrenTest { - - @Test - public void DeleteChildrenTest(){ - Jungle jungle = new DefaultJungle(null, "hogehoge",new DefaultTreeEditor(new DefaultTraverser())); - jungle.createNewTree("tree"); - JungleTree tree = jungle.getTreeByName("tree"); - createTree(tree); - tree.getRootNode(); - InterfaceTraverser ifTraverser = tree.getTraverser(); - - Iterator> pairIterator = ifTraverser.find((TreeNode node) -> { - ByteBuffer attribute = node.getAttributes().get(key); - if (attribute != null) { - byte[] byteAttribute = attribute.array(); - String str = new String(byteAttribute); - System.out.println("attribute = " + str); - return str.equals("<-1,0,1>"); - } - return false; - }, key, "<-1,0,1>"); - - for (;pairIterator.hasNext();pairIterator.next()) { - - } - //check index - ifTraverser.commitIndex(); - TreeMap>>> index = ifTraverser.getIndex(); - Assert.assertTrue(index.get(key).some().get("<-1,0,0>").isSome()); - - IndexJungleTreeEditor editor = tree.getIndexTreeEditor(); - Either either = editor.deleteChildAt(new DefaultNodePath().add(0), 0); - either.b().success(); - - InterfaceTraverser newIfTraverser = tree.getTraverser(); - TreeMap>>> newIndex = newIfTraverser.getIndex(); - Assert.assertTrue(newIndex.get(key).some().get("<-1,0,0>").isNone()); - Assert.assertEquals(newIndex.get(key).some().get("<-1,0,1>").some().head().right().toString(),"<-1,0,0>"); - - } - public static String key = "KEY"; - public static DefaultTreeNode factory = new DefaultTreeNode(); - - public void createTree(JungleTree tree) { - NodePath root = new DefaultNodePath(); - createChildren(tree, root, 0); - - for (int x = 0; x < 2; x++) { - createChildren(tree, root.add(0), x); - for (int y = 0; y < 2; y++) { - createChildren(tree, root.add(0).add(x), y); - } - } - - } - - public void createChildren(JungleTree tree, NodePath root, int num) { - JungleTreeEditor editor = tree.getTreeEditor();// Treeのeditorを作成 - Either either = editor - .addNewChildAt(root, num); // 新しく入れるところへのパス - if (either.isA()) { - Assert.fail(); - } - editor = either.b(); - either = editor.success(); - if (either.isA()) { - Assert.fail(); - } - NodePath childPath = root.add(num); - editor = tree.getTreeEditor(); - NodePath attribute = root.add(num); - System.out.println(attribute.toString()); - either = editor.putAttribute(childPath, key, - ByteBuffer.wrap(attribute.toString().getBytes())); - if (either.isA()) { - Assert.fail(); - } - editor = either.b(); - either = editor.success(); - } -}