# HG changeset patch # User one # Date 1425607174 -32400 # Node ID 550f51183d8a37b5bb97855d30b1154531c62865 # Parent e26462a38ce0b8785391dc4c0ea7f881c4a1f746# Parent a2598139df64efd6f649ba9a02f2b7d652bee8c1 Merge with a2598139df64efd6f649ba9a02f2b7d652bee8c1 diff -r e26462a38ce0 -r 550f51183d8a src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungle.java diff -r e26462a38ce0 -r 550f51183d8a src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/ReplaceRootNodeOperation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/operations/ReplaceRootNodeOperation.java Fri Mar 06 10:59:34 2015 +0900 @@ -0,0 +1,37 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations; + +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 class ReplaceRootNodeOperation implements NodeOperation { + + @Override + public Command getCommand() { + return Command.REPLACE_ROOT; + } + + @Override + public Either invoke(TreeNode target) { + return target.appendRootNode(); + } + + @Override + public int getPosition() { + return -1; + } + + @Override + public String getKey() { + return null; + } + + @Override + public ByteBuffer getValue() { + return null; + } + +} diff -r e26462a38ce0 -r 550f51183d8a src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/replaceRootNodeAt.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/trasnformer/replaceRootNodeAt.java Fri Mar 06 10:59:34 2015 +0900 @@ -0,0 +1,40 @@ +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.LoggingNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; +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 replaceRootNodeAt implements NodeEditor { + + + public Either _edit(LoggingNode _e) + { + Either either = _e.replaceNewRootNode(); + if(either.isA()){ + // error + return either; + } + return DefaultEither.newB(either.b()); + } + + + @Override + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + public LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + +} diff -r e26462a38ce0 -r 550f51183d8a 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 Mar 06 10:44:50 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Fri Mar 06 10:59:34 2015 +0900 @@ -58,7 +58,6 @@ } }; - IndexManager indexManager = new IndexManager(repository.getReservation()); InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, indexManager, true); traverser.createIndex(); diff -r e26462a38ce0 -r 550f51183d8a src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java diff -r e26462a38ce0 -r 550f51183d8a src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/ReplaceRootNodeAt.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/core/nodeeditor/ReplaceRootNodeAt.java Fri Mar 06 10:59:34 2015 +0900 @@ -0,0 +1,39 @@ +package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.nodeeditor; + +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.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +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; +import junit.framework.Assert; + +import org.junit.Test; + +public class ReplaceRootNodeAt { + + @Test + public void ReplaceRootNodeAtTest() { + System.out.println("start"); + Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor(new DefaultTraverser())); + jungle.createNewTree("tree"); + JungleTree tree = jungle.getTreeByName("tree"); + JungleTreeEditor editor = tree.getTreeEditor(); + + TreeNode oldRoot = tree.getRootNode(); + Either either = editor.replaceNewRootNode(); + Assert.assertTrue(either.isB()); + JungleTreeEditor newTreeEditor = either.b(); + Assert.assertTrue(newTreeEditor.success().isB()); + TreeNode newRoot = tree.getRootNode(); + Assert.assertFalse(oldRoot.equals(newRoot)); + + Either childrenEither = newRoot.getChildren().at(0); + Assert.assertTrue(childrenEither.isB()); + TreeNode newRootChildren = childrenEither.b(); + Assert.assertEquals(oldRoot, newRootChildren); + } +}