changeset 179:2828205bdc3a

fit JungleCore
author tatsuki
date Sat, 13 Sep 2014 12:54:02 +0900
parents d6944d788121
children 4493dd7692ce
files src/main/java/alice/jungle/core/NetworkDefaultJungle.java src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java src/main/java/alice/jungle/operations/NetworkAppendChildAtOperation.java src/main/java/alice/jungle/operations/NetworkDeleteAttributeOperation.java src/main/java/alice/jungle/operations/NetworkDeleteChildAtOperation.java src/main/java/alice/jungle/operations/NetworkNodeOperation.java src/main/java/alice/jungle/operations/NetworkNodePath.java src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java src/main/java/alice/jungle/persistent/PersistentChangeSet.java src/main/java/alice/jungle/persistent/PersistentJungleTree.java src/main/java/alice/jungle/persistent/PersistentTransactionManager.java src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java src/main/java/alice/jungle/transaction/NetworkTransactionManager.java src/main/java/app/bbs/NetworkJungleBulletinBoard.java
diffstat 15 files changed, 290 insertions(+), 95 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/jungle/core/NetworkDefaultJungle.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/core/NetworkDefaultJungle.java	Sat Sep 13 12:54:02 2014 +0900
@@ -56,7 +56,7 @@
 			}
 		};
 		TreeNode root = new DefaultTreeNode();
-		ChangeSet set = new DefaultChangeSet(root,null,list,uuid,_name, 0);
+		ChangeSet set = new DefaultChangeSet(root,null,list,uuid,_name, 0,null);
 		DefaultTreeContext tc = new DefaultTreeContext(root,set);
 		JungleTree newTree = new NetworkDefaultJungleTree(_name, tc,uuid,journal.getWriter(),editor);
 		if(trees.putIfAbsent(_name,newTree) != null){
--- a/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Sat Sep 13 12:54:02 2014 +0900
@@ -1,14 +1,19 @@
 package alice.jungle.datasegment.transformer;
 
 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.store.trasnformer.NodeEditor;
 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.tatsuki.jungle.store.index.Logging;
 
 import org.msgpack.annotation.Message;
 
+import fj.data.List;
+import fj.data.TreeMap;
+
 
 /*
  * This code same AppendChildAt. 
@@ -23,14 +28,35 @@
 		pos = _pos;
 	}
 
-	@Override
-	public Either<Error, TreeNode> edit(TreeNode _e) {
-		Either<Error,TreeNode> either = _e.getChildren().addNewChildAt(pos);
+	public Either<Error, Logging> _edit(Logging _e) 
+	{
+		Either<Error,Logging> either = _e.getChildren().addNewChildAt(pos);
 		if(either.isA()){
 			// error
 			return either;
 		}
 		return DefaultEither.newB(either.b());
 	}
+	
+	@Override
+	public Either<Error, Logging> edit(TreeNode _e) {
+		Logging logNode = wrap(_e);
+		return _edit(logNode);
+	}
+
+	public Logging wrap(TreeNode node) {
+		return new LoggingNode(node);
+	}
+
+	@Override
+	public Logging wrap(TreeNode node, OperationLog op) {
+		return new LoggingNode(node, op);
+	}
+
+	@Override
+	public TreeMap<String,TreeMap<String, List<TreeNode>>> getIndex() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 
 }
--- a/src/main/java/alice/jungle/operations/NetworkAppendChildAtOperation.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkAppendChildAtOperation.java	Sat Sep 13 12:54:02 2014 +0900
@@ -3,7 +3,10 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 import org.msgpack.annotation.Message;
 
@@ -22,29 +25,32 @@
 		pos = _pos;
 	}
 	
-	@Override
-	public Command getCommand() {
+	public Command getCommand()
+	{
 		return Command.APPEND_CHILD;
 	}
 	
-	/*@Override
-	public <T extends TreeNode> Either<Error, TreeNode> invoke(TreeNode _target) {
-		NetworkAppendChildAt appendChildAt = new NetworkAppendChildAt(pos);
-		return appendChildAt.edit(_target);
-	}*/
+	@Override
+	public Either<Error,TreeNode> invoke(TreeNode _target)
+	{
+		return _target.getChildren().addNewChildAt(pos);
+	}
 
 	@Override
-	public int getPosition() {
+	public int getPosition()
+	{
 		return pos;
 	}
 
 	@Override
-	public String getKey() {
+	public String getKey()
+	{
 		return null;
 	}
 
 	@Override
-	public ByteBuffer getValue() {
+	public ByteBuffer getValue()
+	{
 		return null;
 	}
 }
--- a/src/main/java/alice/jungle/operations/NetworkDeleteAttributeOperation.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkDeleteAttributeOperation.java	Sat Sep 13 12:54:02 2014 +0900
@@ -5,8 +5,11 @@
 import org.msgpack.annotation.Message;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 
 @Message
 public class NetworkDeleteAttributeOperation implements NodeOperation
@@ -31,12 +34,11 @@
 		return Command.DELETE_ATTRIBUTE;
 	}
 	
-	/*@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _target)
 	{
-		DeleteAttribute deleteAttribute = new DeleteAttribute(key);
-		return deleteAttribute.edit(_target);
-	}*/
+		return _target.getAttributes().delete(key);
+	}
 
 	@Override
 	public int getPosition()
--- a/src/main/java/alice/jungle/operations/NetworkDeleteChildAtOperation.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkDeleteChildAtOperation.java	Sat Sep 13 12:54:02 2014 +0900
@@ -5,6 +5,7 @@
 import org.msgpack.annotation.Message;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -32,12 +33,11 @@
 		return Command.DELETE_CHILD;
 	}
 	
-	/*@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _target)
 	{
-		DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
-		return deleteChildAt.edit(_target);
-	}*/
+		return _target.getChildren().deleteChildAt(pos);
+	}
 
 	@Override
 	public int getPosition()
--- a/src/main/java/alice/jungle/operations/NetworkNodeOperation.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkNodeOperation.java	Sat Sep 13 12:54:02 2014 +0900
@@ -3,6 +3,7 @@
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
@@ -88,25 +89,21 @@
 		return value;
 	}
 
-/*	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target) {
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _target) {
 		switch(getCommand(commandType)) {
 		case PUT_ATTRIBUTE:
-			PutAttribute putAttribute = new PutAttribute(key,value);
-			return putAttribute.edit(_target);
+			return _target.getAttributes().put(key, value);
 		case APPEND_CHILD:
-			AppendChildAt appendChildAt = new AppendChildAt(pos);
-			return appendChildAt.edit(_target);
+			return _target.getChildren().addNewChildAt(pos);
 		case DELETE_CHILD:
-			DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
-			return deleteChildAt.edit(_target);
+			return _target.getChildren().deleteChildAt(pos);
 		case DELETE_ATTRIBUTE:
-			DeleteAttribute deleteAttribute = new DeleteAttribute(key);
-			return deleteAttribute.edit(_target);
+			return _target.getAttributes().delete(key);
 		default:
 			break;
 		}
 		return null;
-	}*/
+	}
 
 }
--- a/src/main/java/alice/jungle/operations/NetworkNodePath.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkNodePath.java	Sat Sep 13 12:54:02 2014 +0900
@@ -66,5 +66,11 @@
 	public String toString() {
 		return path.toString();
 	}
+
+	@Override
+	public NodePath tail() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 	
 }
--- a/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java	Sat Sep 13 12:54:02 2014 +0900
@@ -5,10 +5,12 @@
 import org.msgpack.annotation.Message;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
 @Message
 public class NetworkPutAttributeOperation  implements NodeOperation
 {
@@ -39,12 +41,11 @@
 		return Command.PUT_ATTRIBUTE;
 	}
 	
-	/*@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	@Override
+	public Either<Error, TreeNode> invoke(TreeNode _target)
 	{
-		PutAttribute putAttribute = new PutAttribute(key,value);
-		return putAttribute.edit(_target);
-	}*/
+		return _target.getAttributes().put(key,value);
+	}
 
 	@Override
 	public int getPosition()
--- a/src/main/java/alice/jungle/persistent/PersistentChangeSet.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeSet.java	Sat Sep 13 12:54:02 2014 +0900
@@ -1,5 +1,7 @@
 package alice.jungle.persistent;
 
+import fj.data.List;
+import fj.data.TreeMap;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
@@ -64,4 +66,10 @@
 		return treeName;
 	}
 
+	@Override
+	public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }
--- a/src/main/java/alice/jungle/persistent/PersistentJungleTree.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentJungleTree.java	Sat Sep 13 12:54:02 2014 +0900
@@ -1,14 +1,19 @@
 package alice.jungle.persistent;
 
+import fj.data.List;
+import fj.data.TreeMap;
 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.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+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.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class PersistentJungleTree implements JungleTree {
 	private final AtomicReservableReference<TreeContext> repository;
@@ -48,5 +53,23 @@
 		return getTreeEditor();
 	}
 
+	@Override
+	public InterfaceTraverser getTraverser() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public JungleTreeEditor getIndexTreeEditor() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 
 }
--- a/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Sat Sep 13 12:54:02 2014 +0900
@@ -1,5 +1,7 @@
 package alice.jungle.persistent;
 
+import fj.data.List;
+import fj.data.TreeMap;
 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;
@@ -33,7 +35,7 @@
 	}
 	
 	@Override
-	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log) {
+	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log,TreeMap<String, TreeMap<String, List<TreeNode>>> index) {
 		ChangeSet cs = tip.getChangeSet();
 		long currentRevision = cs.revision();
 		long nextRevision = currentRevision + 1;
--- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java	Sat Sep 13 12:54:02 2014 +0900
@@ -1,13 +1,18 @@
 package alice.jungle.transaction;
 
+import fj.data.List;
+import fj.data.TreeMap;
 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.persistent.ChangeListWriter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
+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.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
 
 public class NetworkDefaultJungleTree implements JungleTree {
 	private final AtomicReservableReference<TreeContext> repository;
@@ -51,5 +56,23 @@
 		return cs.getRoot();
 	}
 
+	@Override
+	public InterfaceTraverser getTraverser() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public JungleTreeEditor getIndexTreeEditor() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 
 }
--- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Sat Sep 13 12:54:02 2014 +0900
@@ -27,6 +27,7 @@
 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.tatsuki.jungle.store.index.Logging;
 
 public class NetworkDefaultJungleTreeEditor implements JungleTreeEditor {
 
@@ -67,13 +68,13 @@
 	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
 	{
 		//LoggingNodeHook hook = new LoggingNodeHook(_e);
-		Either<Error,TreeNode> either = editor.edit(root,_path,_e);
+		Either<Error,Logging> either = editor.edit(root,_path,_e);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
 		
-		TreeNode newNode = either.b();
-		OperationLog newLog = newNode.getLog();
+		TreeNode newNode = either.b().getWrap();
+		OperationLog newLog = either.b().getOperationLog();
 		
 		IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
 			@Override
@@ -132,7 +133,7 @@
 	@Override
 	public Either<Error,JungleTreeEditor> success()
 	{
-		Either<Error,TransactionManager> either = txManager.commit(root,log);
+		Either<Error,TransactionManager> either = txManager.commit(root,log,null);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
--- a/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java	Sat Sep 13 12:54:02 2014 +0900
@@ -2,6 +2,8 @@
 
 import java.util.Iterator;
 
+import fj.data.List;
+import fj.data.TreeMap;
 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;
@@ -40,7 +42,7 @@
 	}
 	
 	@Override
-	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log) {
+	public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log, TreeMap<String,TreeMap<String, List<TreeNode>>> index) {
 		ChangeSet cs = tip.getChangeSet();
 		long currentRevision = cs.revision();
 		long nextRevision = currentRevision + 1;
@@ -61,7 +63,7 @@
 		};
 		
 		TreeNode root = _newRoot;
-		DefaultChangeSet newCs = new DefaultChangeSet(root, cs, list, uuid, treeName, nextRevision);
+		DefaultChangeSet newCs = new DefaultChangeSet(root, cs, list, uuid, treeName, nextRevision, null);
 		DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs);
 		
 		@SuppressWarnings("rawtypes")
--- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Thu Sep 04 13:12:25 2014 +0900
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Sat Sep 13 12:54:02 2014 +0900
@@ -5,6 +5,8 @@
 import java.nio.ByteBuffer;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import fj.data.List;
+import fj.data.TreeMap;
 import alice.jungle.core.NetworkDefaultJungle;
 import alice.jungle.persistent.AliceJournal;
 import alice.jungle.persistent.NetworkJournal;
@@ -22,6 +24,7 @@
 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.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
@@ -32,6 +35,7 @@
 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.tatsuki.jungle.store.index.Logging;
 import junit.framework.Assert;
 
 public class NetworkJungleBulletinBoard implements NetworkBulletinBoard {
@@ -186,13 +190,23 @@
 		NodeEditor e = new NodeEditor() {
 			ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
 
-			public Either<Error, TreeNode> edit(TreeNode node) {
-				node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
-				node = node.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b();
-				node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+			public Either<Error,Logging> edit(TreeNode node) {
+				Logging logNode = wrap(node , new DefaultOperationLog());
+				logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+				logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b();
+				logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
 				tBuffer2.putLong(timestamp);
-				node = node.getAttributes().put("timestamp", tBuffer2).b();
-				return DefaultEither.newB(node);
+				logNode = logNode.getAttributes().put("timestamp", tBuffer2).b();
+				return DefaultEither.newB(logNode);
+			}
+			@Override
+			public Logging wrap(TreeNode node, OperationLog op) {
+				return new LoggingNode(node, op);
+			}
+			@Override
+			public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+				// TODO Auto-generated method stub
+				return null;
 			}
 
 		};
@@ -250,10 +264,22 @@
 
 			NodeEditor e = new NodeEditor() {
 
-				public Either<Error, TreeNode> edit(TreeNode node) {
-					node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("timestamp", tBuffer).b();
-					return DefaultEither.newB(node);
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -293,12 +319,24 @@
 			editor = either.b();
 
 			NodeEditor e = new NodeEditor() {
-				public Either<Error, TreeNode> edit(TreeNode node) {
-					node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
-					node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
-					node = node.getAttributes().put("timestamp", tBuffer).b();
-					return DefaultEither.newB(node);
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -332,14 +370,26 @@
 			}
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error, TreeNode> edit(TreeNode node) {
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
+					System.out.println(new String(node.getAttributes().get("mes").array()));
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
 					System.out.println(new String(node.getAttributes().get("mes").array()));
-					node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
-					node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
-					node = node.getAttributes().put("timestamp", tBuffer).b();
-					System.out.println(new String(node.getAttributes().get("mes").array()));
-					return DefaultEither.newB(node);
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -375,15 +425,27 @@
 			NodeEditor e = new NodeEditor() {
 				String str;
 
-				public Either<Error, TreeNode> edit(TreeNode node) {
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
 					str = "0";
 					int count = 0;
-					for (; node.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
+					for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
 					}
 					str = String.valueOf(count);
-					node = node.getAttributes().put("mes" + str,ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("timestamp" + str, tBuffer).b();
-					return DefaultEither.newB(node);
+					logNode = logNode.getAttributes().put("mes" + str,ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp" + str, tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -416,11 +478,23 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error, TreeNode> edit(TreeNode node) {
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
 					// EnableNodeWrapper<T> node = _e.getWrap();
-					node = node.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("timestamp" + id, tBuffer).b();
-					return DefaultEither.newB(node);
+					logNode = logNode.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -484,21 +558,33 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error, TreeNode> edit(TreeNode node) {
-					node = node.getAttributes().delete("mes" + id).b();
-					node = node.getAttributes().delete("timestamp" + id).b();
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().delete("mes" + id).b();
+					logNode = logNode.getAttributes().delete("timestamp" + id).b();
 					int count = Integer.parseInt(id);
-					for (; node.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) {
-						node = node.getAttributes().put("mes" + count,node.getAttributes().get("mes"+ String.valueOf(count + 1))).b();
-						node = node.getAttributes().put("timestamp" + count, tBuffer).b();
+					for (; logNode.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) {
+						logNode = logNode.getAttributes().put("mes" + count,node.getAttributes().get("mes"+ String.valueOf(count + 1))).b();
+						logNode = logNode.getAttributes().put("timestamp" + count, tBuffer).b();
 						count++;
 					}
 					if (count != Integer.parseInt(id)) {
-						node = node.getAttributes().delete("timestamp" + count).b();
-						node = node.getAttributes().delete("mes" + count).b();
+						logNode = logNode.getAttributes().delete("timestamp" + count).b();
+						logNode = logNode.getAttributes().delete("mes" + count).b();
 					}
 
-					return DefaultEither.newB(node);
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 
 			};
@@ -525,12 +611,24 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error, TreeNode> edit(TreeNode node) {
-					node = node.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
-					node = node.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
-					node = node.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
-					node = node.getAttributes().put("timestamp", tBuffer).b();
-					return DefaultEither.newB(node);
+				public Either<Error,Logging> edit(TreeNode node) {
+					Logging logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public Logging wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
 				}
 			};
 			either = editor.edit(path, e);