changeset 105:f9e29a52efd3

Move some files
author one
date Tue, 26 Nov 2013 06:43:10 +0900
parents 03bf62bb699e
children f42f2e6b31de
files .classpath .project pom.xml src/alice/jungle/core/NetworkDefaultJungle.java src/alice/jungle/datasegment/HashSetDataSegment.java src/alice/jungle/datasegment/store/container/DefaultNodeOperationContainer.java src/alice/jungle/datasegment/store/container/DefaultNodePathContainer.java src/alice/jungle/datasegment/store/container/DefaultTreeOperationContainer.java src/alice/jungle/datasegment/store/container/DefaultTreeOperationLogContainer.java src/alice/jungle/datasegment/store/transformer/NetworkAppendChildAt.java src/alice/jungle/operations/NetworkAppendChildAtOperation.java src/alice/jungle/operations/NetworkDeleteAttributeOperation.java src/alice/jungle/operations/NetworkDeleteChildAtOperation.java src/alice/jungle/operations/NetworkNodeOperation.java src/alice/jungle/operations/NetworkNodePath.java src/alice/jungle/operations/NetworkPutAttributeOperation.java src/alice/jungle/operations/NetworkTreeOperation.java src/alice/jungle/operations/NetworkTreeOperationLog.java src/alice/jungle/persistence/AliceJournal.java src/alice/jungle/persistence/JungleUpdater.java src/alice/jungle/persistence/PersistentChangeList.java src/alice/jungle/persistence/PersistentChangeListReader.java src/alice/jungle/persistence/PersistentChangeListWriter.java src/alice/jungle/persistence/PersistentChangeSet.java src/alice/jungle/persistence/PersistentJournal.java src/alice/jungle/persistence/PersistentJungle.java src/alice/jungle/persistence/PersistentJungleTree.java src/alice/jungle/persistence/PersistentTransactionManager.java src/alice/jungle/remote/RemoteConfig.java src/alice/jungle/transaction/NetworkDefaultJungleTree.java src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java src/alice/jungle/transaction/NetworkTransactionManager.java src/jungle/app/bbs/BoardMessage.java src/jungle/app/bbs/BulletinBoard.java src/jungle/app/bbs/CassandraBulletinBoard.java src/jungle/app/bbs/CreateBoardMessageServlet.java src/jungle/app/bbs/CreateBoardServlet.java src/jungle/app/bbs/DistributeApp.java src/jungle/app/bbs/EditMessageServlet.java src/jungle/app/bbs/HectorSample.java src/jungle/app/bbs/IterableConverter.java src/jungle/app/bbs/JungleManager.java src/jungle/app/bbs/NetworkJungleBulletinBoard.java src/jungle/app/bbs/ShowBoardMessageServlet.java src/jungle/app/bbs/ShowBoardsServlet.java src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java src/jungle/app/bbs/codesegment/NullCodeSegment.java src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java src/jungle/app/bbs/transformer/MergeBBS.java src/main/java/alice/jungle/core/NetworkDefaultJungle.java src/main/java/alice/jungle/datasegment/container/DefaultNodeOperationContainer.java src/main/java/alice/jungle/datasegment/container/DefaultNodePathContainer.java src/main/java/alice/jungle/datasegment/container/DefaultTreeOperationContainer.java src/main/java/alice/jungle/datasegment/container/DefaultTreeOperationLogContainer.java src/main/java/alice/jungle/datasegment/store/HashSetDataSegment.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/operations/NetworkTreeOperation.java src/main/java/alice/jungle/operations/NetworkTreeOperationLog.java src/main/java/alice/jungle/persistent/AliceJournal.java src/main/java/alice/jungle/persistent/JungleUpdater.java src/main/java/alice/jungle/persistent/PersistentChangeList.java src/main/java/alice/jungle/persistent/PersistentChangeListReader.java src/main/java/alice/jungle/persistent/PersistentChangeListWriter.java src/main/java/alice/jungle/persistent/PersistentChangeSet.java src/main/java/alice/jungle/persistent/PersistentJournal.java src/main/java/alice/jungle/persistent/PersistentJungle.java src/main/java/alice/jungle/persistent/PersistentJungleTree.java src/main/java/alice/jungle/persistent/PersistentTransactionManager.java src/main/java/alice/jungle/remote/RemoteConfig.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/jungle/app/bbs/BoardMessage.java src/main/java/jungle/app/bbs/BulletinBoard.java src/main/java/jungle/app/bbs/CassandraBulletinBoard.java src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java src/main/java/jungle/app/bbs/CreateBoardServlet.java src/main/java/jungle/app/bbs/DistributeApp.java src/main/java/jungle/app/bbs/EditMessageServlet.java src/main/java/jungle/app/bbs/HectorSample.java src/main/java/jungle/app/bbs/IterableConverter.java src/main/java/jungle/app/bbs/JungleManager.java src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java src/main/java/jungle/app/bbs/ShowBoardsServlet.java src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java src/main/java/jungle/app/bbs/transformer/MergeBBS.java src/test/alice/jungle/PersistenJournalTest.java src/test/alice/jungle/core/operations/NetworkAppendChildOperationTest.java src/test/alice/jungle/core/operations/NetworkDeleteAttributeOprationTest.java src/test/alice/jungle/core/operations/NetworkDeleteChildAtOperationTest.java src/test/alice/jungle/core/operations/NetworkNodeOperationTest.java src/test/alice/jungle/core/operations/NetworkPutAttributeOperationTest.java src/test/alice/jungle/core/operations/NetworkTreeOperationLogTest.java src/test/alice/jungle/core/operations/NetworkTreeOperationTest.java src/test/alice/jungle/datasegment/NetworkNodePathTest.java src/test/java/alice/codesegment/local/HasFieldCodeSegment.java src/test/java/alice/codesegment/local/StartLocalCodeSegment.java src/test/java/alice/codesegment/remote/ClientCodeSegment.java src/test/java/alice/codesegment/remote/ClientFirstSetKey.java src/test/java/alice/codesegment/remote/HostCodeSegment.java src/test/java/alice/codesegment/remote/HostFirstPut.java src/test/java/alice/codesegment/remote/StartHostCodeSegment.java src/test/java/alice/jungle/CheckDoubleTreeAttr.java src/test/java/alice/jungle/CopyAttrJungle2.java src/test/java/alice/jungle/DoubleJungleManager.java src/test/java/alice/jungle/HashSetConvertTest.java src/test/java/alice/jungle/LocalDoubleJungleTree.java src/test/java/alice/jungle/PersistenJournalTest.java src/test/java/alice/jungle/PutAttrJungle1.java src/test/java/alice/jungle/core/operations/NetworkAppendChildOperationTest.java src/test/java/alice/jungle/core/operations/NetworkDeleteAttributeOprationTest.java src/test/java/alice/jungle/core/operations/NetworkDeleteChildAtOperationTest.java src/test/java/alice/jungle/core/operations/NetworkNodeOperationTest.java src/test/java/alice/jungle/core/operations/NetworkPutAttributeOperationTest.java src/test/java/alice/jungle/core/operations/NetworkTreeOperationLogTest.java src/test/java/alice/jungle/core/operations/NetworkTreeOperationTest.java src/test/java/alice/jungle/datasegment/NetworkNodePathTest.java src/test/java/alice/jungle/log/example/ListTest.java src/test/java/alice/jungle/log/example/LogReadCodeSegment.java src/test/java/alice/jungle/log/example/LogSendTest.java src/test/java/alice/jungle/log/example/PrintChildrenAttribute.java src/test/java/alice/jungle/log/example/StartCodeSegment.java src/test/java/alice/jungle/log/example/TestCodeSegment.java src/test/java/alice/jungle/log/example/TestLocalAlice.java src/test/java/alice/jungle/log/example/codesement/operation/ShowAttribute.java src/test/java/alice/jungle/log/example/codesement/operation/StartJungleCodeSegment.java src/test/java/alice/jungle/log/example/codesement/operation/TestPutAttributeCodeSegment.java
diffstat 136 files changed, 3567 insertions(+), 3588 deletions(-) [+]
line wrap: on
line diff
--- a/.classpath	Mon Nov 25 18:13:03 2013 +0900
+++ b/.classpath	Tue Nov 26 06:43:10 2013 +0900
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry including="**/*.java" kind="src" path="src"/>
+	<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
 	<classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.5/servlet-api-2.5-sources.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+	<classpathentry kind="var" path="M2_REPO/junit/junit/4.7/junit-4.7.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26.jar" sourcepath="M2_REPO/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26.jar" sourcepath="M2_REPO/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/servlet-api/2.5-20081211/servlet-api-2.5-20081211.jar" sourcepath="M2_REPO/org/mortbay/jetty/servlet-api/2.5-20081211/servlet-api-2.5-20081211-sources.jar"/>
@@ -44,7 +45,7 @@
 	<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar" sourcepath="M2_REPO/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/apache/maven/surefire/surefire-junit4/2.13/surefire-junit4-2.13.jar" sourcepath="M2_REPO/org/apache/maven/surefire/surefire-junit4/2.13/surefire-junit4-2.13-sources.jar"/>
 	<classpathentry kind="var" path="M2_REPO/org/apache/maven/surefire/surefire-api/2.13/surefire-api-2.13.jar" sourcepath="M2_REPO/org/apache/maven/surefire/surefire-api/2.13/surefire-api-2.13-sources.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/Alice"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/msgpack-java"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/Alice"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
--- a/.project	Mon Nov 25 18:13:03 2013 +0900
+++ b/.project	Tue Nov 26 06:43:10 2013 +0900
@@ -1,25 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>jungle-network</name>
-	<comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
-	<projects>
-		<project>Alice</project>
-		<project>jungle-core</project>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+  <name>jungle-network</name>
+  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+  <projects>
+    <project>jungle-core</project>
+  </projects>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+    <buildCommand>
+      <name>org.eclipse.m2e.core.maven2Builder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.m2e.core.maven2Nature</nature>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file
--- a/pom.xml	Mon Nov 25 18:13:03 2013 +0900
+++ b/pom.xml	Tue Nov 26 06:43:10 2013 +0900
@@ -4,7 +4,8 @@
   <artifactId>jungle-network</artifactId>
   <version>0.0.2-SNAPSHOT</version>
   <build>
-    <sourceDirectory>src</sourceDirectory>
+    <sourceDirectory>src/main/java</sourceDirectory>
+     <testSourceDirectory>src/test/java</testSourceDirectory>
     <plugins>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
@@ -46,11 +47,12 @@
   	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <dependencies>
-  	<dependency>
-  		<groupId>junit</groupId>
-  		<artifactId>junit</artifactId>
-  		<version>3.8.1</version>
-  	</dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.7</version>
+      <scope>test</scope>
+    </dependency>
   	<dependency>
   		<groupId>org.mortbay.jetty</groupId>
   		<artifactId>jetty</artifactId>
--- a/src/alice/jungle/core/NetworkDefaultJungle.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-package alice.jungle.core;
-
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-
-import alice.jungle.transaction.NetworkDefaultJungleTree;
-
-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.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
-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.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 fj.data.List;
-
-public class NetworkDefaultJungle implements Jungle {
-	private Journal journal;
-	private ConcurrentHashMap<String,JungleTree> trees;
-	private String uuid;
-	private TreeEditor editor;
-	
-	public NetworkDefaultJungle(Journal _journal,String _uuid,TreeEditor _editor)
-	{
-		journal = _journal;
-		trees = new ConcurrentHashMap<String,JungleTree>();
-		uuid = _uuid;
-		editor = _editor;
-	}
-
-	@Override
-	public JungleTree getTreeByName(String _name)
-	{
-		return trees.get(_name);
-	}
-
-	@Override
-	public JungleTree createNewTree(final String _name)
-	{
-		ChangeList list = new ChangeList(){
-			@Override
-			public Iterator<TreeOperation> iterator() {
-				List<TreeOperation> nil = List.nil();
-				return nil.iterator();
-			}
-			@Override
-			public String uuid() {
-				return uuid;
-			}
-			@Override
-			public String getTreeName() {
-				return _name;
-			}
-		};
-		DefaultTreeNode root = new DefaultTreeNode();
-		ChangeSet set = new DefaultChangeSet(root.getAsNode(),null,list,uuid,_name, 0);
-		DefaultTreeContext<DefaultTreeNode> tc = new DefaultTreeContext<DefaultTreeNode>(root,set);
-		JungleTree newTree = new NetworkDefaultJungleTree<DefaultTreeNode>(_name, tc,uuid,journal.getWriter(),editor);
-		if(trees.putIfAbsent(_name,newTree) != null){
-			return null;
-		}
-		return newTree;
-	}
-}
--- a/src/alice/jungle/datasegment/HashSetDataSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-package alice.jungle.datasegment;
-
-import java.util.HashSet;
-
-import org.msgpack.annotation.Message;
-
-@Message
-public class HashSetDataSegment {
-	public HashSet<String> hash = new HashSet<String>();			
-	public HashSetDataSegment() {}
-}
--- a/src/alice/jungle/datasegment/store/container/DefaultNodeOperationContainer.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-package alice.jungle.datasegment.store.container;
-
-import java.io.IOException;
-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.operations.AppendChildAtOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
-
-import org.msgpack.MessagePack;
-import org.msgpack.annotation.Message;
-import org.msgpack.template.OrdinalEnumTemplate;
-import org.msgpack.type.Value;
-
-import alice.codesegment.SingletonMessage;
-
-@Message
-public class DefaultNodeOperationContainer {
-
-	public int pos;
-	public String key;
-	public Value value;
-	public Value commandValue;
-	
-	public static void main(String[] args) throws IOException {
-		String key = "hoge";
-		ByteBuffer b = ByteBuffer.wrap("messagepack value".getBytes());
-		PutAttributeOperation op = new PutAttributeOperation(key, b);
-		DefaultNodeOperationContainer container = new DefaultNodeOperationContainer();
-		container.unconvert(op);
-		NodeOperation convertedOp = container.convert(); 
-		System.out.println("pos : "+convertedOp.getPosition());
-		System.out.println("Command : "+convertedOp.getCommand());
-		System.out.println("key : "+convertedOp.getKey());
-		System.out.println("value : "+new String(convertedOp.getValue().array()));
-		
-	}
-	
-	public DefaultNodeOperationContainer() {
-		
-	}
-
-	public void unconvert(NodeOperation op) throws IOException {
-//		MessagePack msgpack = new MessagePack();
-		MessagePack msgpack = SingletonMessage.getInstance();
-		pos = op.getPosition();
-		key = op.getKey();
-		value = null;
-		if (op.getValue() != null) {
-			ByteBuffer b = op.getValue();
-			byte[] bytes = b.array();
-			Value v = msgpack.unconvert(bytes);
-			value = v;
-		}
-		Command c = op.getCommand();
-		msgpack.register(Command.class, new OrdinalEnumTemplate(Command.class));
-		Value cValue = msgpack.unconvert(c);
-		commandValue = cValue;
-	}
-	
-	public NodeOperation convert() throws IOException{
-//		MessagePack msgpack = new MessagePack();
-		MessagePack msgpack = SingletonMessage.getInstance();
-		msgpack.register(Command.class, new OrdinalEnumTemplate(Command.class));
-		Command c = msgpack.convert(commandValue, Command.class);
-		ByteBuffer b = null;
-		if (value != null) {
-			b = ByteBuffer.wrap(msgpack.convert(value, byte[].class));
-		}
-		if (c == Command.PUT_ATTRIBUTE) {
-			return new PutAttributeOperation(key, b);
-		} else if (c == Command.APPEND_CHILD) {
-			return new AppendChildAtOperation(pos);
-		} else if (c == Command.DELETE_CHILD) {
-			return new DeleteChildAtOperation(pos);
-		} else if (c == Command.DELETE_ATTRIBUTE){
-			return new DeleteAttributeOperation(key);
-		}
-		return null;
-	}
-	
-}
--- a/src/alice/jungle/datasegment/store/container/DefaultNodePathContainer.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-package alice.jungle.datasegment.store.container;
-
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-
-import org.msgpack.MessagePack;
-import org.msgpack.annotation.Message;
-import org.msgpack.template.IntegerTemplate;
-import org.msgpack.template.ListTemplate;
-import org.msgpack.type.Value;
-
-@Message
-public class DefaultNodePathContainer {
-
-	public Value pathValue;
-	
-	public static void main(String[] args) throws IOException {
-		DefaultNodePath p = new DefaultNodePath();
-		p = p.add(1).add(2).add(3);
-		DefaultNodePathContainer pathContainer = new DefaultNodePathContainer();
-		pathContainer.unconvert(p);
-		NodePath convertedPath = pathContainer.convert();
-		for (int i : convertedPath) {
-			System.out.println(i);
-		}
-	}
-	
-	public DefaultNodePathContainer() {
-		
-	}
-	
-	public void unconvert(NodePath path) throws IOException {
-		MessagePack msgpack = new MessagePack();
-		List<Integer> list = new LinkedList<Integer>();
-		for(Integer i : path) {
-			list.add(i);
-		}
-		/* Remove first Element(-1). */
-		list.remove(0);
-		Value v = msgpack.unconvert(list);
-		pathValue = v;
-	}
-	
-	public DefaultNodePath convert() throws IOException {
-		MessagePack msgpack = new MessagePack();
-		msgpack.register(List.class, new ListTemplate(IntegerTemplate.getInstance()));
-		List<Integer> convertedList = (List<Integer>)msgpack.convert(pathValue, List.class);
-		DefaultNodePath path = new DefaultNodePath();
-		for (int i: convertedList) {
-			path = path.add(i);
-		}
-		return path;
-	}
-}
--- a/src/alice/jungle/datasegment/store/container/DefaultTreeOperationContainer.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-package alice.jungle.datasegment.store.container;
-
-import java.io.IOException;
-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.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-import org.msgpack.MessagePack;
-import org.msgpack.annotation.Message;
-import org.msgpack.type.Value;
-
-import alice.codesegment.SingletonMessage;
-
-@Message
-public class DefaultTreeOperationContainer {
-
-	Value pathValue;
-	Value opValue;
-
-	public static void main(String[] args) throws IOException {
-		String key = "hoge";
-		ByteBuffer b = ByteBuffer.wrap("messagepack value".getBytes());
-		PutAttributeOperation op = new PutAttributeOperation(key, b);
-
-		DefaultNodePath p = new DefaultNodePath();
-		p = p.add(1).add(2).add(3);
-		DefaultTreeOperation treeOp = new DefaultTreeOperation(p, op);
-		
-		DefaultTreeOperationContainer treeOperationContainer = new DefaultTreeOperationContainer();
-		treeOperationContainer.unconvert(treeOp);
-
-		TreeOperation treeOperation = treeOperationContainer.convert();
-		NodePath nodePath = treeOperation.getNodePath();
-		NodeOperation nodeOp = treeOperation.getNodeOperation();
-		Command c = nodeOp.getCommand();
-		String str = "";
-		switch (c) {
-		case PUT_ATTRIBUTE:
-			String k = nodeOp.getKey();
-			ByteBuffer value = nodeOp.getValue();
-			if (value.limit() < 100) {
-				str = String.format("key:%s,value:%s", k,
-						new String(value.array()));
-			} else {
-				str = String.format("key:%s,value:%d", k, value.limit());
-			}
-			break;
-		case DELETE_ATTRIBUTE:
-			str = String.format("key:%s", nodeOp.getKey());
-			break;
-		case APPEND_CHILD:
-			str = String.format("pos:%d", nodeOp.getPosition());
-			break;
-		case DELETE_CHILD:
-			str = String.format("pos:%d", nodeOp.getPosition());
-			break;
-		}
-		System.out.println(String.format("[%s:%s:%s]", c, nodePath, str));
-		for (int i: nodePath ) {
-			System.out.println(i);
-		}
-	}
-
-	public DefaultTreeOperationContainer() {
-
-	}
-	
-	public void unconvert(DefaultTreeOperation _op) throws IOException {
-		NodeOperation nodeOp = _op.getNodeOperation();
-		NodePath nodePath = _op.getNodePath();
-		DefaultNodeOperationContainer opContainer = new DefaultNodeOperationContainer();
-		opContainer.unconvert(nodeOp);
-		DefaultNodePathContainer pathContainer = new DefaultNodePathContainer();
-		pathContainer.unconvert(nodePath);
-		unconvert(opContainer, pathContainer);
-	}
-
-	public void unconvert(DefaultNodeOperationContainer _op,
-			DefaultNodePathContainer _path) throws IOException {
-//		MessagePack msgpack = new MessagePack();
-		MessagePack msgpack = SingletonMessage.getInstance();
-		pathValue = msgpack.unconvert(_path);
-		opValue = msgpack.unconvert(_op);
-	}
-
-	public TreeOperation convert() throws IOException {
-//		MessagePack msgpack = new MessagePack();
-		MessagePack msgpack = SingletonMessage.getInstance();
-		DefaultNodePathContainer pathContainer = msgpack.convert(pathValue, DefaultNodePathContainer.class);
-		DefaultNodeOperationContainer opContainer = msgpack.convert(opValue, DefaultNodeOperationContainer.class);
-		return new DefaultTreeOperation(pathContainer.convert(), opContainer.convert());
-	}
-
-}
--- a/src/alice/jungle/datasegment/store/container/DefaultTreeOperationLogContainer.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-package alice.jungle.datasegment.store.container;
-
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-import org.msgpack.MessagePack;
-import org.msgpack.annotation.Message;
-import org.msgpack.template.ListTemplate;
-import org.msgpack.template.ValueTemplate;
-import org.msgpack.type.Value;
-
-import alice.codesegment.SingletonMessage;
-
-@Message
-public class DefaultTreeOperationLogContainer {
-
-	Value logValue;
-	String treeName;
-	String uuid;
-	String updaterName;
-	String revision;
-	long timestamp;
-
-	public DefaultTreeOperationLogContainer() {
-		logValue = null;
-		treeName = "";
-		uuid = "";
-		updaterName = "";
-		revision = "";
-		timestamp = Long.MAX_VALUE;
-	}
-	
-	public void setTreeName(String _treeName) {
-		treeName = _treeName;
-	}
-	
-	public String getTreeName() {
-		return treeName;
-	}
-	
-	public void setUUID(String _uuid) {
-		uuid = _uuid;
-	}
-	
-	public String getUUID() {
-		return uuid;
-	}
-
-	public void setUpdaterName(String _updaterName) {
-		updaterName = _updaterName;
-	}
-	
-	public String getServerName() {
-		return updaterName;
-	}
-	
-	public void setRevision(String _revision) {
-		revision = _revision;
-	}
-	
-	public String getRevision() {
-		return revision;
-	}
-
-	public void setTimeStamp(long t) {
-		timestamp = t;
-	}
-	
-	public long getTimeStamp() {
-		return timestamp;
-	}
-	
-	public void unconvert(Iterable<TreeOperation> _log) throws IOException {
-		MessagePack msgpack = SingletonMessage.getInstance();
-		List<Value> list = new LinkedList<Value>();
-		for(TreeOperation op : _log) {
-			NodeOperation nOp = op.getNodeOperation();
-			NodePath nodePath = op.getNodePath();
-			DefaultTreeOperation treeOp = new DefaultTreeOperation(nodePath, nOp);
-			DefaultTreeOperationContainer container = new DefaultTreeOperationContainer();
-			container.unconvert(treeOp);
-			Value v = msgpack.unconvert(container);
-			list.add(v);
-		}
-		Value listValue = msgpack.unconvert(list);
-		logValue = listValue;
-	}
-	
-	public DefaultTreeOperationLog convert() throws IOException {
-		MessagePack msgpack = SingletonMessage.getInstance();
-		msgpack.register(List.class, new ListTemplate(ValueTemplate.getInstance()));
-		List<Value> listValue = msgpack.convert(logValue, List.class);
-		List<TreeOperation> logList = new LinkedList<TreeOperation>();
-		for(Value v: listValue) {
-			DefaultTreeOperationContainer container = msgpack.convert(v, DefaultTreeOperationContainer.class);
-			logList.add(container.convert());
-		}
-		DefaultTreeOperationLog log = new DefaultTreeOperationLog(logList, logList.size());
-		return log;
-	}
-	
-	public String getHashLogString() {
-		return treeName + revision + updaterName;
-	}
-
-	
-}
--- a/src/alice/jungle/datasegment/store/transformer/NetworkAppendChildAt.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-package alice.jungle.datasegment.store.transformer;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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 org.msgpack.annotation.Message;
-
-
-/*
- * This code same AppendChildAt. 
- */
-
-@Message
-public class NetworkAppendChildAt implements NodeEditor {
-
-	private final int pos;
-	
-	public NetworkAppendChildAt(int _pos) {
-		pos = _pos;
-	}
-
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> edit(T _e) {
-		Either<Error,T> either = _e.getChildren().addNewChildAt(pos);
-		if(either.isA()){
-			// error
-			return either;
-		}
-		return DefaultEither.newB(either.b());
-	}
-
-}
--- a/src/alice/jungle/operations/NetworkAppendChildAtOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-package alice.jungle.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.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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;
-
-import alice.jungle.datasegment.store.transformer.NetworkAppendChildAt;
-
-
-@Message
-public class NetworkAppendChildAtOperation implements NodeOperation {
-	
-	/* MessagePack cannot handle final.*/
-	//	private final int pos;
-	private int pos;
-	
-	/* Position -1 represent root position. */
-	public NetworkAppendChildAtOperation() { pos = -2; }
-	
-	public NetworkAppendChildAtOperation(int _pos) {
-		pos = _pos;
-	}
-	
-	@Override
-	public Command getCommand() {
-		return Command.APPEND_CHILD;
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target) {
-		NetworkAppendChildAt appendChildAt = new NetworkAppendChildAt(pos);
-		return appendChildAt.edit(_target);
-	}
-
-	@Override
-	public int getPosition() {
-		return pos;
-	}
-
-	@Override
-	public String getKey() {
-		return null;
-	}
-
-	@Override
-	public ByteBuffer getValue() {
-		return null;
-	}
-}
--- a/src/alice/jungle/operations/NetworkDeleteAttributeOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-package alice.jungle.operations;
-
-import java.nio.ByteBuffer;
-
-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.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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
-{
-	/* MessagePack cannot handle final.*/
-	//private final String key;
-	private String key;
-	
-	public NetworkDeleteAttributeOperation()
-	{
-		key = null;
-	}
-	
-	public NetworkDeleteAttributeOperation(String _key)
-	{
-		key = _key;
-	}
-	
-	@Override
-	public Command getCommand()
-	{
-		return Command.DELETE_ATTRIBUTE;
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
-	{
-		DeleteAttribute deleteAttribute = new DeleteAttribute(key);
-		return deleteAttribute.edit(_target);
-	}
-
-	@Override
-	public int getPosition()
-	{
-		return -1;
-	}
-
-	@Override
-	public String getKey()
-	{
-		return key;
-	}
-
-	@Override
-	public ByteBuffer getValue()
-	{
-		return null;
-	}
-}
--- a/src/alice/jungle/operations/NetworkDeleteChildAtOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-package alice.jungle.operations;
-
-import java.nio.ByteBuffer;
-
-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.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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 NetworkDeleteChildAtOperation implements NodeOperation
-{
-	/* MessagePack cannot handle final.*/
-	//private final int pos;
-	private int pos;
-	
-	
-	/* Position -1 represent root position. */	
-	public NetworkDeleteChildAtOperation(int _pos)
-	{
-		pos = _pos;
-	}
-	
-	@Override
-	public Command getCommand()
-	{
-		return Command.DELETE_CHILD;
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
-	{
-		DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
-		return deleteChildAt.edit(_target);
-	}
-
-	@Override
-	public int getPosition()
-	{
-		return pos;
-	}
-
-	@Override
-	public String getKey()
-	{
-		return null;
-	}
-
-	@Override
-	public ByteBuffer getValue()
-	{
-		return null;
-	}
-}
--- a/src/alice/jungle/operations/NetworkNodeOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-package alice.jungle.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.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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 org.msgpack.annotation.Message;
-
-import alice.jungle.datasegment.store.transformer.NetworkAppendChildAt;
-
-@Message
-public class NetworkNodeOperation implements NodeOperation{
-
-	public int pos;
-	public String key;
-	public ByteBuffer value;
-	public int commandType;
-
-	public final static int NUM_PUT_ATTRIBUTE = 1;
-	public final static int NUM_APPEND_CHILD = 2;
-	public final static int NUM_DELETE_CHILD = 3;
-	public final static int NUM_DELETE_ATTRIBUTE = 4;
-	
-	public NetworkNodeOperation() {
-		pos = -2;
-		key = null;
-		value = null;
-		commandType = 0;
-	}
-	
-	public NetworkNodeOperation(NodeOperation _op) {
-		pos = _op.getPosition();
-		key = _op.getKey();
-		value = _op.getValue();
-		commandType = getCommandType(_op.getCommand());
-	}
-	
-	public static int getCommandType(Command c) {
-		switch(c) {
-		case PUT_ATTRIBUTE:
-			return NUM_PUT_ATTRIBUTE;
-		case APPEND_CHILD:
-			return NUM_APPEND_CHILD;
-		case DELETE_CHILD:
-			return NUM_DELETE_CHILD;
-		case DELETE_ATTRIBUTE:
-			return NUM_DELETE_ATTRIBUTE;
-		default:
-			break;
-		}
-		return 0;
-	}
-	
-	public static Command getCommand(int num) {
-		switch(num) {
-		case NUM_PUT_ATTRIBUTE:
-			return Command.PUT_ATTRIBUTE;
-		case NUM_APPEND_CHILD:
- 			return Command.APPEND_CHILD;
-		case NUM_DELETE_CHILD:
-			return Command.DELETE_CHILD;
-		case NUM_DELETE_ATTRIBUTE:
-			return Command.DELETE_ATTRIBUTE;
-		default:
-			break;
-		}
-		return null;
-	}
-	
-	public Command getCommand() {
-		return getCommand(commandType);
-	}
-
-	public int getPosition() {
-		return pos;
-	}
-	
-	public String getKey() {
-		return key;
-	}
-	
-	public ByteBuffer getValue() {
-		return value;
-	}
-
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target) {
-		switch(getCommand(commandType)) {
-		case PUT_ATTRIBUTE:
-			PutAttribute putAttribute = new PutAttribute(key,value);
-			return putAttribute.edit(_target);
-		case APPEND_CHILD:
-			NetworkAppendChildAt appendChildAt = new NetworkAppendChildAt(pos);
-			return appendChildAt.edit(_target);
-		case DELETE_CHILD:
-			DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
-			return deleteChildAt.edit(_target);
-		case DELETE_ATTRIBUTE:
-			DeleteAttribute deleteAttribute = new DeleteAttribute(key);
-			return deleteAttribute.edit(_target);
-		default:
-			break;
-		}
-		return null;
-	}
-
-}
--- a/src/alice/jungle/operations/NetworkNodePath.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-package alice.jungle.operations;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import org.msgpack.annotation.Message;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
-
-@Message
-public class NetworkNodePath implements NodePath
-{
-	LinkedList<Integer> path;
-	
-	public NetworkNodePath() {
-		path = new LinkedList<Integer>();
-		path.add(-1);
-	}
-	
-	public NetworkNodePath(NodePath _p) {
-		path = new LinkedList<Integer>();
-		for(Integer pos: _p) {
-			path.add(pos);
-		}
-	}
-	
-	private NetworkNodePath(LinkedList<Integer> _path) {
-		path = _path;
-	}
-	
-	@Override
-	public Iterator<Integer> iterator() {
-		return path.iterator();
-	}
-
-	@Override
-	public NetworkNodePath add(int _pos) {
-		LinkedList<Integer> newPath = copyPath();
-		newPath.add(_pos);
-		return new NetworkNodePath(newPath);
-	}
-
-	@Override
-	public Pair<Integer, NodePath> pop() {
-		LinkedList<Integer> cPath = copyPath();
-		int e = cPath.getFirst();
-		cPath.remove();
-		return new Pair<Integer, NodePath>(e, new NetworkNodePath(cPath));
-	}
-
-	@Override
-	public int size() {
-		return path.size();
-	}
-
-	private LinkedList<Integer> copyPath() {
-		LinkedList<Integer> newPath = new LinkedList<Integer>();
-		for (Integer i : path) {
-			newPath.add(i);
-		}
-		return newPath;
-	}
-	
-	@Override
-	public String toString() {
-		return path.toString();
-	}
-	
-}
--- a/src/alice/jungle/operations/NetworkPutAttributeOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-package alice.jungle.operations;
-
-import java.nio.ByteBuffer;
-
-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.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-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;
-@Message
-public class NetworkPutAttributeOperation  implements NodeOperation
-{
-	
-/*  MessagePack cannot handle final.
- *
- *	private final String key;
- *	private final ByteBuffer value;
- */
-	private String key;
-	private ByteBuffer value;
-	
-	public NetworkPutAttributeOperation()
-	{
-		key = null;
-		value = null;
-	}
-	
-	public NetworkPutAttributeOperation(String _key,ByteBuffer _value)
-	{
-		key = _key;
-		value = _value;
-	}
-	
-	@Override
-	public Command getCommand()
-	{
-		return Command.PUT_ATTRIBUTE;
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
-	{
-		PutAttribute putAttribute = new PutAttribute(key,value);
-		return putAttribute.edit(_target);
-	}
-
-	@Override
-	public int getPosition()
-	{
-		return -1;
-	}
-
-	@Override
-	public String getKey()
-	{
-		return key;
-	}
-
-	@Override
-	public ByteBuffer getValue()
-	{
-		return value;
-	}
-}
--- a/src/alice/jungle/operations/NetworkTreeOperation.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-package alice.jungle.operations;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-import org.msgpack.annotation.Message;
-
-@Message
-public class NetworkTreeOperation implements TreeOperation {
-
-	public NetworkNodePath path;
-	public NetworkNodeOperation operation;
-	
-	public NetworkTreeOperation() {
-		path = null;
-		operation = null;
-	}
-	
-	public NetworkTreeOperation(TreeOperation treeOp) {
-		path = new NetworkNodePath(treeOp.getNodePath());
-		operation = new NetworkNodeOperation(treeOp.getNodeOperation());
-	}
-	
-	public NetworkTreeOperation(NodePath _p, NodeOperation _op) {
-		path = new NetworkNodePath(_p);
-		operation = new NetworkNodeOperation(_op);
-	}
-
-	public NetworkTreeOperation(NetworkNodePath _p, NodeOperation _op) {
-		path = _p;
-		operation = new NetworkNodeOperation(_op);
-	}
-
-	public NetworkTreeOperation(NodePath _p, NetworkNodeOperation _op) {
-		path = new NetworkNodePath(_p);
-		operation = _op;
-	}
-
-	public NetworkTreeOperation(NetworkNodePath _p, NetworkNodeOperation _op) {
-		path = _p;
-		operation = _op;
-	}
-	
-	@Override
-	public NodePath getNodePath() {
-		return path;
-	}
-	
-	@Override
-	public NodeOperation getNodeOperation() {
-		Command c = operation.getCommand();
-		switch(c) {
-		case PUT_ATTRIBUTE:
-			return new PutAttributeOperation(operation.getKey(), operation.getValue());
-		case APPEND_CHILD:
-			return new AppendChildAtOperation(operation.getPosition());
-		case DELETE_CHILD:
-			return new DeleteChildAtOperation(operation.getPosition());
-		case DELETE_ATTRIBUTE:
-			return new DeleteAttributeOperation(operation.getKey());
-		default:
-			break;
-		}
-		return null;
-	}
-	
-}
--- a/src/alice/jungle/operations/NetworkTreeOperationLog.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,103 +0,0 @@
-package alice.jungle.operations;
-
-import java.util.Date;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import org.msgpack.annotation.Message;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-@Message
-public class NetworkTreeOperationLog implements TreeOperationLog
-{
-	public LinkedList<NetworkTreeOperation> list;
-	public int size;
-	String uuid;
-	String treeName;
-	long timestamp;
-	
-	public NetworkTreeOperationLog() {
-		list = new LinkedList<NetworkTreeOperation>();
-		size = 0;
-		treeName = "";
-		timestamp = new Date().getTime();
-	}
-
-	public NetworkTreeOperationLog(String _uuid, String _treeName, Iterable<TreeOperation> _list)
-	{
-		this(_uuid, _treeName, _list, new Date().getTime());
-	}
-	
-	public NetworkTreeOperationLog(String _uuid, String _treeName, Iterable<TreeOperation> _list, long _timestamp)
-	{
-		uuid = _uuid;
-		treeName = _treeName;
-		list = new LinkedList<NetworkTreeOperation>();
-		timestamp = _timestamp;
-		for(TreeOperation op: _list) {
-			NetworkTreeOperation nOp = new NetworkTreeOperation(op);
-			list.add(nOp);
-		}
-		size = list.size();
-	}
-
-	public NetworkTreeOperationLog(Iterable<TreeOperation> _list)
-	{
-		this("", "", _list);
-	}
-
-	
-	@Override
-	public Iterator<TreeOperation> iterator() {
-		LinkedList<TreeOperation> opList = new LinkedList<TreeOperation>();
-		for(NetworkTreeOperation op : list) {
-			opList.add(op);
-		}
-		return opList.iterator();
-	}
-
-	@Override
-	public NetworkTreeOperationLog add(NodePath _p, NodeOperation _op) 
-	{
-		NetworkTreeOperation op = new NetworkTreeOperation(_p, _op);
-		list.add(op);
-		return this;
-	}
-
-	@Override
-	public NetworkTreeOperationLog append(TreeOperationLog _log) 
-	{
-		for (TreeOperation o : _log) {
-			NetworkTreeOperation op = new NetworkTreeOperation(o);
-			list.add(op);
-		}
-		return this;
-	}
-
-	@Override
-	public int length() 
-	{
-		return size;
-	}
-	
-	public String getUUID() {
-		return uuid;
-	}
-	
-	public String getTreeName() {
-		return treeName;
-	}
-	
-	public long getTimeStamp() {
-		return timestamp;
-	}
-	
-	public void setTimeStamp(long _timestamp) {
-		timestamp = _timestamp;
-	}
-
-}
--- a/src/alice/jungle/persistence/AliceJournal.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-package alice.jungle.persistence;
-
-import java.nio.ByteBuffer;
-
-import alice.jungle.datasegment.store.container.DefaultNodeOperationContainer;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationContainer;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-public class AliceJournal implements Journal {
-	
-	private static final AliceChangeListWriter ALICE_WRITER = new AliceChangeListWriter();
-	private static final AliceChangeListReader ALICE_READER = new AliceChangeListReader();
-	@Override
-	public ChangeListReader getReader() {
-		return ALICE_READER;
-	}
-	@Override
-	public ChangeListWriter getWriter() {
-		return ALICE_WRITER;
-	}
-	
-	private static class AliceChangeListWriter implements ChangeListWriter
-	{
-		@Override
-		public Result write(ChangeList _operations)
-		{
-			/*
-			for(TreeOperation op : _operations){
-				NodePath p = op.getNodePath();
-				NodeOperation nodeOp = op.getNodeOperation();
-				Command c = nodeOp.getCommand();
-				String args = "";
-				switch(c){
-					case PUT_ATTRIBUTE:
-						String key = nodeOp.getKey();
-						ByteBuffer value = nodeOp.getValue();
-						if(value.limit() < 100){
-							args = String.format("key:%s,value:%s",key,new String(value.array()));
-						}else{
-							args = String.format("key:%s,value:%d",key,value.limit());
-						}
-						break;
-					case DELETE_ATTRIBUTE:
-						args = String.format("key:%s",nodeOp.getKey());
-						break;
-					case APPEND_CHILD:
-						args = String.format("pos:%d",nodeOp.getPosition());
-						break;
-					case DELETE_CHILD:
-						args = String.format("pos:%d",nodeOp.getPosition());
-						break;
-				}
-				System.out.println(String.format("[%s:%s:%s]",c,p,args));
-			}
-			*/
-			return Result.SUCCESS;
-		}
-	}
-	
-	private static class AliceChangeListReader implements ChangeListReader
-	{
-		@Override
-		public ChangeListReader newReader()
-		{
-			return this;
-		}
-
-		@Override
-		public ChangeList read()
-		{
-			return null;
-		}
-	}
-	
-	
-}
--- a/src/alice/jungle/persistence/JungleUpdater.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-package alice.jungle.persistence;
-
-import java.nio.ByteBuffer;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class JungleUpdater {
-
-	public JungleUpdater() {
-		
-	}
-	
-	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
-		JungleTreeEditor editor = _editor;
-		Either<Error, JungleTreeEditor> either = null;
-		for (TreeOperation op : _log) { 
-			either = _edit(editor, op);
-			if(either.isA()) {
-				return either;
-			}
-			editor = either.b();
-		}
-		return either;
-	}
-	
-	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
-			TreeOperation op) {
-		DefaultNodePath path = new DefaultNodePath();
-		NodeOperation nodeOp = op.getNodeOperation();
-		int pos = nodeOp.getPosition();
-		Command c = nodeOp.getCommand();
-		String key = "";
-		switch (c) {
-		case PUT_ATTRIBUTE:
-			key = nodeOp.getKey();
-			ByteBuffer value = nodeOp.getValue();
-			return editor.putAttribute(path, key, value);
-		case DELETE_ATTRIBUTE:
-			key = nodeOp.getKey();
-			return editor.deleteAttribute(path, key);
-		case APPEND_CHILD:
-			return editor.addNewChildAt(path, pos);
-		case DELETE_CHILD:
-			return editor.deleteChildAt(path, 0);
-		}
-		return null;
-	}	
-	
-	
-	
-}
--- a/src/alice/jungle/persistence/PersistentChangeList.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-package alice.jungle.persistence;
-
-import java.util.Iterator;
-
-import alice.jungle.operations.NetworkTreeOperationLog;
-
-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.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-
-public class PersistentChangeList implements ChangeList {
-
-	public NetworkTreeOperationLog log;
-	public String treeName;
-	public String uuid;
-
-	public PersistentChangeList(String _uuid, String _treeName, TreeOperationLog _log) {
-		uuid = _uuid;
-		treeName = _treeName;
-		log = new NetworkTreeOperationLog(_log);
-	}
-	
-	public PersistentChangeList(NetworkTreeOperationLog _log) {
-		log = _log;
-		treeName = _log.getTreeName();
-		uuid = _log.getUUID();
-	}
-	
-	public PersistentChangeList(ChangeSet cs) {
-		treeName = cs.getTreeName();
-		uuid = cs.uuid();
-		log = new NetworkTreeOperationLog(cs.getChangeList());
-	}
-	
-	@Override
-	public Iterator<TreeOperation> iterator() {
-		return log.iterator();
-	}
-
-	public NetworkTreeOperationLog getTreeOperationLog() {
-		return log;
-	}
-	
-	public String getTreeName() {
-		return treeName;
-	}
-	
-	public String uuid() {
-		return uuid;
-	}
-
-	
-}
--- a/src/alice/jungle/persistence/PersistentChangeListReader.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-package alice.jungle.persistence;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.msgpack.MessagePack;
-
-import alice.jungle.operations.NetworkTreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
-
-public class PersistentChangeListReader  implements ChangeListReader {
-	
-	private static InputStream in;
-	MessagePack msgpack = PersistentJournal.getMessagePack();
-
-	public PersistentChangeListReader() {
-		in = null;
-	}
-	
-	public PersistentChangeListReader(InputStream _in) {
-		in = _in;
-	}
- 	
-	@Override
-	public ChangeListReader newReader()
-	{
-		return new PersistentChangeListReader();
-	}
-	
-	@Override 
-	public ChangeList read()
-	{
-		try {
-			final NetworkTreeOperationLog readLog = msgpack.read(in, NetworkTreeOperationLog.class);
-			PersistentChangeList cl = new PersistentChangeList(readLog); 
-			return cl;
-		} catch (EOFException e){
-
-		} catch (IOException e) {
-		}
-		return null;
-	}
-}
--- a/src/alice/jungle/persistence/PersistentChangeListWriter.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-package alice.jungle.persistence;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.msgpack.MessagePack;
-
-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 alice.jungle.operations.NetworkTreeOperationLog;
-
-public class PersistentChangeListWriter implements ChangeListWriter {
-	
-	MessagePack msgpack = PersistentJournal.getMessagePack();
-	OutputStream out;
-	
-	public PersistentChangeListWriter(OutputStream _out) {
-		out = _out;
-	}
-	
-	@Override
-	public Result write(ChangeList cs)
-	{
-		NetworkTreeOperationLog log = new NetworkTreeOperationLog(cs.uuid(), cs.getTreeName(), cs);
-		try {
-			msgpack.write(out, log);
-			out.flush();
-			return Result.SUCCESS;
-		} catch (IOException e) {
-		}
-		return null;
-	}
-}
--- a/src/alice/jungle/persistence/PersistentChangeSet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-package alice.jungle.persistence;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-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.operations.TreeOperation;
-
-public class PersistentChangeSet implements ChangeSet 
-{
-	private final Node root;
-	private final ChangeSet previous;
-	private final ChangeList changeList;
-	private final String uuid;
-	private final long revision;
-	private final String treeName;
-	
-	public PersistentChangeSet(Node _node,ChangeSet _prev,ChangeList _log,String _uuid, String _treeName, long _revision)
-	{
-		root = _node;
-		previous = _prev;
-		changeList = _log;
-		uuid = _uuid;
-		revision = _revision;
-		treeName = _treeName;
-	}
-	
-	@Override
-	public Node getRoot()
-	{
-		return root;
-	}
-
-	@Override
-	public ChangeSet prev()
-	{
-		return previous;
-	}
-
-	@Override
-	public ChangeList getChangeList()
-	{
-		return changeList;
-	}
-
-	@Override
-	public String uuid()
-	{
-		return uuid;
-	}
-
-	@Override
-	public long revision()
-	{
-		return revision;
-	}
-
-	@Override
-	public Iterable<TreeOperation> getOperations()
-	{
-		return changeList;
-	}
-	
-	public String getTreeName() {
-		return treeName;
-	}
-
-}
--- a/src/alice/jungle/persistence/PersistentJournal.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-package alice.jungle.persistence;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.msgpack.MessagePack;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
-
-public class PersistentJournal implements Journal {
-	
-	private static ChangeListWriter WRITER;
-	private static ChangeListReader READER;
-	private static MessagePack msgpack;
-	private static OutputStream out = null;
-	private static InputStream in = null;
-	
-	public PersistentJournal() {
-		msgpack = new MessagePack();
-	}
-	
-	public PersistentJournal(File file) throws FileNotFoundException {
-		out = new FileOutputStream(file);
-		in = new FileInputStream(file);
-		WRITER = new PersistentChangeListWriter(out);
-		READER = new PersistentChangeListReader(in);
-     	msgpack = new MessagePack();		
-	}
-	
-	@Override
-	public ChangeListReader getReader() {
-		return READER;
-	}
-
-	@Override
-	public ChangeListWriter getWriter() {
-		return WRITER;
-	}
-	
-	public void setOutputFile(File file) throws FileNotFoundException {
-		out = new FileOutputStream(file);
-		WRITER = new PersistentChangeListWriter(out);
-	}
-	
-	public void setInputFile(File file) throws FileNotFoundException {
-		in = new FileInputStream(file);
-		READER = new PersistentChangeListReader(in);
-	}
-	
-	public void close() throws IOException {
-		out.close();
-		in.close();
-	}
-	
-	public void setOutputStream(OutputStream _out) {
-		out = _out;
-	}
-	
-	public OutputStream getOutputStream() {
-		return out;
-	}
-	
-	public void setInputStream(InputStream _in) {
-		in = _in;
-	}
-	
-	public InputStream getInputStream() {
-		return in;
-	}
-	
-	public static MessagePack getMessagePack() {
-		return msgpack;
-	}
-
-}
--- a/src/alice/jungle/persistence/PersistentJungle.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-package alice.jungle.persistence;
-
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-
-import fj.data.List;
-
-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.persistent.ChangeList;
-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.operations.TreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
-
-public class PersistentJungle implements Jungle {
-	private PersistentJournal journal;
-	private ConcurrentHashMap<String,JungleTree> trees;
-	final private String uuid;
-	private TreeEditor editor;
-
-	public PersistentJungle(PersistentJournal _journal,String _uuid,TreeEditor _editor)
-	{
-		journal = _journal;
-		trees = new ConcurrentHashMap<String,JungleTree>();
-		uuid = _uuid;
-		editor = _editor;
-	}
-
-	@Override
-	public JungleTree getTreeByName(String _name)
-	{
-		return trees.get(_name);
-	}
-
-	@Override
-	public JungleTree createNewTree(final String _name)
-	{
-		ChangeList list = new ChangeList(){
-			@Override
-			public Iterator<TreeOperation> iterator() {
-				List<TreeOperation> nil = List.nil();
-				return nil.iterator();
-			}
-			@Override
-			public String uuid() {
-				return uuid;
-			}
-			@Override
-			public String getTreeName() {
-				return _name;
-			}
-		};
-		DefaultTreeNode root = new DefaultTreeNode();
-		ChangeSet set = new PersistentChangeSet(root.getAsNode(),null,list,uuid,_name,0);
-		DefaultTreeContext<DefaultTreeNode> tc = new DefaultTreeContext<DefaultTreeNode>(root,set);
-		JungleTree newTree = new PersistentJungleTree<DefaultTreeNode>(_name, tc,uuid, journal.getWriter(),editor);
-		if(trees.putIfAbsent(_name,newTree) != null){
-			return null;
-		}
-		return newTree;
-	}
-
-}
--- a/src/alice/jungle/persistence/PersistentJungleTree.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-package alice.jungle.persistence;
-
-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.persistent.ChangeListWriter;
-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.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;
-
-public class PersistentJungleTree <T extends TreeNode<T>> implements JungleTree {
-	private final AtomicReservableReference<TreeContext<T>> repository;
-	private final String uuid;
-	private final String treeName;
-	private final ChangeListWriter writer;
-	private final TreeEditor editor;
-
-	public PersistentJungleTree(String _treeName, TreeContext<T> _tc,String _uuid, ChangeListWriter _writer,TreeEditor _editor)
-	{
-		treeName = _treeName;
-		repository = new AtomicReservableReference<TreeContext<T>>(_tc);
-		uuid = _uuid;
-		writer = _writer;
-		editor = _editor;
-	}
-
-	@Override
-	public JungleTreeEditor getTreeEditor()
-	{
-		TreeContext<T> tc = repository.get();
-		PersistentTransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer,tc,repository,uuid);
-		T root = tc.getTreeNode();
-		return new DefaultJungleTreeEditor<T>(root,txManager,editor);
-	}
-
-	@Override
-	public Node getRootNode()
-	{
-		TreeContext<T> tc = repository.get();
-		ChangeSet cs = tc.getChangeSet();
-		return cs.getRoot();
-	}
-
-	@Override
-	public JungleTreeEditor getLocalTreeEditor() {
-		return getTreeEditor();
-	}
-
-
-}
--- a/src/alice/jungle/persistence/PersistentTransactionManager.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-package alice.jungle.persistence;
-
-import java.util.Iterator;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-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.transaction.AtomicReservableReference;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class PersistentTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> { 
-	private final AtomicReservableReference<TreeContext<T>> repository;
-	private final TreeContext<T> tip;
-	private final ChangeListWriter writer;
-	private final String uuid;		
-	private final String treeName;	
-
-	public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip,
-			AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
-	{
-		repository = _repository;
-		tip = _tip;
-		writer = _writer;
-		uuid = _uuid;
-		treeName = _treeName;
-	}
-	
-	@Override
-	public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) {
-		ChangeSet cs = tip.getChangeSet();
-		long currentRevision = cs.revision();
-		long nextRevision = currentRevision + 1;
-		
-		PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log);
-		Node root = _newRoot.getAsNode();
-		PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision);
-		DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_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) {
-			return DefaultEither.newA((Error)new DefaultError());
-		}
-		reservation.confirm();
-		TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid);
-		return DefaultEither.newB(txManager);
-	}
-
-	@Override
-	public long getRevision() 
-	{
-		ChangeSet cs = tip.getChangeSet();
-		return cs.revision();
-	}
-
-	@Override
-	public String getUUID() {
-		return uuid;
-	}
-	
-	
-	
-}
--- a/src/alice/jungle/remote/RemoteConfig.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-package alice.jungle.remote;
-import alice.topology.node.TopologyNodeConfig;
-
-
-public class RemoteConfig  extends TopologyNodeConfig {
-	
-	public int bbsPort = 8080;
-	
-	public RemoteConfig(String[] args) {
-		super(args);
-		for (int i = 0; i< args.length; i++) {
-			if ("-bbsPort".equals(args[i])) {
-				bbsPort = Integer.parseInt(args[++i]);
-			} else if("-bp".equals(args[i])) {
-				bbsPort = Integer.parseInt(args[++i]);
-			}
-		}
-	}
-}
--- a/src/alice/jungle/transaction/NetworkDefaultJungleTree.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-package alice.jungle.transaction;
-
-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.persistent.ChangeListWriter;
-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.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
-
-public class NetworkDefaultJungleTree<T extends TreeNode<T>> implements JungleTree {
-	private final AtomicReservableReference<TreeContext<T>> repository;
-	private final String uuid;
-	private final String treeName;
-	private final ChangeListWriter writer;
-	private final TreeEditor editor;
-	
-	public NetworkDefaultJungleTree(String _treeName, TreeContext<T> _tc,String _uuid,ChangeListWriter _writer,TreeEditor _editor)
-	{
-		treeName = _treeName;
-		repository = new AtomicReservableReference<TreeContext<T>>(_tc);
-		uuid = _uuid;
-		writer = _writer;
-		editor = _editor;
-	}
-
-	@Override
-	public JungleTreeEditor getTreeEditor()
-	{
-		TreeContext<T> tc = repository.get();
-		NetworkTransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer,tc,repository,uuid);
-		T root = tc.getTreeNode();
-		return new NetworkDefaultJungleTreeEditor<T>(treeName, root,txManager,editor);
-	}
-	
-	@Override
-	public JungleTreeEditor getLocalTreeEditor()
-	{
-		TreeContext<T> tc = repository.get();
-		NetworkTransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer,tc,repository,uuid);
-		T root = tc.getTreeNode();
-		return NetworkDefaultJungleTreeEditor.NewLocalJungleTreeEditor(treeName,root,txManager, editor);
-	}
-	
-	@Override
-	public Node getRootNode()
-	{
-		TreeContext<T> tc = repository.get();
-		ChangeSet cs = tc.getChangeSet();
-		return cs.getRoot();
-	}
-
-
-}
--- a/src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-package alice.jungle.transaction;
-
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import alice.jungle.operations.NetworkTreeOperationLog;
-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.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.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;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
-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.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.IterableConverter;
-import jungle.app.bbs.codesegment.NullCodeSegment;
-
-public class NetworkDefaultJungleTreeEditor<T extends TreeNode<T>> implements JungleTreeEditor {
-
-	private final TransactionManager<T> txManager;
-	private final T root;
-	private final TreeEditor editor;
-	private final String treeName;
-	private final TreeOperationLog log;
-	private boolean exportLog;
-
-	public NetworkDefaultJungleTreeEditor(String _treeName, T _root,TransactionManager<T> _txManager,TreeEditor _editor)
-	{
-		this(_treeName, _root,_txManager,_editor,new DefaultTreeOperationLog());
-	}
-	
-	public NetworkDefaultJungleTreeEditor(String _treeName, T _root,TransactionManager<T> _txManager,TreeEditor _editor, TreeOperationLog _log)
-	{
-		treeName = _treeName;
-		root = _root;
-		txManager = _txManager;
-		editor = _editor;
-		log = _log;
-		exportLog = true;
-	}
-	
-	public static <T1 extends TreeNode<T1>> NetworkDefaultJungleTreeEditor<T1> NewLocalJungleTreeEditor(String _treeName, T1 _root,TransactionManager<T1> _txManager,TreeEditor _editor) {
-		NetworkDefaultJungleTreeEditor<T1> treeEditor = new NetworkDefaultJungleTreeEditor<T1>(_treeName, _root,_txManager,_editor,new DefaultTreeOperationLog());
-		treeEditor.exportLog = false;
-		return treeEditor;
-	}
-
-	public static <T1 extends TreeNode<T1>> NetworkDefaultJungleTreeEditor<T1> NewLocalJungleTreeEditor(String _treeName, T1 _root,TransactionManager<T1> _txManager,TreeEditor _editor, TreeOperationLog _log) {
-		NetworkDefaultJungleTreeEditor<T1> treeEditor = new NetworkDefaultJungleTreeEditor<T1>(_treeName, _root,_txManager,_editor,_log);
-		treeEditor.exportLog = false;
-		return treeEditor;
-	}
-	
-	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
-	{
-		LoggingNodeHook hook = new LoggingNodeHook(_e);
-		Either<Error,T> either = editor.edit(root,_path,hook);
-		if(either.isA()){
-			return DefaultEither.newA(either.a());
-		}
-		
-		T newNode = either.b();
-		OperationLog newLog = hook.getLog();
-		
-		IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
-			@Override
-			public TreeOperation conv(NodeOperation _b){
-				return new DefaultTreeOperation(_path,_b);
-			}
-		};
-		
-		Iterable<TreeOperation> iterable = new IterableConverter<TreeOperation,NodeOperation>(newLog,converter);
-		DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog(iterable,newLog.length());
-		TreeOperationLog newTreeOpLog = log.append(treeOperationLog);
-		
-		JungleTreeEditor newEditor;
-		if(exportLog) {
-			newEditor = new NetworkDefaultJungleTreeEditor<T>(treeName, newNode,txManager,editor,newTreeOpLog);
-		} else {
-			newEditor = NetworkDefaultJungleTreeEditor.NewLocalJungleTreeEditor(treeName, newNode, txManager, editor, newTreeOpLog);
-		}
-		return DefaultEither.newB(newEditor);
-	}
-	
-	@Override
-	public Either<Error,JungleTreeEditor> addNewChildAt(NodePath _path, int _pos)
-	{
-		AppendChildAt appendChildAt = new AppendChildAt(_pos);
-		return _edit(_path,appendChildAt);
-	}
-
-	@Override
-	public Either<Error,JungleTreeEditor> deleteChildAt(NodePath _path, int _pos)
-	{
-		DeleteChildAt deleteChildAt = new DeleteChildAt(_pos);
-		return _edit(_path,deleteChildAt);
-	}
-
-	@Override
-	public Either<Error,JungleTreeEditor> putAttribute(NodePath _path,String _key,ByteBuffer _value)
-	{
-		PutAttribute putAttribute = new PutAttribute(_key,_value);
-		return _edit(_path,putAttribute);
-	}
-
-	@Override
-	public Either<Error,JungleTreeEditor> deleteAttribute(NodePath _path, String _key)
-	{
-		DeleteAttribute deleteAttribute = new DeleteAttribute(_key);
-		return _edit(_path,deleteAttribute);
-	}
-
-	@Override
-	public Either<Error,JungleTreeEditor> edit(NodePath _path,NodeEditor _editor)
-	{
-		return _edit(_path,_editor);
-	}
-
-	@Override
-	public Either<Error,JungleTreeEditor> success()
-	{
-		Either<Error,TransactionManager<T>> either = txManager.commit(root,log);
-		if(either.isA()){
-			return DefaultEither.newA(either.a());
-		}
-		if(exportLog) {
-			try {
-				putTreeOperationLog(log);
-			} catch (IOException e) {
-				return DefaultEither.newA(either.a());
-			}	
-		}
-
-		TransactionManager<T> newTxManager = either.b();
-		JungleTreeEditor newTreeEditor = new NetworkDefaultJungleTreeEditor<T>(treeName, root,newTxManager,editor);
-		
-		return DefaultEither.newB(newTreeEditor);
-	}
-
-	@Override
-	public String getID()
-	{
-		return txManager.getUUID();
-	}
-
-	@Override
-	public String getRevision()
-	{
-		return Long.toString(txManager.getRevision());
-	}
-
-	@Override
-	public Node getRoot()
-	{
-		return root.getAsNode();
-	}
-	
-	public String getTreeName() {
-		return treeName;
-	}
-	
-	public TreeOperationLog getTreeOperationLog() {
-		return log;
-	}
-
-	public void putTreeOperationLog(Iterable<TreeOperation> newLog) throws IOException {
-		String uuid = getID();
-		String treeName = getTreeName();
-		String updaterName = getID();
-		String revision = getRevision();
-		putDataSegment(uuid, treeName, updaterName, newLog, revision);
-	}
-	
-	public void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable<TreeOperation> newLog, String nextRevision) throws IOException {
-		NetworkTreeOperationLog netLog = new NetworkTreeOperationLog(_uuid, _treeName,newLog);
-		NullCodeSegment cs = new NullCodeSegment();
-		cs.ods.put("log", netLog);
-		cs.execute(); /* Do nothing CodeSegment */
-	}
-}
--- a/src/alice/jungle/transaction/NetworkTransactionManager.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-package alice.jungle.transaction;
-
-import java.util.Iterator;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-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;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
-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.TransactionManager;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class NetworkTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> 
-{
-
-	private final AtomicReservableReference<TreeContext<T>> repository;
-	private final TreeContext<T> tip;
-	private final ChangeListWriter writer;
-	private final String uuid;	
-	private final String treeName;	
-	
-	public NetworkTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip,
-			AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
-	{
-		repository = _repository;
-		tip = _tip;
-		writer = _writer;
-		uuid = _uuid;
-		treeName = _treeName;
-	}
-	
-	@Override
-	public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) {
-		ChangeSet cs = tip.getChangeSet();
-		long currentRevision = cs.revision();
-		long nextRevision = currentRevision + 1;
-		
-		ChangeList list = new ChangeList() {
-			@Override
-			public Iterator<TreeOperation> iterator(){
-				return _log.iterator();
-			}
-			@Override
-			public String uuid() {
-				return uuid;
-			}
-			@Override
-			public String getTreeName() {
-				return treeName;
-			}
-		};
-		
-		Node root = _newRoot.getAsNode();
-		DefaultChangeSet newCs = new DefaultChangeSet(root, cs, list, uuid, treeName, nextRevision);
-		DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_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) {
-			return DefaultEither.newA((Error)new DefaultError());
-		}
-		reservation.confirm();
-		TransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer, newContext, repository, uuid);
-		return DefaultEither.newB(txManager);
-	}
-
-	@Override
-	public long getRevision() 
-	{
-		ChangeSet cs = tip.getChangeSet();
-		return cs.revision();
-	}
-
-	@Override
-	public String getUUID() {
-		return uuid;
-	}
-
-}
--- a/src/jungle/app/bbs/BoardMessage.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-package jungle.app.bbs;
-
-public interface BoardMessage
-{
-	public String getUUID();
-	public String getAuthor();
-	public String getMessage();
-}
--- a/src/jungle/app/bbs/BulletinBoard.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-package jungle.app.bbs;
-
-public interface BulletinBoard
-{
-	public Iterable<String> getBoards();
-	public void createBoards(String _name,String _author,String _initMessage,String _editKey);
-	public void createBoardMessage(String _board,String _author,String _message,String _editKey);
-	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey);
-	
-	public Iterable<BoardMessage> getMessages(String _boardName);
-}
--- a/src/jungle/app/bbs/CassandraBulletinBoard.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-import org.apache.cassandra.locator.SimpleStrategy;
-
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.serializers.UUIDSerializer;
-import me.prettyprint.cassandra.service.CassandraHost;
-import me.prettyprint.cassandra.service.template.SuperCfResult;
-import me.prettyprint.cassandra.service.template.SuperCfUpdater;
-import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
-import me.prettyprint.cassandra.utils.TimeUUIDUtils;
-import me.prettyprint.hector.api.Cluster;
-import me.prettyprint.hector.api.Keyspace;
-import me.prettyprint.hector.api.beans.HSuperColumn;
-import me.prettyprint.hector.api.beans.OrderedSuperRows;
-import me.prettyprint.hector.api.beans.SuperRow;
-import me.prettyprint.hector.api.beans.SuperSlice;
-import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
-import me.prettyprint.hector.api.ddl.ColumnType;
-import me.prettyprint.hector.api.ddl.ComparatorType;
-import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
-import me.prettyprint.hector.api.query.SuperSliceQuery;
-
-public class CassandraBulletinBoard implements BulletinBoard
-{
-	private final String address;
-	private final String clusterName;
-	private final Cluster cluster;
-	private final String keyspace;
-	
-	private static final String COLUMN_FAMILY_BOARD = "boards";
-	
-	public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName)
-	{
-		address = _address;
-		clusterName = _clusterName;
-		keyspace = _keyspaceName;
-		cluster = HFactory.getOrCreateCluster(clusterName,address);
-		
-		initialize();
-	}
-	
-	private void initialize()
-	{
-		if(cluster.describeKeyspace(keyspace) == null){
-			KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace,
-					SimpleStrategy.class.getName(),1,Collections.<ColumnFamilyDefinition> emptyList());
-			cluster.addKeyspace(keyspaceDefinition,false);
-			ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE);
-			columnFamilyDefinition.setColumnType(ColumnType.SUPER);
-			cluster.addColumnFamily(columnFamilyDefinition);
-		}
-	}
-	
-	public Iterable<String> getBoards()
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
-		RangeSuperSlicesQuery<String,UUID,String,String> query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
-				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
-		query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0);
-		
-		QueryResult<OrderedSuperRows<String,UUID,String,String>> result = query.execute();
-		OrderedSuperRows<String,UUID,String,String> rows = result.get();
-		List<SuperRow<String,UUID,String,String>> list = rows.getList();
-		
-		IterableConverter.Converter<String,SuperRow<String,UUID,String,String>> converter
-			= new IterableConverter.Converter<String, SuperRow<String,UUID,String,String>>(){
-				public String conv(SuperRow<String, UUID, String, String> _b) {
-					return _b.getKey();
-				}
-			};
-		
-		return new IterableConverter<String,SuperRow<String,UUID,String,String>>(list,converter);
-	}
-	
-	private static final String COLUMN_MESSAGE_AUTHOR = "author";
-	private static final String COLUMN_MESSAGE_BODY = "message";
-	private static final String COLUMN_MESSAGE_EDIT_KEY = "edit";
-
-	public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		
-		SuperCfUpdater<String,UUID,String> updater = template.createUpdater(_name,_time);
-		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
-		updater.setString(COLUMN_MESSAGE_BODY,_message);
-		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
-		
-		template.update(updater);
-	}
-	
-	public void createBoards(String _name,String _author,String _initMessage,String _editKey)
-	{
-		UUID time = TimeUUIDUtils.getTimeUUID(0);
-		createBoardMessage(time,_name,_author,_initMessage,_editKey);
-	}
-
-	public Iterable<BoardMessage> getMessages(String _boardName)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
-		SuperSliceQuery<String, UUID, String, String> query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
-		
-		UUID start = TimeUUIDUtils.getTimeUUID(0);
-		query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100);
-		
-		QueryResult<SuperSlice<UUID, String, String>> result = query.execute();
-		SuperSlice<UUID,String,String> ss = result.get();
-		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
-		
-		IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>> converter =
-				new IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>>(){
-					public BoardMessage conv(HSuperColumn<UUID, String, String> _b){
-						UUID uuid = _b.getName();
-						String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue();
-						String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue();
-						BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString());
-						return bm;
-					}
-				};
-		
-		
-		return new IterableConverter<BoardMessage,HSuperColumn<UUID,String,String>>(list,converter);
-	}
-	
-	private static class BoardMessageImpl implements BoardMessage
-	{
-		private final String author;
-		private final String message;
-		private final String uuid;
-		
-		public BoardMessageImpl(String _author,String _message,String _uuid)
-		{
-			author = _author;
-			message = _message;
-			uuid = _uuid;
-		}
-
-		public String getAuthor()
-		{
-			return author;
-		}
-
-		public String getMessage()
-		{
-			return message;
-		}
-
-		public String getUUID()
-		{
-			return uuid;
-		}
-	}
-
-	public void createBoardMessage(String _board, String _author, String _message,String _editKey)
-	{
-		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
-		createBoardMessage(time,_board,_author,_message,_editKey);
-	}
-
-	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
-		UUID time = UUID.fromString(_uuid);
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		
-		SuperCfResult<String,UUID,String> result = template.querySuperColumn(_board,time);
-		String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY);
-		if(!editKey.equals(editKey)){
-			return;
-		}
-		
-		SuperCfUpdater<String, UUID, String> updater = template.createUpdater(_board,time);
-		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
-		updater.setString(COLUMN_MESSAGE_BODY,_message);
-		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
-		
-		template.update(updater);
-	}
-
-}
--- a/src/jungle/app/bbs/CreateBoardMessageServlet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class CreateBoardMessageServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_MESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CreateBoardMessageServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-	
-	@Override
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		
-		try{
-			bbs.createBoardMessage(boardName,author,msg,key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/jungle/app/bbs/CreateBoardServlet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class CreateBoardServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_INITMESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CreateBoardServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		
-		try{
-			bbs.createBoards(boardName,author,msg,key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/jungle/app/bbs/DistributeApp.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-package jungle.app.bbs;
-
-
-import jungle.app.bbs.codesegment.StartBBSCodeSegment;
-
-
-import alice.jungle.remote.RemoteConfig;
-import alice.topology.node.TopologyNode;
-
-
-public class DistributeApp 
-{
-    public static void main( String[] args ) throws Exception
-    {
-   		RemoteConfig conf = new RemoteConfig(args);
-   		new TopologyNode(conf, new StartBBSCodeSegment(conf.bbsPort));
-    }
-}
--- a/src/jungle/app/bbs/EditMessageServlet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class EditMessageServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_MSGID = "uuid";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_MESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public EditMessageServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-	
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String bname = _req.getParameter(PARAM_BOARD_NAME);
-		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
-		
-		
-		try{
-			PrintWriter pw = _res.getWriter();
-			pw.write("<html><body><h1>edit message</h1>");
-			pw.write("<form method='POST'\n");
-			pw.write("<p>Author : <input type='text' name='author'/>" +
-					"<input type='hidden' name='key' value='"+uuid+"'/>" +
-					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
-			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-			pw.write("<p><input type='submit' value='submit'/></p>\n");
-			pw.write("</body></html>");
-			pw.flush();
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
-		
-		try{
-			bbs.editMessage(boardName, uuid, author, msg, key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-			pw.flush();
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/jungle/app/bbs/HectorSample.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.List;
-import java.util.UUID;
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.serializers.UUIDSerializer;
-import me.prettyprint.cassandra.service.template.SuperCfUpdater;
-import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
-import me.prettyprint.cassandra.utils.TimeUUIDUtils;
-import me.prettyprint.hector.api.*;
-import me.prettyprint.hector.api.beans.HColumn;
-import me.prettyprint.hector.api.beans.HSuperColumn;
-import me.prettyprint.hector.api.beans.OrderedSuperRows;
-import me.prettyprint.hector.api.beans.SuperRow;
-import me.prettyprint.hector.api.beans.SuperSlice;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
-import me.prettyprint.hector.api.query.SuperSliceQuery;
-
-public class HectorSample
-{
-	public static void main(String _args[])
-	{
-		Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160");
-		
-		Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster);
-		/*
-		ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE);
-		newCF.setColumnType(ColumnType.SUPER);
-		myCluster.addColumnFamily(newCF);
-		*/
-		
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,"boards",StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
-		SuperCfUpdater<String,UUID,String> updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0));
-		updater.setString("name","peter");
-		updater.setString("message",time.toString());
-		
-		template.update(updater);
-		
-		UUID start = TimeUUIDUtils.getTimeUUID(0);
-		
-		SuperSliceQuery<String, UUID, String, String> sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
-		sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100);
-		
-		QueryResult<SuperSlice<UUID,String,String>> results = sq.execute();
-		
-		SuperSlice<UUID,String,String> ss = results.get();
-		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
-		for(HSuperColumn<UUID,String,String> sc : list){
-			HColumn<String,String> sub = sc.getSubColumnByName("name");
-			System.out.println(sub.getValue());
-			sub = sc.getSubColumnByName("message");
-			System.out.println(sub.getValue());
-		}
-		
-		RangeSuperSlicesQuery<String,UUID,String,String> rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
-				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
-		rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc");
-		
-		QueryResult<OrderedSuperRows<String,UUID,String,String>> rsqResult = rsq.execute();
-		OrderedSuperRows<String, UUID, String, String> rows = rsqResult.get();
-		for(SuperRow<String, UUID, String, String>  row : rows.getList()){
-			System.out.println(row.getKey());
-		}
-	}
-}
--- a/src/jungle/app/bbs/IterableConverter.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.Iterator;
-
-public class IterableConverter<A,B> implements Iterable<A>
-{
-	private final Iterable<B> iterable;
-	private final Converter<A,B> converter;
-	
-	public IterableConverter(Iterable<B> _iterable,Converter<A,B> _converter)
-	{
-		iterable = _iterable;
-		converter = _converter;
-	}
-	
-	public Iterator<A> iterator()
-	{
-		return new IteratorConverter<A,B>(iterable.iterator(),converter);
-	}
-	
-	private static final class IteratorConverter<A,B> implements Iterator<A>
-	{
-		private final Iterator<B> iterator;
-		private final Converter<A,B> converter;
-		
-		public IteratorConverter(Iterator<B> _iterator,Converter<A,B> _converter)
-		{
-			iterator = _iterator;
-			converter = _converter;
-		}
-		
-		public boolean hasNext()
-		{
-			return iterator.hasNext();
-		}
-
-		public A next()
-		{
-			return converter.conv(iterator.next());
-		}
-
-		public void remove()
-		{
-			iterator.remove();
-		}
-	}
-
-	public static interface Converter<A,B>
-	{
-		public A conv(B _b);
-	}
-}
--- a/src/jungle/app/bbs/JungleManager.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-package jungle.app.bbs;
-
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-
-import alice.jungle.operations.NetworkTreeOperationLog;
-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.Command;
-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.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-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 JungleManager {
-	private static JungleManager jm = new JungleManager();
-	private Jungle jungle;
-	private static int NOT_CHANGE_POSITION = 0;
-
-	private JungleManager() {
-		jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser()));
-	}
-	
-	public static void setJungle(Jungle _j) {
-		jm.jungle = _j;
-	}
-	
-	public static Jungle getJungle() {
-		return jm.jungle;
-	}
-	
-	public static JungleTree createNewTree(String name) {
-		return jm.jungle.createNewTree(name);		
-	}
-
-	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) {
-		JungleTreeEditor editor = _editor;
-		Either<Error, JungleTreeEditor> either = null;
-		for (TreeOperation op : _log) {
-			either = _edit(editor, op, pos);
-			if(either.isA()) {
-				return either;
-			}
-			editor = either.b();
-		}
-		return either;
-	}
-	
-	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
-			TreeOperation op, int _pos) {
-		NodePath path = new DefaultNodePath();
-		NodeOperation nodeOp = op.getNodeOperation();
-		int pos = _pos;
-		if (_pos == NOT_CHANGE_POSITION ) {
-			pos = nodeOp.getPosition();
-		}
-		Command c = nodeOp.getCommand();
-		String key = "";
-		switch (c) {
-		case PUT_ATTRIBUTE:
-			path = op.getNodePath();
-			key = nodeOp.getKey();
-			ByteBuffer value = nodeOp.getValue();
-			return editor.putAttribute(path, key, value);
-		case DELETE_ATTRIBUTE:
-			key = nodeOp.getKey();
-			return editor.deleteAttribute(path, key);
-		case APPEND_CHILD:
-			return editor.addNewChildAt(path, pos);
-		case DELETE_CHILD:
-			return editor.deleteChildAt(path, 0);
-		}
-		return null;
-	}
-	
-	public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) {
-		String treeName = netLog.getTreeName();
-		Jungle jungle = JungleManager.getJungle(); 
-		if (jungle.getTreeByName(treeName) == null) {
-			if(null == jungle.createNewTree(treeName)){
-				throw new IllegalStateException();
-			}
-		}
-		JungleTree tree = jungle.getTreeByName(treeName);
-		JungleTreeEditor editor = tree.getLocalTreeEditor();
-
-		//		int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp());
-		int pos = 0;
-		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, netLog, pos);
-		if(either.isA()) {
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		either = editor.success();
-		if(either.isA()) {
-			throw new IllegalStateException();
-		}
-		return either;
-	}
-	
-	private static int calculatePosition(Node node, long newNodeTimeStamp) {
-		int count = 0;
-		long childTimeStamp = 0;
-		for(Iterator<Node> iter = node.getChildren().iterator();iter.hasNext();) {
-			Node n = iter.next();
-			if(n.getAttributes().get("timestamp") == null) {
-				return NOT_CHANGE_POSITION;
-			}
-			if(n.getAttributes().get("timestamp") != null) {
-				childTimeStamp = n.getAttributes().get("timestamp").getLong();
-				if (newNodeTimeStamp < childTimeStamp) {
-					break;
-				}
-			}
-			count++;
-		}
-		return count;
-	}
-}
--- a/src/jungle/app/bbs/NetworkJungleBulletinBoard.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-package jungle.app.bbs;
-
-import java.nio.ByteBuffer;
-import java.util.Date;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import alice.jungle.core.NetworkDefaultJungle;
-import alice.jungle.persistence.AliceJournal;
-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.Children;
-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.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
-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;
-
-public class NetworkJungleBulletinBoard implements BulletinBoard
-{
-	private final Jungle jungle;
-	
-	public NetworkJungleBulletinBoard(String _uuid)
-	{
-		jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser()));	
-		jungle.createNewTree("boards");
-		JungleManager.setJungle(jungle);
-	}
-
-	public Iterable<String> getBoards()
-	{
-		JungleTree tree = jungle.getTreeByName("boards");
-		Node node = tree.getRootNode();
-		Children<Node> chs = node.getChildren();
-		
-		IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){
-			public String conv(Node _b) {
-				ByteBuffer e = _b.getAttributes().get("name");
-				return new String(e.array());
-			}
-		};
-		
-		return new IterableConverter<String,Node>(chs,converter);
-	}
-
-	public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
-	{
-		if(null == jungle.createNewTree(_name)){
-			throw new IllegalStateException();
-		}
-		
-		JungleTree tree = jungle.getTreeByName("boards");
-		JungleTreeEditor editor = tree.getTreeEditor();
-		DefaultNodePath root = new DefaultNodePath();
-		Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		
-		either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes()));
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		Either<Error,JungleTreeEditor> result = editor.success();
-		if(result.isA()){
-			throw new IllegalStateException();
-		}
-		final long timestamp = new Date().getTime();
-
-		
-		tree = jungle.getTreeByName(_name);
-		editor = tree.getTreeEditor();
-		either = editor.addNewChildAt(root,0);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		
-		NodeEditor e = new NodeEditor(){
-			public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-				_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-				_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
-				_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-				ByteBuffer tBuffer = ByteBuffer.allocate(16);
-				_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-				return DefaultEither.newB(_e);
-			}
-		};
-		
-		either = editor.edit(root.add(0),e);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		editor.success();
-		
-	}
-
-	public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
-	{
-		JungleTree tree = jungle.getTreeByName(_board);
-		if(tree == null){
-			throw new IllegalStateException();
-		}
-		
-		Either<Error, JungleTreeEditor> either;
-		do{
-			Node node = tree.getRootNode();
-			int size = node.getChildren().size();
-			DefaultNodePath path = new DefaultNodePath();
-		
-			JungleTreeEditor editor = tree.getTreeEditor();
-			either = editor.addNewChildAt(path,size);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			final long timestamp = new Date().getTime();
-			NodeEditor e = new NodeEditor(){
-				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
-					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-					ByteBuffer tBuffer = ByteBuffer.allocate(16);
-					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-					return DefaultEither.newB(_e);
-				}
-			};
-			path = path.add(size);
-			either = editor.edit(path,e);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			either = editor.success();
-
-		}while(either.isA());
-		/* Put DataSegment */
-	}
-
-	public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
-	{
-		for(;;) {
-			DefaultNodePath path = new DefaultNodePath();
-			path = path.add(Integer.parseInt(_uuid));
-		
-			JungleTree tree = jungle.getTreeByName(_board);
-			JungleTreeEditor editor = tree.getTreeEditor();
-			final long timestamp = new Date().getTime(); 
-			NodeEditor e = new NodeEditor(){
-				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
-					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-					ByteBuffer tBuffer = ByteBuffer.allocate(16);
-					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-				return DefaultEither.newB(_e);
-				}
-			};
-		
-			Either<Error, JungleTreeEditor> either = editor.edit(path,e);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			either = editor.success();
-			if(!either.isA()) {
-				return;
-			}
-		}
-
-	}
-
-	public Iterable<BoardMessage> getMessages(String _boardName)
-	{
-		JungleTree tree = jungle.getTreeByName(_boardName);
-		Node node = tree.getRootNode();
-		Children<Node> chs = node.getChildren();
-		
-		final AtomicInteger counter = new AtomicInteger(0);
-		IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){
-			public BoardMessage conv(Node _b) {
-				String uuid = Integer.toString(counter.get());
-				String author = new String(_b.getAttributes().get("author").array());
-				String message = new String(_b.getAttributes().get("mes").array());
-				counter.incrementAndGet();
-				return new BoardMessageImpl(author,message,uuid);
-			}
-		};
-		
-		return new IterableConverter<BoardMessage,Node>(chs,converter);
-	}
-	
-
-	
-	private static class BoardMessageImpl implements BoardMessage
-	{
-		private final String author;
-		private final String message;
-		private final String uuid;
-		
-		public BoardMessageImpl(String _author,String _message,String _uuid)
-		{
-			author = _author;
-			message = _message;
-			uuid = _uuid;
-		}
-
-		public String getAuthor()
-		{
-			return author;
-		}
-
-		public String getMessage()
-		{
-			return message;
-		}
-
-		public String getUUID()
-		{
-			return uuid;
-		}
-	}
-}
--- a/src/jungle/app/bbs/ShowBoardMessageServlet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class ShowBoardMessageServlet extends HttpServlet
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final BulletinBoard bbs;
-	private final String createBoardMessagePath;
-	private final String editMessagePath;
-	
-	private static final String PARAM_BOARD_NAME = "bname";
-
-	public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath)
-	{
-		bbs = _bbs;
-		createBoardMessagePath = _createBoardMessagePath;
-		editMessagePath = _editMessagePath;
-	}
-
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String bname = _req.getParameter(PARAM_BOARD_NAME);
-		
-		try{
-			printBoard(bname,_res.getWriter());
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-		
-	}
-	
-	private void printBoard(String _bname,PrintWriter _pw) throws Exception
-	{
-		_pw.write("<html><body>\n");
-		_pw.write("<h1>"+_bname+"</h1>\n");
-		
-		_pw.write("<form action='"+createBoardMessagePath+"' method='POST'\n");
-		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='"+_bname+"'/> EditKey : <input type='text' name='key'/></p>\n");
-		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-		_pw.write("<p><input type='submit' value='submit'/></p>\n");
-		
-		for(BoardMessage msg : bbs.getMessages(_bname)){
-			_pw.write("<hr/>");
-			_pw.write("<p><b>"+msg.getAuthor()+"</b></p>");
-			_pw.write("<p>"+msg.getMessage()+"</p>");
-			_pw.write("<small><a href='"+editMessagePath+"?bname="+_bname+"&uuid="+msg.getUUID()+"'>edit</a></small>");
-		}
-		
-		_pw.write("</body></html>");
-		_pw.flush();
-	}
-}
--- a/src/jungle/app/bbs/ShowBoardsServlet.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class ShowBoardsServlet extends HttpServlet
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final BulletinBoard bbs;
-	private final String createBoardPath;
-	private final String showBoardMessagePath;
-
-	public ShowBoardsServlet(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath)
-	{
-		bbs = _bbs;
-		createBoardPath = _createBoardPath;
-		showBoardMessagePath = _showBoardMessagePath;
-	}
-	
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		try{
-			printBoard(_res.getWriter());
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-		
-	}
-	
-	private void printBoard(PrintWriter _pw) throws Exception
-	{
-		_pw.write("<html><body>\n");
-		_pw.write("<h1>BBS</h1>\n");
-		_pw.write("<form action='"+createBoardPath+"' method='POST'\n");
-		_pw.write("<p>Create new board.</p>");
-		_pw.write("<p>BoardName : <input type='text' name='bname'/></p>\n");
-		_pw.write("<p>Author : <input type='text' name='author'/> EditKey : <input type='text' name='key'/></p>\n");
-		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-		_pw.write("<p><input type='submit' value='submit'/></p><hr/>\n");
-		
-		_pw.write("<h2>list of boards</h2>");
-		for(String board : bbs.getBoards()){
-			_pw.write("<p><a href='"+showBoardMessagePath+"?bname="+board+"'>"+board+"</a></p>");
-		}
-		
-		_pw.write("</body></html>");
-		_pw.flush();
-	}
-}
--- a/src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-
-
-import java.util.List;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jungle.app.bbs.JungleManager;
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.operations.NetworkTreeOperationLog;
-
-public class LogUpdateCodeSegment extends CodeSegment {
-	
-	Receiver log = ids.create(CommandType.PEEK);
-	Receiver clist = ids.create(CommandType.PEEK);
-	
-	
-	public LogUpdateCodeSegment() {
-		log.setKey("log");
-		clist.setKey("_CLIST");;
-	}
-	
-	public LogUpdateCodeSegment(int index) {
-		log.setKey("log", index);
-		clist.setKey("_CLIST");;
-	}
-	
-	public void run() {
-		int index = log.index;
-		NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
-		@SuppressWarnings("unchecked")
-		List<String> list = clist.asClass(List.class);
-		if (!log.from.equals("local")) {
-			Either<Error, JungleTreeEditor> either = JungleManager.update(netLog);
-			if(either.isA()) {
-				/* Should throw after new LogUpdateCodeSegment */
-				throw new IllegalStateException();				
-			}
-		}
-		for (String node : list) {
-			if (!node.equals(log.from)) {
-				ods.put(node, log.key, log.getVal());
-			}
-		}
-		new LogUpdateCodeSegment(index);
-	}
-}
--- a/src/jungle/app/bbs/codesegment/NullCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-import alice.codesegment.CodeSegment;
-
-public class NullCodeSegment extends CodeSegment {
-
-	@Override
-	public void run() {
-		
-	}
-
-}
--- a/src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import javax.servlet.Servlet;
-
-import jungle.app.bbs.BulletinBoard;
-import jungle.app.bbs.CreateBoardMessageServlet;
-import jungle.app.bbs.CreateBoardServlet;
-import jungle.app.bbs.EditMessageServlet;
-import jungle.app.bbs.NetworkJungleBulletinBoard;
-import jungle.app.bbs.ShowBoardMessageServlet;
-import jungle.app.bbs.ShowBoardsServlet;
-
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.servlet.ServletHandler;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.datasegment.HashSetDataSegment;
-
-public class StartBBSCodeSegment extends CodeSegment {
-	
-	int bbsPort = 8080;
-	Receiver host = ids.create(CommandType.PEEK);
-	private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
-	
-	public StartBBSCodeSegment(int p) {
-		bbsPort = p;
-		host.setKey("host");	
-	}
-
-	public StartBBSCodeSegment() {
-		host.setKey("host");	
-	}
-	
-	public void run() {
-		System.out.println("StartBBSCodeSegment");
-		String name = host.asString();
-		System.out.println("name : "+ name);
-		Matcher matcher = pattern.matcher(name);
-		matcher.find();
-//		String type = matcher.group(1);
-		
-		/* Jetty registration */
-		BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name);
-    	String createBoardMessagePath = "/createBoardMessage";
-    	String createBoardPath = "/createBoard";
-    	String editMessagePath = "/editMessage";
-    	String showBoardMessagePath = "/showBoardMessage";
-    	
-    	Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
-    	Servlet createBoard = new CreateBoardServlet(cassaBBS);
-    	Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
-    	Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
-    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
-    	
-    	Server serv = new Server(bbsPort);
-    	ServletHandler context = new ServletHandler();
-    	context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
-    	context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
-    	context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
-    	context.addServletWithMapping(new ServletHolder(index),"/");
-    	context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
-    	serv.addHandler(context);
-    	try {
-			serv.start();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		new LogUpdateCodeSegment();
-	}
-
-}
--- a/src/jungle/app/bbs/transformer/MergeBBS.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-package jungle.app.bbs.transformer;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class MergeBBS implements NodeEditor {
-	
-	
-	public MergeBBS() {
-		
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
-	{
-		return _e.getChildren().deleteChildAt(0);
-	}	
-	
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/core/NetworkDefaultJungle.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,66 @@
+package alice.jungle.core;
+
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+
+import alice.jungle.transaction.NetworkDefaultJungleTree;
+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.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
+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.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 fj.data.List;
+
+public class NetworkDefaultJungle implements Jungle {
+	private Journal journal;
+	private ConcurrentHashMap<String,JungleTree> trees;
+	private String uuid;
+	private TreeEditor editor;
+	
+	public NetworkDefaultJungle(Journal _journal,String _uuid,TreeEditor _editor)
+	{
+		journal = _journal;
+		trees = new ConcurrentHashMap<String,JungleTree>();
+		uuid = _uuid;
+		editor = _editor;
+	}
+
+	@Override
+	public JungleTree getTreeByName(String _name)
+	{
+		return trees.get(_name);
+	}
+
+	@Override
+	public JungleTree createNewTree(final String _name)
+	{
+		ChangeList list = new ChangeList(){
+			@Override
+			public Iterator<TreeOperation> iterator() {
+				List<TreeOperation> nil = List.nil();
+				return nil.iterator();
+			}
+			@Override
+			public String uuid() {
+				return uuid;
+			}
+			@Override
+			public String getTreeName() {
+				return _name;
+			}
+		};
+		DefaultTreeNode root = new DefaultTreeNode();
+		ChangeSet set = new DefaultChangeSet(root.getAsNode(),null,list,uuid,_name, 0);
+		DefaultTreeContext<DefaultTreeNode> tc = new DefaultTreeContext<DefaultTreeNode>(root,set);
+		JungleTree newTree = new NetworkDefaultJungleTree<DefaultTreeNode>(_name, tc,uuid,journal.getWriter(),editor);
+		if(trees.putIfAbsent(_name,newTree) != null){
+			return null;
+		}
+		return newTree;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/container/DefaultNodeOperationContainer.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,85 @@
+package alice.jungle.datasegment.container;
+
+import java.io.IOException;
+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.operations.AppendChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.annotation.Message;
+import org.msgpack.template.OrdinalEnumTemplate;
+import org.msgpack.type.Value;
+
+import alice.codesegment.SingletonMessage;
+
+@Message
+public class DefaultNodeOperationContainer {
+
+	public int pos;
+	public String key;
+	public Value value;
+	public Value commandValue;
+	
+	public static void main(String[] args) throws IOException {
+		String key = "hoge";
+		ByteBuffer b = ByteBuffer.wrap("messagepack value".getBytes());
+		PutAttributeOperation op = new PutAttributeOperation(key, b);
+		DefaultNodeOperationContainer container = new DefaultNodeOperationContainer();
+		container.unconvert(op);
+		NodeOperation convertedOp = container.convert(); 
+		System.out.println("pos : "+convertedOp.getPosition());
+		System.out.println("Command : "+convertedOp.getCommand());
+		System.out.println("key : "+convertedOp.getKey());
+		System.out.println("value : "+new String(convertedOp.getValue().array()));
+		
+	}
+	
+	public DefaultNodeOperationContainer() {
+		
+	}
+
+	public void unconvert(NodeOperation op) throws IOException {
+//		MessagePack msgpack = new MessagePack();
+		MessagePack msgpack = SingletonMessage.getInstance();
+		pos = op.getPosition();
+		key = op.getKey();
+		value = null;
+		if (op.getValue() != null) {
+			ByteBuffer b = op.getValue();
+			byte[] bytes = b.array();
+			Value v = msgpack.unconvert(bytes);
+			value = v;
+		}
+		Command c = op.getCommand();
+		msgpack.register(Command.class, new OrdinalEnumTemplate(Command.class));
+		Value cValue = msgpack.unconvert(c);
+		commandValue = cValue;
+	}
+	
+	public NodeOperation convert() throws IOException{
+//		MessagePack msgpack = new MessagePack();
+		MessagePack msgpack = SingletonMessage.getInstance();
+		msgpack.register(Command.class, new OrdinalEnumTemplate(Command.class));
+		Command c = msgpack.convert(commandValue, Command.class);
+		ByteBuffer b = null;
+		if (value != null) {
+			b = ByteBuffer.wrap(msgpack.convert(value, byte[].class));
+		}
+		if (c == Command.PUT_ATTRIBUTE) {
+			return new PutAttributeOperation(key, b);
+		} else if (c == Command.APPEND_CHILD) {
+			return new AppendChildAtOperation(pos);
+		} else if (c == Command.DELETE_CHILD) {
+			return new DeleteChildAtOperation(pos);
+		} else if (c == Command.DELETE_ATTRIBUTE){
+			return new DeleteAttributeOperation(key);
+		}
+		return null;
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/container/DefaultNodePathContainer.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,58 @@
+package alice.jungle.datasegment.container;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+
+import org.msgpack.MessagePack;
+import org.msgpack.annotation.Message;
+import org.msgpack.template.IntegerTemplate;
+import org.msgpack.template.ListTemplate;
+import org.msgpack.type.Value;
+
+@Message
+public class DefaultNodePathContainer {
+
+	public Value pathValue;
+	
+	public static void main(String[] args) throws IOException {
+		DefaultNodePath p = new DefaultNodePath();
+		p = p.add(1).add(2).add(3);
+		DefaultNodePathContainer pathContainer = new DefaultNodePathContainer();
+		pathContainer.unconvert(p);
+		NodePath convertedPath = pathContainer.convert();
+		for (int i : convertedPath) {
+			System.out.println(i);
+		}
+	}
+	
+	public DefaultNodePathContainer() {
+		
+	}
+	
+	public void unconvert(NodePath path) throws IOException {
+		MessagePack msgpack = new MessagePack();
+		List<Integer> list = new LinkedList<Integer>();
+		for(Integer i : path) {
+			list.add(i);
+		}
+		/* Remove first Element(-1). */
+		list.remove(0);
+		Value v = msgpack.unconvert(list);
+		pathValue = v;
+	}
+	
+	public DefaultNodePath convert() throws IOException {
+		MessagePack msgpack = new MessagePack();
+		msgpack.register(List.class, new ListTemplate(IntegerTemplate.getInstance()));
+		List<Integer> convertedList = (List<Integer>)msgpack.convert(pathValue, List.class);
+		DefaultNodePath path = new DefaultNodePath();
+		for (int i: convertedList) {
+			path = path.add(i);
+		}
+		return path;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/container/DefaultTreeOperationContainer.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,100 @@
+package alice.jungle.datasegment.container;
+
+import java.io.IOException;
+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.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.annotation.Message;
+import org.msgpack.type.Value;
+
+import alice.codesegment.SingletonMessage;
+
+@Message
+public class DefaultTreeOperationContainer {
+
+	Value pathValue;
+	Value opValue;
+
+	public static void main(String[] args) throws IOException {
+		String key = "hoge";
+		ByteBuffer b = ByteBuffer.wrap("messagepack value".getBytes());
+		PutAttributeOperation op = new PutAttributeOperation(key, b);
+
+		DefaultNodePath p = new DefaultNodePath();
+		p = p.add(1).add(2).add(3);
+		DefaultTreeOperation treeOp = new DefaultTreeOperation(p, op);
+		
+		DefaultTreeOperationContainer treeOperationContainer = new DefaultTreeOperationContainer();
+		treeOperationContainer.unconvert(treeOp);
+
+		TreeOperation treeOperation = treeOperationContainer.convert();
+		NodePath nodePath = treeOperation.getNodePath();
+		NodeOperation nodeOp = treeOperation.getNodeOperation();
+		Command c = nodeOp.getCommand();
+		String str = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			String k = nodeOp.getKey();
+			ByteBuffer value = nodeOp.getValue();
+			if (value.limit() < 100) {
+				str = String.format("key:%s,value:%s", k,
+						new String(value.array()));
+			} else {
+				str = String.format("key:%s,value:%d", k, value.limit());
+			}
+			break;
+		case DELETE_ATTRIBUTE:
+			str = String.format("key:%s", nodeOp.getKey());
+			break;
+		case APPEND_CHILD:
+			str = String.format("pos:%d", nodeOp.getPosition());
+			break;
+		case DELETE_CHILD:
+			str = String.format("pos:%d", nodeOp.getPosition());
+			break;
+		}
+		System.out.println(String.format("[%s:%s:%s]", c, nodePath, str));
+		for (int i: nodePath ) {
+			System.out.println(i);
+		}
+	}
+
+	public DefaultTreeOperationContainer() {
+
+	}
+	
+	public void unconvert(DefaultTreeOperation _op) throws IOException {
+		NodeOperation nodeOp = _op.getNodeOperation();
+		NodePath nodePath = _op.getNodePath();
+		DefaultNodeOperationContainer opContainer = new DefaultNodeOperationContainer();
+		opContainer.unconvert(nodeOp);
+		DefaultNodePathContainer pathContainer = new DefaultNodePathContainer();
+		pathContainer.unconvert(nodePath);
+		unconvert(opContainer, pathContainer);
+	}
+
+	public void unconvert(DefaultNodeOperationContainer _op,
+			DefaultNodePathContainer _path) throws IOException {
+//		MessagePack msgpack = new MessagePack();
+		MessagePack msgpack = SingletonMessage.getInstance();
+		pathValue = msgpack.unconvert(_path);
+		opValue = msgpack.unconvert(_op);
+	}
+
+	public TreeOperation convert() throws IOException {
+//		MessagePack msgpack = new MessagePack();
+		MessagePack msgpack = SingletonMessage.getInstance();
+		DefaultNodePathContainer pathContainer = msgpack.convert(pathValue, DefaultNodePathContainer.class);
+		DefaultNodeOperationContainer opContainer = msgpack.convert(opValue, DefaultNodeOperationContainer.class);
+		return new DefaultTreeOperation(pathContainer.convert(), opContainer.convert());
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/container/DefaultTreeOperationLogContainer.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,114 @@
+package alice.jungle.datasegment.container;
+
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.annotation.Message;
+import org.msgpack.template.ListTemplate;
+import org.msgpack.template.ValueTemplate;
+import org.msgpack.type.Value;
+
+import alice.codesegment.SingletonMessage;
+
+@Message
+public class DefaultTreeOperationLogContainer {
+
+	Value logValue;
+	String treeName;
+	String uuid;
+	String updaterName;
+	String revision;
+	long timestamp;
+
+	public DefaultTreeOperationLogContainer() {
+		logValue = null;
+		treeName = "";
+		uuid = "";
+		updaterName = "";
+		revision = "";
+		timestamp = Long.MAX_VALUE;
+	}
+	
+	public void setTreeName(String _treeName) {
+		treeName = _treeName;
+	}
+	
+	public String getTreeName() {
+		return treeName;
+	}
+	
+	public void setUUID(String _uuid) {
+		uuid = _uuid;
+	}
+	
+	public String getUUID() {
+		return uuid;
+	}
+
+	public void setUpdaterName(String _updaterName) {
+		updaterName = _updaterName;
+	}
+	
+	public String getServerName() {
+		return updaterName;
+	}
+	
+	public void setRevision(String _revision) {
+		revision = _revision;
+	}
+	
+	public String getRevision() {
+		return revision;
+	}
+
+	public void setTimeStamp(long t) {
+		timestamp = t;
+	}
+	
+	public long getTimeStamp() {
+		return timestamp;
+	}
+	
+	public void unconvert(Iterable<TreeOperation> _log) throws IOException {
+		MessagePack msgpack = SingletonMessage.getInstance();
+		List<Value> list = new LinkedList<Value>();
+		for(TreeOperation op : _log) {
+			NodeOperation nOp = op.getNodeOperation();
+			NodePath nodePath = op.getNodePath();
+			DefaultTreeOperation treeOp = new DefaultTreeOperation(nodePath, nOp);
+			DefaultTreeOperationContainer container = new DefaultTreeOperationContainer();
+			container.unconvert(treeOp);
+			Value v = msgpack.unconvert(container);
+			list.add(v);
+		}
+		Value listValue = msgpack.unconvert(list);
+		logValue = listValue;
+	}
+	
+	public DefaultTreeOperationLog convert() throws IOException {
+		MessagePack msgpack = SingletonMessage.getInstance();
+		msgpack.register(List.class, new ListTemplate(ValueTemplate.getInstance()));
+		List<Value> listValue = msgpack.convert(logValue, List.class);
+		List<TreeOperation> logList = new LinkedList<TreeOperation>();
+		for(Value v: listValue) {
+			DefaultTreeOperationContainer container = msgpack.convert(v, DefaultTreeOperationContainer.class);
+			logList.add(container.convert());
+		}
+		DefaultTreeOperationLog log = new DefaultTreeOperationLog(logList, logList.size());
+		return log;
+	}
+	
+	public String getHashLogString() {
+		return treeName + revision + updaterName;
+	}
+
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/store/HashSetDataSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,11 @@
+package alice.jungle.datasegment.store;
+
+import java.util.HashSet;
+
+import org.msgpack.annotation.Message;
+
+@Message
+public class HashSetDataSegment {
+	public HashSet<String> hash = new HashSet<String>();			
+	public HashSetDataSegment() {}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,35 @@
+package alice.jungle.datasegment.transformer;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+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 org.msgpack.annotation.Message;
+
+
+/*
+ * This code same AppendChildAt. 
+ */
+
+@Message
+public class NetworkAppendChildAt implements NodeEditor {
+
+	private final int pos;
+	
+	public NetworkAppendChildAt(int _pos) {
+		pos = _pos;
+	}
+
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> edit(T _e) {
+		Either<Error,T> either = _e.getChildren().addNewChildAt(pos);
+		if(either.isA()){
+			// error
+			return either;
+		}
+		return DefaultEither.newB(either.b());
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkAppendChildAtOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,54 @@
+package alice.jungle.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.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import alice.jungle.datasegment.transformer.NetworkAppendChildAt;
+
+import org.msgpack.annotation.Message;
+
+
+@Message
+public class NetworkAppendChildAtOperation implements NodeOperation {
+	
+	/* MessagePack cannot handle final.*/
+	//	private final int pos;
+	private int pos;
+	
+	/* Position -1 represent root position. */
+	public NetworkAppendChildAtOperation() { pos = -2; }
+	
+	public NetworkAppendChildAtOperation(int _pos) {
+		pos = _pos;
+	}
+	
+	@Override
+	public Command getCommand() {
+		return Command.APPEND_CHILD;
+	}
+	
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target) {
+		NetworkAppendChildAt appendChildAt = new NetworkAppendChildAt(pos);
+		return appendChildAt.edit(_target);
+	}
+
+	@Override
+	public int getPosition() {
+		return pos;
+	}
+
+	@Override
+	public String getKey() {
+		return null;
+	}
+
+	@Override
+	public ByteBuffer getValue() {
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkDeleteAttributeOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,61 @@
+package alice.jungle.operations;
+
+import java.nio.ByteBuffer;
+
+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.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+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
+{
+	/* MessagePack cannot handle final.*/
+	//private final String key;
+	private String key;
+	
+	public NetworkDeleteAttributeOperation()
+	{
+		key = null;
+	}
+	
+	public NetworkDeleteAttributeOperation(String _key)
+	{
+		key = _key;
+	}
+	
+	@Override
+	public Command getCommand()
+	{
+		return Command.DELETE_ATTRIBUTE;
+	}
+	
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	{
+		DeleteAttribute deleteAttribute = new DeleteAttribute(key);
+		return deleteAttribute.edit(_target);
+	}
+
+	@Override
+	public int getPosition()
+	{
+		return -1;
+	}
+
+	@Override
+	public String getKey()
+	{
+		return key;
+	}
+
+	@Override
+	public ByteBuffer getValue()
+	{
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkDeleteChildAtOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,58 @@
+package alice.jungle.operations;
+
+import java.nio.ByteBuffer;
+
+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.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+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 NetworkDeleteChildAtOperation implements NodeOperation
+{
+	/* MessagePack cannot handle final.*/
+	//private final int pos;
+	private int pos;
+	
+	
+	/* Position -1 represent root position. */	
+	public NetworkDeleteChildAtOperation(int _pos)
+	{
+		pos = _pos;
+	}
+	
+	@Override
+	public Command getCommand()
+	{
+		return Command.DELETE_CHILD;
+	}
+	
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	{
+		DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
+		return deleteChildAt.edit(_target);
+	}
+
+	@Override
+	public int getPosition()
+	{
+		return pos;
+	}
+
+	@Override
+	public String getKey()
+	{
+		return null;
+	}
+
+	@Override
+	public ByteBuffer getValue()
+	{
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkNodeOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,113 @@
+package alice.jungle.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.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+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 alice.jungle.datasegment.transformer.NetworkAppendChildAt;
+
+import org.msgpack.annotation.Message;
+
+@Message
+public class NetworkNodeOperation implements NodeOperation{
+
+	public int pos;
+	public String key;
+	public ByteBuffer value;
+	public int commandType;
+
+	public final static int NUM_PUT_ATTRIBUTE = 1;
+	public final static int NUM_APPEND_CHILD = 2;
+	public final static int NUM_DELETE_CHILD = 3;
+	public final static int NUM_DELETE_ATTRIBUTE = 4;
+	
+	public NetworkNodeOperation() {
+		pos = -2;
+		key = null;
+		value = null;
+		commandType = 0;
+	}
+	
+	public NetworkNodeOperation(NodeOperation _op) {
+		pos = _op.getPosition();
+		key = _op.getKey();
+		value = _op.getValue();
+		commandType = getCommandType(_op.getCommand());
+	}
+	
+	public static int getCommandType(Command c) {
+		switch(c) {
+		case PUT_ATTRIBUTE:
+			return NUM_PUT_ATTRIBUTE;
+		case APPEND_CHILD:
+			return NUM_APPEND_CHILD;
+		case DELETE_CHILD:
+			return NUM_DELETE_CHILD;
+		case DELETE_ATTRIBUTE:
+			return NUM_DELETE_ATTRIBUTE;
+		default:
+			break;
+		}
+		return 0;
+	}
+	
+	public static Command getCommand(int num) {
+		switch(num) {
+		case NUM_PUT_ATTRIBUTE:
+			return Command.PUT_ATTRIBUTE;
+		case NUM_APPEND_CHILD:
+ 			return Command.APPEND_CHILD;
+		case NUM_DELETE_CHILD:
+			return Command.DELETE_CHILD;
+		case NUM_DELETE_ATTRIBUTE:
+			return Command.DELETE_ATTRIBUTE;
+		default:
+			break;
+		}
+		return null;
+	}
+	
+	public Command getCommand() {
+		return getCommand(commandType);
+	}
+
+	public int getPosition() {
+		return pos;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public ByteBuffer getValue() {
+		return value;
+	}
+
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target) {
+		switch(getCommand(commandType)) {
+		case PUT_ATTRIBUTE:
+			PutAttribute putAttribute = new PutAttribute(key,value);
+			return putAttribute.edit(_target);
+		case APPEND_CHILD:
+			NetworkAppendChildAt appendChildAt = new NetworkAppendChildAt(pos);
+			return appendChildAt.edit(_target);
+		case DELETE_CHILD:
+			DeleteChildAt deleteChildAt = new DeleteChildAt(pos);
+			return deleteChildAt.edit(_target);
+		case DELETE_ATTRIBUTE:
+			DeleteAttribute deleteAttribute = new DeleteAttribute(key);
+			return deleteAttribute.edit(_target);
+		default:
+			break;
+		}
+		return null;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkNodePath.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,70 @@
+package alice.jungle.operations;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.msgpack.annotation.Message;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
+
+@Message
+public class NetworkNodePath implements NodePath
+{
+	LinkedList<Integer> path;
+	
+	public NetworkNodePath() {
+		path = new LinkedList<Integer>();
+		path.add(-1);
+	}
+	
+	public NetworkNodePath(NodePath _p) {
+		path = new LinkedList<Integer>();
+		for(Integer pos: _p) {
+			path.add(pos);
+		}
+	}
+	
+	private NetworkNodePath(LinkedList<Integer> _path) {
+		path = _path;
+	}
+	
+	@Override
+	public Iterator<Integer> iterator() {
+		return path.iterator();
+	}
+
+	@Override
+	public NetworkNodePath add(int _pos) {
+		LinkedList<Integer> newPath = copyPath();
+		newPath.add(_pos);
+		return new NetworkNodePath(newPath);
+	}
+
+	@Override
+	public Pair<Integer, NodePath> pop() {
+		LinkedList<Integer> cPath = copyPath();
+		int e = cPath.getFirst();
+		cPath.remove();
+		return new Pair<Integer, NodePath>(e, new NetworkNodePath(cPath));
+	}
+
+	@Override
+	public int size() {
+		return path.size();
+	}
+
+	private LinkedList<Integer> copyPath() {
+		LinkedList<Integer> newPath = new LinkedList<Integer>();
+		for (Integer i : path) {
+			newPath.add(i);
+		}
+		return newPath;
+	}
+	
+	@Override
+	public String toString() {
+		return path.toString();
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,67 @@
+package alice.jungle.operations;
+
+import java.nio.ByteBuffer;
+
+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.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+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;
+@Message
+public class NetworkPutAttributeOperation  implements NodeOperation
+{
+	
+/*  MessagePack cannot handle final.
+ *
+ *	private final String key;
+ *	private final ByteBuffer value;
+ */
+	private String key;
+	private ByteBuffer value;
+	
+	public NetworkPutAttributeOperation()
+	{
+		key = null;
+		value = null;
+	}
+	
+	public NetworkPutAttributeOperation(String _key,ByteBuffer _value)
+	{
+		key = _key;
+		value = _value;
+	}
+	
+	@Override
+	public Command getCommand()
+	{
+		return Command.PUT_ATTRIBUTE;
+	}
+	
+	@Override
+	public <T extends EditableNode<T>> Either<Error, T> invoke(T _target)
+	{
+		PutAttribute putAttribute = new PutAttribute(key,value);
+		return putAttribute.edit(_target);
+	}
+
+	@Override
+	public int getPosition()
+	{
+		return -1;
+	}
+
+	@Override
+	public String getKey()
+	{
+		return key;
+	}
+
+	@Override
+	public ByteBuffer getValue()
+	{
+		return value;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkTreeOperation.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,73 @@
+package alice.jungle.operations;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
+import org.msgpack.annotation.Message;
+
+@Message
+public class NetworkTreeOperation implements TreeOperation {
+
+	public NetworkNodePath path;
+	public NetworkNodeOperation operation;
+	
+	public NetworkTreeOperation() {
+		path = null;
+		operation = null;
+	}
+	
+	public NetworkTreeOperation(TreeOperation treeOp) {
+		path = new NetworkNodePath(treeOp.getNodePath());
+		operation = new NetworkNodeOperation(treeOp.getNodeOperation());
+	}
+	
+	public NetworkTreeOperation(NodePath _p, NodeOperation _op) {
+		path = new NetworkNodePath(_p);
+		operation = new NetworkNodeOperation(_op);
+	}
+
+	public NetworkTreeOperation(NetworkNodePath _p, NodeOperation _op) {
+		path = _p;
+		operation = new NetworkNodeOperation(_op);
+	}
+
+	public NetworkTreeOperation(NodePath _p, NetworkNodeOperation _op) {
+		path = new NetworkNodePath(_p);
+		operation = _op;
+	}
+
+	public NetworkTreeOperation(NetworkNodePath _p, NetworkNodeOperation _op) {
+		path = _p;
+		operation = _op;
+	}
+	
+	@Override
+	public NodePath getNodePath() {
+		return path;
+	}
+	
+	@Override
+	public NodeOperation getNodeOperation() {
+		Command c = operation.getCommand();
+		switch(c) {
+		case PUT_ATTRIBUTE:
+			return new PutAttributeOperation(operation.getKey(), operation.getValue());
+		case APPEND_CHILD:
+			return new AppendChildAtOperation(operation.getPosition());
+		case DELETE_CHILD:
+			return new DeleteChildAtOperation(operation.getPosition());
+		case DELETE_ATTRIBUTE:
+			return new DeleteAttributeOperation(operation.getKey());
+		default:
+			break;
+		}
+		return null;
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/operations/NetworkTreeOperationLog.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,103 @@
+package alice.jungle.operations;
+
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.msgpack.annotation.Message;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
+@Message
+public class NetworkTreeOperationLog implements TreeOperationLog
+{
+	public LinkedList<NetworkTreeOperation> list;
+	public int size;
+	String uuid;
+	String treeName;
+	long timestamp;
+	
+	public NetworkTreeOperationLog() {
+		list = new LinkedList<NetworkTreeOperation>();
+		size = 0;
+		treeName = "";
+		timestamp = new Date().getTime();
+	}
+
+	public NetworkTreeOperationLog(String _uuid, String _treeName, Iterable<TreeOperation> _list)
+	{
+		this(_uuid, _treeName, _list, new Date().getTime());
+	}
+	
+	public NetworkTreeOperationLog(String _uuid, String _treeName, Iterable<TreeOperation> _list, long _timestamp)
+	{
+		uuid = _uuid;
+		treeName = _treeName;
+		list = new LinkedList<NetworkTreeOperation>();
+		timestamp = _timestamp;
+		for(TreeOperation op: _list) {
+			NetworkTreeOperation nOp = new NetworkTreeOperation(op);
+			list.add(nOp);
+		}
+		size = list.size();
+	}
+
+	public NetworkTreeOperationLog(Iterable<TreeOperation> _list)
+	{
+		this("", "", _list);
+	}
+
+	
+	@Override
+	public Iterator<TreeOperation> iterator() {
+		LinkedList<TreeOperation> opList = new LinkedList<TreeOperation>();
+		for(NetworkTreeOperation op : list) {
+			opList.add(op);
+		}
+		return opList.iterator();
+	}
+
+	@Override
+	public NetworkTreeOperationLog add(NodePath _p, NodeOperation _op) 
+	{
+		NetworkTreeOperation op = new NetworkTreeOperation(_p, _op);
+		list.add(op);
+		return this;
+	}
+
+	@Override
+	public NetworkTreeOperationLog append(TreeOperationLog _log) 
+	{
+		for (TreeOperation o : _log) {
+			NetworkTreeOperation op = new NetworkTreeOperation(o);
+			list.add(op);
+		}
+		return this;
+	}
+
+	@Override
+	public int length() 
+	{
+		return size;
+	}
+	
+	public String getUUID() {
+		return uuid;
+	}
+	
+	public String getTreeName() {
+		return treeName;
+	}
+	
+	public long getTimeStamp() {
+		return timestamp;
+	}
+	
+	public void setTimeStamp(long _timestamp) {
+		timestamp = _timestamp;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/AliceJournal.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,76 @@
+package alice.jungle.persistent;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
+
+public class AliceJournal implements Journal {
+	
+	private static final AliceChangeListWriter ALICE_WRITER = new AliceChangeListWriter();
+	private static final AliceChangeListReader ALICE_READER = new AliceChangeListReader();
+	@Override
+	public ChangeListReader getReader() {
+		return ALICE_READER;
+	}
+	@Override
+	public ChangeListWriter getWriter() {
+		return ALICE_WRITER;
+	}
+	
+	private static class AliceChangeListWriter implements ChangeListWriter
+	{
+		@Override
+		public Result write(ChangeList _operations)
+		{
+			/*
+			for(TreeOperation op : _operations){
+				NodePath p = op.getNodePath();
+				NodeOperation nodeOp = op.getNodeOperation();
+				Command c = nodeOp.getCommand();
+				String args = "";
+				switch(c){
+					case PUT_ATTRIBUTE:
+						String key = nodeOp.getKey();
+						ByteBuffer value = nodeOp.getValue();
+						if(value.limit() < 100){
+							args = String.format("key:%s,value:%s",key,new String(value.array()));
+						}else{
+							args = String.format("key:%s,value:%d",key,value.limit());
+						}
+						break;
+					case DELETE_ATTRIBUTE:
+						args = String.format("key:%s",nodeOp.getKey());
+						break;
+					case APPEND_CHILD:
+						args = String.format("pos:%d",nodeOp.getPosition());
+						break;
+					case DELETE_CHILD:
+						args = String.format("pos:%d",nodeOp.getPosition());
+						break;
+				}
+				System.out.println(String.format("[%s:%s:%s]",c,p,args));
+			}
+			*/
+			return Result.SUCCESS;
+		}
+	}
+	
+	private static class AliceChangeListReader implements ChangeListReader
+	{
+		@Override
+		public ChangeListReader newReader()
+		{
+			return this;
+		}
+
+		@Override
+		public ChangeList read()
+		{
+			return null;
+		}
+	}
+	
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/JungleUpdater.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,58 @@
+package alice.jungle.persistent;
+
+import java.nio.ByteBuffer;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class JungleUpdater {
+
+	public JungleUpdater() {
+		
+	}
+	
+	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
+		JungleTreeEditor editor = _editor;
+		Either<Error, JungleTreeEditor> either = null;
+		for (TreeOperation op : _log) { 
+			either = _edit(editor, op);
+			if(either.isA()) {
+				return either;
+			}
+			editor = either.b();
+		}
+		return either;
+	}
+	
+	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
+			TreeOperation op) {
+		DefaultNodePath path = new DefaultNodePath();
+		NodeOperation nodeOp = op.getNodeOperation();
+		int pos = nodeOp.getPosition();
+		Command c = nodeOp.getCommand();
+		String key = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			key = nodeOp.getKey();
+			ByteBuffer value = nodeOp.getValue();
+			return editor.putAttribute(path, key, value);
+		case DELETE_ATTRIBUTE:
+			key = nodeOp.getKey();
+			return editor.deleteAttribute(path, key);
+		case APPEND_CHILD:
+			return editor.addNewChildAt(path, pos);
+		case DELETE_CHILD:
+			return editor.deleteChildAt(path, 0);
+		}
+		return null;
+	}	
+	
+	
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeList.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,53 @@
+package alice.jungle.persistent;
+
+import java.util.Iterator;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+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.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+
+public class PersistentChangeList implements ChangeList {
+
+	public NetworkTreeOperationLog log;
+	public String treeName;
+	public String uuid;
+
+	public PersistentChangeList(String _uuid, String _treeName, TreeOperationLog _log) {
+		uuid = _uuid;
+		treeName = _treeName;
+		log = new NetworkTreeOperationLog(_log);
+	}
+	
+	public PersistentChangeList(NetworkTreeOperationLog _log) {
+		log = _log;
+		treeName = _log.getTreeName();
+		uuid = _log.getUUID();
+	}
+	
+	public PersistentChangeList(ChangeSet cs) {
+		treeName = cs.getTreeName();
+		uuid = cs.uuid();
+		log = new NetworkTreeOperationLog(cs.getChangeList());
+	}
+	
+	@Override
+	public Iterator<TreeOperation> iterator() {
+		return log.iterator();
+	}
+
+	public NetworkTreeOperationLog getTreeOperationLog() {
+		return log;
+	}
+	
+	public String getTreeName() {
+		return treeName;
+	}
+	
+	public String uuid() {
+		return uuid;
+	}
+
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeListReader.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,46 @@
+package alice.jungle.persistent;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+
+import org.msgpack.MessagePack;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+
+public class PersistentChangeListReader  implements ChangeListReader {
+	
+	private static InputStream in;
+	MessagePack msgpack = PersistentJournal.getMessagePack();
+
+	public PersistentChangeListReader() {
+		in = null;
+	}
+	
+	public PersistentChangeListReader(InputStream _in) {
+		in = _in;
+	}
+ 	
+	@Override
+	public ChangeListReader newReader()
+	{
+		return new PersistentChangeListReader();
+	}
+	
+	@Override 
+	public ChangeList read()
+	{
+		try {
+			final NetworkTreeOperationLog readLog = msgpack.read(in, NetworkTreeOperationLog.class);
+			PersistentChangeList cl = new PersistentChangeList(readLog); 
+			return cl;
+		} catch (EOFException e){
+
+		} catch (IOException e) {
+		}
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeListWriter.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,35 @@
+package alice.jungle.persistent;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+
+import org.msgpack.MessagePack;
+
+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;
+
+public class PersistentChangeListWriter implements ChangeListWriter {
+	
+	MessagePack msgpack = PersistentJournal.getMessagePack();
+	OutputStream out;
+	
+	public PersistentChangeListWriter(OutputStream _out) {
+		out = _out;
+	}
+	
+	@Override
+	public Result write(ChangeList cs)
+	{
+		NetworkTreeOperationLog log = new NetworkTreeOperationLog(cs.uuid(), cs.getTreeName(), cs);
+		try {
+			msgpack.write(out, log);
+			out.flush();
+			return Result.SUCCESS;
+		} catch (IOException e) {
+		}
+		return null;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentChangeSet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,67 @@
+package alice.jungle.persistent;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+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.operations.TreeOperation;
+
+public class PersistentChangeSet implements ChangeSet 
+{
+	private final Node root;
+	private final ChangeSet previous;
+	private final ChangeList changeList;
+	private final String uuid;
+	private final long revision;
+	private final String treeName;
+	
+	public PersistentChangeSet(Node _node,ChangeSet _prev,ChangeList _log,String _uuid, String _treeName, long _revision)
+	{
+		root = _node;
+		previous = _prev;
+		changeList = _log;
+		uuid = _uuid;
+		revision = _revision;
+		treeName = _treeName;
+	}
+	
+	@Override
+	public Node getRoot()
+	{
+		return root;
+	}
+
+	@Override
+	public ChangeSet prev()
+	{
+		return previous;
+	}
+
+	@Override
+	public ChangeList getChangeList()
+	{
+		return changeList;
+	}
+
+	@Override
+	public String uuid()
+	{
+		return uuid;
+	}
+
+	@Override
+	public long revision()
+	{
+		return revision;
+	}
+
+	@Override
+	public Iterable<TreeOperation> getOperations()
+	{
+		return changeList;
+	}
+	
+	public String getTreeName() {
+		return treeName;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentJournal.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,82 @@
+package alice.jungle.persistent;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.msgpack.MessagePack;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal;
+
+public class PersistentJournal implements Journal {
+	
+	private static ChangeListWriter WRITER;
+	private static ChangeListReader READER;
+	private static MessagePack msgpack;
+	private static OutputStream out = null;
+	private static InputStream in = null;
+	
+	public PersistentJournal() {
+		msgpack = new MessagePack();
+	}
+	
+	public PersistentJournal(File file) throws FileNotFoundException {
+		out = new FileOutputStream(file);
+		in = new FileInputStream(file);
+		WRITER = new PersistentChangeListWriter(out);
+		READER = new PersistentChangeListReader(in);
+     	msgpack = new MessagePack();		
+	}
+	
+	@Override
+	public ChangeListReader getReader() {
+		return READER;
+	}
+
+	@Override
+	public ChangeListWriter getWriter() {
+		return WRITER;
+	}
+	
+	public void setOutputFile(File file) throws FileNotFoundException {
+		out = new FileOutputStream(file);
+		WRITER = new PersistentChangeListWriter(out);
+	}
+	
+	public void setInputFile(File file) throws FileNotFoundException {
+		in = new FileInputStream(file);
+		READER = new PersistentChangeListReader(in);
+	}
+	
+	public void close() throws IOException {
+		out.close();
+		in.close();
+	}
+	
+	public void setOutputStream(OutputStream _out) {
+		out = _out;
+	}
+	
+	public OutputStream getOutputStream() {
+		return out;
+	}
+	
+	public void setInputStream(InputStream _in) {
+		in = _in;
+	}
+	
+	public InputStream getInputStream() {
+		return in;
+	}
+	
+	public static MessagePack getMessagePack() {
+		return msgpack;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentJungle.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,65 @@
+package alice.jungle.persistent;
+
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+
+import fj.data.List;
+
+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.persistent.ChangeList;
+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.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
+
+public class PersistentJungle implements Jungle {
+	private PersistentJournal journal;
+	private ConcurrentHashMap<String,JungleTree> trees;
+	final private String uuid;
+	private TreeEditor editor;
+
+	public PersistentJungle(PersistentJournal _journal,String _uuid,TreeEditor _editor)
+	{
+		journal = _journal;
+		trees = new ConcurrentHashMap<String,JungleTree>();
+		uuid = _uuid;
+		editor = _editor;
+	}
+
+	@Override
+	public JungleTree getTreeByName(String _name)
+	{
+		return trees.get(_name);
+	}
+
+	@Override
+	public JungleTree createNewTree(final String _name)
+	{
+		ChangeList list = new ChangeList(){
+			@Override
+			public Iterator<TreeOperation> iterator() {
+				List<TreeOperation> nil = List.nil();
+				return nil.iterator();
+			}
+			@Override
+			public String uuid() {
+				return uuid;
+			}
+			@Override
+			public String getTreeName() {
+				return _name;
+			}
+		};
+		DefaultTreeNode root = new DefaultTreeNode();
+		ChangeSet set = new PersistentChangeSet(root.getAsNode(),null,list,uuid,_name,0);
+		DefaultTreeContext<DefaultTreeNode> tc = new DefaultTreeContext<DefaultTreeNode>(root,set);
+		JungleTree newTree = new PersistentJungleTree<DefaultTreeNode>(_name, tc,uuid, journal.getWriter(),editor);
+		if(trees.putIfAbsent(_name,newTree) != null){
+			return null;
+		}
+		return newTree;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentJungleTree.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,53 @@
+package alice.jungle.persistent;
+
+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.persistent.ChangeListWriter;
+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.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;
+
+public class PersistentJungleTree <T extends TreeNode<T>> implements JungleTree {
+	private final AtomicReservableReference<TreeContext<T>> repository;
+	private final String uuid;
+	private final String treeName;
+	private final ChangeListWriter writer;
+	private final TreeEditor editor;
+
+	public PersistentJungleTree(String _treeName, TreeContext<T> _tc,String _uuid, ChangeListWriter _writer,TreeEditor _editor)
+	{
+		treeName = _treeName;
+		repository = new AtomicReservableReference<TreeContext<T>>(_tc);
+		uuid = _uuid;
+		writer = _writer;
+		editor = _editor;
+	}
+
+	@Override
+	public JungleTreeEditor getTreeEditor()
+	{
+		TreeContext<T> tc = repository.get();
+		PersistentTransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer,tc,repository,uuid);
+		T root = tc.getTreeNode();
+		return new DefaultJungleTreeEditor<T>(root,txManager,editor);
+	}
+
+	@Override
+	public Node getRootNode()
+	{
+		TreeContext<T> tc = repository.get();
+		ChangeSet cs = tc.getChangeSet();
+		return cs.getRoot();
+	}
+
+	@Override
+	public JungleTreeEditor getLocalTreeEditor() {
+		return getTreeEditor();
+	}
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/persistent/PersistentTransactionManager.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,77 @@
+package alice.jungle.persistent;
+
+import java.util.Iterator;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+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.transaction.AtomicReservableReference;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class PersistentTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> { 
+	private final AtomicReservableReference<TreeContext<T>> repository;
+	private final TreeContext<T> tip;
+	private final ChangeListWriter writer;
+	private final String uuid;		
+	private final String treeName;	
+
+	public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip,
+			AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
+	{
+		repository = _repository;
+		tip = _tip;
+		writer = _writer;
+		uuid = _uuid;
+		treeName = _treeName;
+	}
+	
+	@Override
+	public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) {
+		ChangeSet cs = tip.getChangeSet();
+		long currentRevision = cs.revision();
+		long nextRevision = currentRevision + 1;
+		
+		PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log);
+		Node root = _newRoot.getAsNode();
+		PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision);
+		DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_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) {
+			return DefaultEither.newA((Error)new DefaultError());
+		}
+		reservation.confirm();
+		TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid);
+		return DefaultEither.newB(txManager);
+	}
+
+	@Override
+	public long getRevision() 
+	{
+		ChangeSet cs = tip.getChangeSet();
+		return cs.revision();
+	}
+
+	@Override
+	public String getUUID() {
+		return uuid;
+	}
+	
+	
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/remote/RemoteConfig.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,19 @@
+package alice.jungle.remote;
+import alice.topology.node.TopologyNodeConfig;
+
+
+public class RemoteConfig  extends TopologyNodeConfig {
+	
+	public int bbsPort = 8080;
+	
+	public RemoteConfig(String[] args) {
+		super(args);
+		for (int i = 0; i< args.length; i++) {
+			if ("-bbsPort".equals(args[i])) {
+				bbsPort = Integer.parseInt(args[++i]);
+			} else if("-bp".equals(args[i])) {
+				bbsPort = Integer.parseInt(args[++i]);
+			}
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,56 @@
+package alice.jungle.transaction;
+
+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.persistent.ChangeListWriter;
+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.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
+
+public class NetworkDefaultJungleTree<T extends TreeNode<T>> implements JungleTree {
+	private final AtomicReservableReference<TreeContext<T>> repository;
+	private final String uuid;
+	private final String treeName;
+	private final ChangeListWriter writer;
+	private final TreeEditor editor;
+	
+	public NetworkDefaultJungleTree(String _treeName, TreeContext<T> _tc,String _uuid,ChangeListWriter _writer,TreeEditor _editor)
+	{
+		treeName = _treeName;
+		repository = new AtomicReservableReference<TreeContext<T>>(_tc);
+		uuid = _uuid;
+		writer = _writer;
+		editor = _editor;
+	}
+
+	@Override
+	public JungleTreeEditor getTreeEditor()
+	{
+		TreeContext<T> tc = repository.get();
+		NetworkTransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer,tc,repository,uuid);
+		T root = tc.getTreeNode();
+		return new NetworkDefaultJungleTreeEditor<T>(treeName, root,txManager,editor);
+	}
+	
+	@Override
+	public JungleTreeEditor getLocalTreeEditor()
+	{
+		TreeContext<T> tc = repository.get();
+		NetworkTransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer,tc,repository,uuid);
+		T root = tc.getTreeNode();
+		return NetworkDefaultJungleTreeEditor.NewLocalJungleTreeEditor(treeName,root,txManager, editor);
+	}
+	
+	@Override
+	public Node getRootNode()
+	{
+		TreeContext<T> tc = repository.get();
+		ChangeSet cs = tc.getChangeSet();
+		return cs.getRoot();
+	}
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,194 @@
+package alice.jungle.transaction;
+
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+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.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.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;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute;
+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.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.IterableConverter;
+import jungle.app.bbs.codesegment.NullCodeSegment;
+
+public class NetworkDefaultJungleTreeEditor<T extends TreeNode<T>> implements JungleTreeEditor {
+
+	private final TransactionManager<T> txManager;
+	private final T root;
+	private final TreeEditor editor;
+	private final String treeName;
+	private final TreeOperationLog log;
+	private boolean exportLog;
+
+	public NetworkDefaultJungleTreeEditor(String _treeName, T _root,TransactionManager<T> _txManager,TreeEditor _editor)
+	{
+		this(_treeName, _root,_txManager,_editor,new DefaultTreeOperationLog());
+	}
+	
+	public NetworkDefaultJungleTreeEditor(String _treeName, T _root,TransactionManager<T> _txManager,TreeEditor _editor, TreeOperationLog _log)
+	{
+		treeName = _treeName;
+		root = _root;
+		txManager = _txManager;
+		editor = _editor;
+		log = _log;
+		exportLog = true;
+	}
+	
+	public static <T1 extends TreeNode<T1>> NetworkDefaultJungleTreeEditor<T1> NewLocalJungleTreeEditor(String _treeName, T1 _root,TransactionManager<T1> _txManager,TreeEditor _editor) {
+		NetworkDefaultJungleTreeEditor<T1> treeEditor = new NetworkDefaultJungleTreeEditor<T1>(_treeName, _root,_txManager,_editor,new DefaultTreeOperationLog());
+		treeEditor.exportLog = false;
+		return treeEditor;
+	}
+
+	public static <T1 extends TreeNode<T1>> NetworkDefaultJungleTreeEditor<T1> NewLocalJungleTreeEditor(String _treeName, T1 _root,TransactionManager<T1> _txManager,TreeEditor _editor, TreeOperationLog _log) {
+		NetworkDefaultJungleTreeEditor<T1> treeEditor = new NetworkDefaultJungleTreeEditor<T1>(_treeName, _root,_txManager,_editor,_log);
+		treeEditor.exportLog = false;
+		return treeEditor;
+	}
+	
+	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
+	{
+		LoggingNodeHook hook = new LoggingNodeHook(_e);
+		Either<Error,T> either = editor.edit(root,_path,hook);
+		if(either.isA()){
+			return DefaultEither.newA(either.a());
+		}
+		
+		T newNode = either.b();
+		OperationLog newLog = hook.getLog();
+		
+		IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
+			@Override
+			public TreeOperation conv(NodeOperation _b){
+				return new DefaultTreeOperation(_path,_b);
+			}
+		};
+		
+		Iterable<TreeOperation> iterable = new IterableConverter<TreeOperation,NodeOperation>(newLog,converter);
+		DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog(iterable,newLog.length());
+		TreeOperationLog newTreeOpLog = log.append(treeOperationLog);
+		
+		JungleTreeEditor newEditor;
+		if(exportLog) {
+			newEditor = new NetworkDefaultJungleTreeEditor<T>(treeName, newNode,txManager,editor,newTreeOpLog);
+		} else {
+			newEditor = NetworkDefaultJungleTreeEditor.NewLocalJungleTreeEditor(treeName, newNode, txManager, editor, newTreeOpLog);
+		}
+		return DefaultEither.newB(newEditor);
+	}
+	
+	@Override
+	public Either<Error,JungleTreeEditor> addNewChildAt(NodePath _path, int _pos)
+	{
+		AppendChildAt appendChildAt = new AppendChildAt(_pos);
+		return _edit(_path,appendChildAt);
+	}
+
+	@Override
+	public Either<Error,JungleTreeEditor> deleteChildAt(NodePath _path, int _pos)
+	{
+		DeleteChildAt deleteChildAt = new DeleteChildAt(_pos);
+		return _edit(_path,deleteChildAt);
+	}
+
+	@Override
+	public Either<Error,JungleTreeEditor> putAttribute(NodePath _path,String _key,ByteBuffer _value)
+	{
+		PutAttribute putAttribute = new PutAttribute(_key,_value);
+		return _edit(_path,putAttribute);
+	}
+
+	@Override
+	public Either<Error,JungleTreeEditor> deleteAttribute(NodePath _path, String _key)
+	{
+		DeleteAttribute deleteAttribute = new DeleteAttribute(_key);
+		return _edit(_path,deleteAttribute);
+	}
+
+	@Override
+	public Either<Error,JungleTreeEditor> edit(NodePath _path,NodeEditor _editor)
+	{
+		return _edit(_path,_editor);
+	}
+
+	@Override
+	public Either<Error,JungleTreeEditor> success()
+	{
+		Either<Error,TransactionManager<T>> either = txManager.commit(root,log);
+		if(either.isA()){
+			return DefaultEither.newA(either.a());
+		}
+		if(exportLog) {
+			try {
+				putTreeOperationLog(log);
+			} catch (IOException e) {
+				return DefaultEither.newA(either.a());
+			}	
+		}
+
+		TransactionManager<T> newTxManager = either.b();
+		JungleTreeEditor newTreeEditor = new NetworkDefaultJungleTreeEditor<T>(treeName, root,newTxManager,editor);
+		
+		return DefaultEither.newB(newTreeEditor);
+	}
+
+	@Override
+	public String getID()
+	{
+		return txManager.getUUID();
+	}
+
+	@Override
+	public String getRevision()
+	{
+		return Long.toString(txManager.getRevision());
+	}
+
+	@Override
+	public Node getRoot()
+	{
+		return root.getAsNode();
+	}
+	
+	public String getTreeName() {
+		return treeName;
+	}
+	
+	public TreeOperationLog getTreeOperationLog() {
+		return log;
+	}
+
+	public void putTreeOperationLog(Iterable<TreeOperation> newLog) throws IOException {
+		String uuid = getID();
+		String treeName = getTreeName();
+		String updaterName = getID();
+		String revision = getRevision();
+		putDataSegment(uuid, treeName, updaterName, newLog, revision);
+	}
+	
+	public void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable<TreeOperation> newLog, String nextRevision) throws IOException {
+		NetworkTreeOperationLog netLog = new NetworkTreeOperationLog(_uuid, _treeName,newLog);
+		NullCodeSegment cs = new NullCodeSegment();
+		cs.ods.put("log", netLog);
+		cs.execute(); /* Do nothing CodeSegment */
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/jungle/transaction/NetworkTransactionManager.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,94 @@
+package alice.jungle.transaction;
+
+import java.util.Iterator;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+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;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
+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.TransactionManager;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class NetworkTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> 
+{
+
+	private final AtomicReservableReference<TreeContext<T>> repository;
+	private final TreeContext<T> tip;
+	private final ChangeListWriter writer;
+	private final String uuid;	
+	private final String treeName;	
+	
+	public NetworkTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip,
+			AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
+	{
+		repository = _repository;
+		tip = _tip;
+		writer = _writer;
+		uuid = _uuid;
+		treeName = _treeName;
+	}
+	
+	@Override
+	public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) {
+		ChangeSet cs = tip.getChangeSet();
+		long currentRevision = cs.revision();
+		long nextRevision = currentRevision + 1;
+		
+		ChangeList list = new ChangeList() {
+			@Override
+			public Iterator<TreeOperation> iterator(){
+				return _log.iterator();
+			}
+			@Override
+			public String uuid() {
+				return uuid;
+			}
+			@Override
+			public String getTreeName() {
+				return treeName;
+			}
+		};
+		
+		Node root = _newRoot.getAsNode();
+		DefaultChangeSet newCs = new DefaultChangeSet(root, cs, list, uuid, treeName, nextRevision);
+		DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_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) {
+			return DefaultEither.newA((Error)new DefaultError());
+		}
+		reservation.confirm();
+		TransactionManager<T> txManager = new NetworkTransactionManager<T>(treeName, writer, newContext, repository, uuid);
+		return DefaultEither.newB(txManager);
+	}
+
+	@Override
+	public long getRevision() 
+	{
+		ChangeSet cs = tip.getChangeSet();
+		return cs.revision();
+	}
+
+	@Override
+	public String getUUID() {
+		return uuid;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/BoardMessage.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,8 @@
+package jungle.app.bbs;
+
+public interface BoardMessage
+{
+	public String getUUID();
+	public String getAuthor();
+	public String getMessage();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/BulletinBoard.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,11 @@
+package jungle.app.bbs;
+
+public interface BulletinBoard
+{
+	public Iterable<String> getBoards();
+	public void createBoards(String _name,String _author,String _initMessage,String _editKey);
+	public void createBoardMessage(String _board,String _author,String _message,String _editKey);
+	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey);
+	
+	public Iterable<BoardMessage> getMessages(String _boardName);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/CassandraBulletinBoard.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,192 @@
+package jungle.app.bbs;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.cassandra.locator.SimpleStrategy;
+
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.cassandra.serializers.UUIDSerializer;
+import me.prettyprint.cassandra.service.CassandraHost;
+import me.prettyprint.cassandra.service.template.SuperCfResult;
+import me.prettyprint.cassandra.service.template.SuperCfUpdater;
+import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
+import me.prettyprint.cassandra.utils.TimeUUIDUtils;
+import me.prettyprint.hector.api.Cluster;
+import me.prettyprint.hector.api.Keyspace;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
+import me.prettyprint.hector.api.ddl.ColumnType;
+import me.prettyprint.hector.api.ddl.ComparatorType;
+import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
+import me.prettyprint.hector.api.factory.HFactory;
+import me.prettyprint.hector.api.query.QueryResult;
+import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
+import me.prettyprint.hector.api.query.SuperSliceQuery;
+
+public class CassandraBulletinBoard implements BulletinBoard
+{
+	private final String address;
+	private final String clusterName;
+	private final Cluster cluster;
+	private final String keyspace;
+	
+	private static final String COLUMN_FAMILY_BOARD = "boards";
+	
+	public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName)
+	{
+		address = _address;
+		clusterName = _clusterName;
+		keyspace = _keyspaceName;
+		cluster = HFactory.getOrCreateCluster(clusterName,address);
+		
+		initialize();
+	}
+	
+	private void initialize()
+	{
+		if(cluster.describeKeyspace(keyspace) == null){
+			KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace,
+					SimpleStrategy.class.getName(),1,Collections.<ColumnFamilyDefinition> emptyList());
+			cluster.addKeyspace(keyspaceDefinition,false);
+			ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE);
+			columnFamilyDefinition.setColumnType(ColumnType.SUPER);
+			cluster.addColumnFamily(columnFamilyDefinition);
+		}
+	}
+	
+	public Iterable<String> getBoards()
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
+		RangeSuperSlicesQuery<String,UUID,String,String> query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
+				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
+		query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0);
+		
+		QueryResult<OrderedSuperRows<String,UUID,String,String>> result = query.execute();
+		OrderedSuperRows<String,UUID,String,String> rows = result.get();
+		List<SuperRow<String,UUID,String,String>> list = rows.getList();
+		
+		IterableConverter.Converter<String,SuperRow<String,UUID,String,String>> converter
+			= new IterableConverter.Converter<String, SuperRow<String,UUID,String,String>>(){
+				public String conv(SuperRow<String, UUID, String, String> _b) {
+					return _b.getKey();
+				}
+			};
+		
+		return new IterableConverter<String,SuperRow<String,UUID,String,String>>(list,converter);
+	}
+	
+	private static final String COLUMN_MESSAGE_AUTHOR = "author";
+	private static final String COLUMN_MESSAGE_BODY = "message";
+	private static final String COLUMN_MESSAGE_EDIT_KEY = "edit";
+
+	public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		
+		SuperCfUpdater<String,UUID,String> updater = template.createUpdater(_name,_time);
+		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
+		updater.setString(COLUMN_MESSAGE_BODY,_message);
+		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
+		
+		template.update(updater);
+	}
+	
+	public void createBoards(String _name,String _author,String _initMessage,String _editKey)
+	{
+		UUID time = TimeUUIDUtils.getTimeUUID(0);
+		createBoardMessage(time,_name,_author,_initMessage,_editKey);
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
+		SuperSliceQuery<String, UUID, String, String> query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
+		
+		UUID start = TimeUUIDUtils.getTimeUUID(0);
+		query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100);
+		
+		QueryResult<SuperSlice<UUID, String, String>> result = query.execute();
+		SuperSlice<UUID,String,String> ss = result.get();
+		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
+		
+		IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>> converter =
+				new IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>>(){
+					public BoardMessage conv(HSuperColumn<UUID, String, String> _b){
+						UUID uuid = _b.getName();
+						String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue();
+						String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue();
+						BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString());
+						return bm;
+					}
+				};
+		
+		
+		return new IterableConverter<BoardMessage,HSuperColumn<UUID,String,String>>(list,converter);
+	}
+	
+	private static class BoardMessageImpl implements BoardMessage
+	{
+		private final String author;
+		private final String message;
+		private final String uuid;
+		
+		public BoardMessageImpl(String _author,String _message,String _uuid)
+		{
+			author = _author;
+			message = _message;
+			uuid = _uuid;
+		}
+
+		public String getAuthor()
+		{
+			return author;
+		}
+
+		public String getMessage()
+		{
+			return message;
+		}
+
+		public String getUUID()
+		{
+			return uuid;
+		}
+	}
+
+	public void createBoardMessage(String _board, String _author, String _message,String _editKey)
+	{
+		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
+		createBoardMessage(time,_board,_author,_message,_editKey);
+	}
+
+	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
+		UUID time = UUID.fromString(_uuid);
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		
+		SuperCfResult<String,UUID,String> result = template.querySuperColumn(_board,time);
+		String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY);
+		if(!editKey.equals(editKey)){
+			return;
+		}
+		
+		SuperCfUpdater<String, UUID, String> updater = template.createUpdater(_board,time);
+		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
+		updater.setString(COLUMN_MESSAGE_BODY,_message);
+		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
+		
+		template.update(updater);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,40 @@
+package jungle.app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CreateBoardMessageServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_MESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CreateBoardMessageServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	@Override
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		
+		try{
+			bbs.createBoardMessage(boardName,author,msg,key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/CreateBoardServlet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,39 @@
+package jungle.app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CreateBoardServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_INITMESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CreateBoardServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		
+		try{
+			bbs.createBoards(boardName,author,msg,key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/DistributeApp.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,16 @@
+package jungle.app.bbs;
+
+
+import alice.jungle.remote.RemoteConfig;
+import jungle.app.bbs.codesegment.StartBBSCodeSegment;
+import alice.topology.node.TopologyNode;
+
+
+public class DistributeApp 
+{
+    public static void main( String[] args ) throws Exception
+    {
+   		RemoteConfig conf = new RemoteConfig(args);
+   		new TopologyNode(conf, new StartBBSCodeSegment(conf.bbsPort));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/EditMessageServlet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,64 @@
+package jungle.app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class EditMessageServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_MSGID = "uuid";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_MESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public EditMessageServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = _req.getParameter(PARAM_BOARD_NAME);
+		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
+		
+		
+		try{
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>edit message</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p>Author : <input type='text' name='author'/>" +
+					"<input type='hidden' name='key' value='"+uuid+"'/>" +
+					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
+			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
+		
+		try{
+			bbs.editMessage(boardName, uuid, author, msg, key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/HectorSample.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,70 @@
+package jungle.app.bbs;
+
+import java.util.List;
+import java.util.UUID;
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.cassandra.serializers.UUIDSerializer;
+import me.prettyprint.cassandra.service.template.SuperCfUpdater;
+import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
+import me.prettyprint.cassandra.utils.TimeUUIDUtils;
+import me.prettyprint.hector.api.*;
+import me.prettyprint.hector.api.beans.HColumn;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+import me.prettyprint.hector.api.factory.HFactory;
+import me.prettyprint.hector.api.query.QueryResult;
+import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
+import me.prettyprint.hector.api.query.SuperSliceQuery;
+
+public class HectorSample
+{
+	public static void main(String _args[])
+	{
+		Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160");
+		
+		Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster);
+		/*
+		ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE);
+		newCF.setColumnType(ColumnType.SUPER);
+		myCluster.addColumnFamily(newCF);
+		*/
+		
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,"boards",StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
+		SuperCfUpdater<String,UUID,String> updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0));
+		updater.setString("name","peter");
+		updater.setString("message",time.toString());
+		
+		template.update(updater);
+		
+		UUID start = TimeUUIDUtils.getTimeUUID(0);
+		
+		SuperSliceQuery<String, UUID, String, String> sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
+		sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100);
+		
+		QueryResult<SuperSlice<UUID,String,String>> results = sq.execute();
+		
+		SuperSlice<UUID,String,String> ss = results.get();
+		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
+		for(HSuperColumn<UUID,String,String> sc : list){
+			HColumn<String,String> sub = sc.getSubColumnByName("name");
+			System.out.println(sub.getValue());
+			sub = sc.getSubColumnByName("message");
+			System.out.println(sub.getValue());
+		}
+		
+		RangeSuperSlicesQuery<String,UUID,String,String> rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
+				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
+		rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc");
+		
+		QueryResult<OrderedSuperRows<String,UUID,String,String>> rsqResult = rsq.execute();
+		OrderedSuperRows<String, UUID, String, String> rows = rsqResult.get();
+		for(SuperRow<String, UUID, String, String>  row : rows.getList()){
+			System.out.println(row.getKey());
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/IterableConverter.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,52 @@
+package jungle.app.bbs;
+
+import java.util.Iterator;
+
+public class IterableConverter<A,B> implements Iterable<A>
+{
+	private final Iterable<B> iterable;
+	private final Converter<A,B> converter;
+	
+	public IterableConverter(Iterable<B> _iterable,Converter<A,B> _converter)
+	{
+		iterable = _iterable;
+		converter = _converter;
+	}
+	
+	public Iterator<A> iterator()
+	{
+		return new IteratorConverter<A,B>(iterable.iterator(),converter);
+	}
+	
+	private static final class IteratorConverter<A,B> implements Iterator<A>
+	{
+		private final Iterator<B> iterator;
+		private final Converter<A,B> converter;
+		
+		public IteratorConverter(Iterator<B> _iterator,Converter<A,B> _converter)
+		{
+			iterator = _iterator;
+			converter = _converter;
+		}
+		
+		public boolean hasNext()
+		{
+			return iterator.hasNext();
+		}
+
+		public A next()
+		{
+			return converter.conv(iterator.next());
+		}
+
+		public void remove()
+		{
+			iterator.remove();
+		}
+	}
+
+	public static interface Converter<A,B>
+	{
+		public A conv(B _b);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/JungleManager.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,127 @@
+package jungle.app.bbs;
+
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+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.Command;
+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.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+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 JungleManager {
+	private static JungleManager jm = new JungleManager();
+	private Jungle jungle;
+	private static int NOT_CHANGE_POSITION = 0;
+
+	private JungleManager() {
+		jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser()));
+	}
+	
+	public static void setJungle(Jungle _j) {
+		jm.jungle = _j;
+	}
+	
+	public static Jungle getJungle() {
+		return jm.jungle;
+	}
+	
+	public static JungleTree createNewTree(String name) {
+		return jm.jungle.createNewTree(name);		
+	}
+
+	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) {
+		JungleTreeEditor editor = _editor;
+		Either<Error, JungleTreeEditor> either = null;
+		for (TreeOperation op : _log) {
+			either = _edit(editor, op, pos);
+			if(either.isA()) {
+				return either;
+			}
+			editor = either.b();
+		}
+		return either;
+	}
+	
+	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
+			TreeOperation op, int _pos) {
+		NodePath path = new DefaultNodePath();
+		NodeOperation nodeOp = op.getNodeOperation();
+		int pos = _pos;
+		if (_pos == NOT_CHANGE_POSITION ) {
+			pos = nodeOp.getPosition();
+		}
+		Command c = nodeOp.getCommand();
+		String key = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			path = op.getNodePath();
+			key = nodeOp.getKey();
+			ByteBuffer value = nodeOp.getValue();
+			return editor.putAttribute(path, key, value);
+		case DELETE_ATTRIBUTE:
+			key = nodeOp.getKey();
+			return editor.deleteAttribute(path, key);
+		case APPEND_CHILD:
+			return editor.addNewChildAt(path, pos);
+		case DELETE_CHILD:
+			return editor.deleteChildAt(path, 0);
+		}
+		return null;
+	}
+	
+	public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) {
+		String treeName = netLog.getTreeName();
+		Jungle jungle = JungleManager.getJungle(); 
+		if (jungle.getTreeByName(treeName) == null) {
+			if(null == jungle.createNewTree(treeName)){
+				throw new IllegalStateException();
+			}
+		}
+		JungleTree tree = jungle.getTreeByName(treeName);
+		JungleTreeEditor editor = tree.getLocalTreeEditor();
+
+		//		int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp());
+		int pos = 0;
+		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, netLog, pos);
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		either = editor.success();
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		return either;
+	}
+	
+	private static int calculatePosition(Node node, long newNodeTimeStamp) {
+		int count = 0;
+		long childTimeStamp = 0;
+		for(Iterator<Node> iter = node.getChildren().iterator();iter.hasNext();) {
+			Node n = iter.next();
+			if(n.getAttributes().get("timestamp") == null) {
+				return NOT_CHANGE_POSITION;
+			}
+			if(n.getAttributes().get("timestamp") != null) {
+				childTimeStamp = n.getAttributes().get("timestamp").getLong();
+				if (newNodeTimeStamp < childTimeStamp) {
+					break;
+				}
+			}
+			count++;
+		}
+		return count;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,231 @@
+package jungle.app.bbs;
+
+import java.nio.ByteBuffer;
+import java.util.Date;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import alice.jungle.core.NetworkDefaultJungle;
+import alice.jungle.persistent.AliceJournal;
+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.Children;
+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.store.trasnformer.EditableNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
+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;
+
+public class NetworkJungleBulletinBoard implements BulletinBoard
+{
+	private final Jungle jungle;
+	
+	public NetworkJungleBulletinBoard(String _uuid)
+	{
+		jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser()));	
+		jungle.createNewTree("boards");
+		JungleManager.setJungle(jungle);
+	}
+
+	public Iterable<String> getBoards()
+	{
+		JungleTree tree = jungle.getTreeByName("boards");
+		Node node = tree.getRootNode();
+		Children<Node> chs = node.getChildren();
+		
+		IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){
+			public String conv(Node _b) {
+				ByteBuffer e = _b.getAttributes().get("name");
+				return new String(e.array());
+			}
+		};
+		
+		return new IterableConverter<String,Node>(chs,converter);
+	}
+
+	public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
+	{
+		if(null == jungle.createNewTree(_name)){
+			throw new IllegalStateException();
+		}
+		
+		JungleTree tree = jungle.getTreeByName("boards");
+		JungleTreeEditor editor = tree.getTreeEditor();
+		DefaultNodePath root = new DefaultNodePath();
+		Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		
+		either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes()));
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		Either<Error,JungleTreeEditor> result = editor.success();
+		if(result.isA()){
+			throw new IllegalStateException();
+		}
+		final long timestamp = new Date().getTime();
+
+		
+		tree = jungle.getTreeByName(_name);
+		editor = tree.getTreeEditor();
+		either = editor.addNewChildAt(root,0);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		
+		NodeEditor e = new NodeEditor(){
+			public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+				_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+				_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
+				_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+				ByteBuffer tBuffer = ByteBuffer.allocate(16);
+				_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+				return DefaultEither.newB(_e);
+			}
+		};
+		
+		either = editor.edit(root.add(0),e);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		editor.success();
+		
+	}
+
+	public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
+	{
+		JungleTree tree = jungle.getTreeByName(_board);
+		if(tree == null){
+			throw new IllegalStateException();
+		}
+		
+		Either<Error, JungleTreeEditor> either;
+		do{
+			Node node = tree.getRootNode();
+			int size = node.getChildren().size();
+			DefaultNodePath path = new DefaultNodePath();
+		
+			JungleTreeEditor editor = tree.getTreeEditor();
+			either = editor.addNewChildAt(path,size);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			final long timestamp = new Date().getTime();
+			NodeEditor e = new NodeEditor(){
+				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
+					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+					ByteBuffer tBuffer = ByteBuffer.allocate(16);
+					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+					return DefaultEither.newB(_e);
+				}
+			};
+			path = path.add(size);
+			either = editor.edit(path,e);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+
+		}while(either.isA());
+		/* Put DataSegment */
+	}
+
+	public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
+	{
+		for(;;) {
+			DefaultNodePath path = new DefaultNodePath();
+			path = path.add(Integer.parseInt(_uuid));
+		
+			JungleTree tree = jungle.getTreeByName(_board);
+			JungleTreeEditor editor = tree.getTreeEditor();
+			final long timestamp = new Date().getTime(); 
+			NodeEditor e = new NodeEditor(){
+				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
+					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+					ByteBuffer tBuffer = ByteBuffer.allocate(16);
+					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+				return DefaultEither.newB(_e);
+				}
+			};
+		
+			Either<Error, JungleTreeEditor> either = editor.edit(path,e);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+			if(!either.isA()) {
+				return;
+			}
+		}
+
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName)
+	{
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		Node node = tree.getRootNode();
+		Children<Node> chs = node.getChildren();
+		
+		final AtomicInteger counter = new AtomicInteger(0);
+		IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){
+			public BoardMessage conv(Node _b) {
+				String uuid = Integer.toString(counter.get());
+				String author = new String(_b.getAttributes().get("author").array());
+				String message = new String(_b.getAttributes().get("mes").array());
+				counter.incrementAndGet();
+				return new BoardMessageImpl(author,message,uuid);
+			}
+		};
+		
+		return new IterableConverter<BoardMessage,Node>(chs,converter);
+	}
+	
+
+	
+	private static class BoardMessageImpl implements BoardMessage
+	{
+		private final String author;
+		private final String message;
+		private final String uuid;
+		
+		public BoardMessageImpl(String _author,String _message,String _uuid)
+		{
+			author = _author;
+			message = _message;
+			uuid = _uuid;
+		}
+
+		public String getAuthor()
+		{
+			return author;
+		}
+
+		public String getMessage()
+		{
+			return message;
+		}
+
+		public String getUUID()
+		{
+			return uuid;
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,60 @@
+package jungle.app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ShowBoardMessageServlet extends HttpServlet
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final BulletinBoard bbs;
+	private final String createBoardMessagePath;
+	private final String editMessagePath;
+	
+	private static final String PARAM_BOARD_NAME = "bname";
+
+	public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath)
+	{
+		bbs = _bbs;
+		createBoardMessagePath = _createBoardMessagePath;
+		editMessagePath = _editMessagePath;
+	}
+
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = _req.getParameter(PARAM_BOARD_NAME);
+		
+		try{
+			printBoard(bname,_res.getWriter());
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+		
+	}
+	
+	private void printBoard(String _bname,PrintWriter _pw) throws Exception
+	{
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>"+_bname+"</h1>\n");
+		
+		_pw.write("<form action='"+createBoardMessagePath+"' method='POST'\n");
+		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='"+_bname+"'/> EditKey : <input type='text' name='key'/></p>\n");
+		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<p><input type='submit' value='submit'/></p>\n");
+		
+		for(BoardMessage msg : bbs.getMessages(_bname)){
+			_pw.write("<hr/>");
+			_pw.write("<p><b>"+msg.getAuthor()+"</b></p>");
+			_pw.write("<p>"+msg.getMessage()+"</p>");
+			_pw.write("<small><a href='"+editMessagePath+"?bname="+_bname+"&uuid="+msg.getUUID()+"'>edit</a></small>");
+		}
+		
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/ShowBoardsServlet.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,55 @@
+package jungle.app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ShowBoardsServlet extends HttpServlet
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final BulletinBoard bbs;
+	private final String createBoardPath;
+	private final String showBoardMessagePath;
+
+	public ShowBoardsServlet(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath)
+	{
+		bbs = _bbs;
+		createBoardPath = _createBoardPath;
+		showBoardMessagePath = _showBoardMessagePath;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		try{
+			printBoard(_res.getWriter());
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+		
+	}
+	
+	private void printBoard(PrintWriter _pw) throws Exception
+	{
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>BBS</h1>\n");
+		_pw.write("<form action='"+createBoardPath+"' method='POST'\n");
+		_pw.write("<p>Create new board.</p>");
+		_pw.write("<p>BoardName : <input type='text' name='bname'/></p>\n");
+		_pw.write("<p>Author : <input type='text' name='author'/> EditKey : <input type='text' name='key'/></p>\n");
+		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<p><input type='submit' value='submit'/></p><hr/>\n");
+		
+		_pw.write("<h2>list of boards</h2>");
+		for(String board : bbs.getBoards()){
+			_pw.write("<p><a href='"+showBoardMessagePath+"?bname="+board+"'>"+board+"</a></p>");
+		}
+		
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,51 @@
+package jungle.app.bbs.codesegment;
+
+
+
+import java.util.List;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jungle.app.bbs.JungleManager;
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class LogUpdateCodeSegment extends CodeSegment {
+	
+	Receiver log = ids.create(CommandType.PEEK);
+	Receiver clist = ids.create(CommandType.PEEK);
+	
+	
+	public LogUpdateCodeSegment() {
+		log.setKey("log");
+		clist.setKey("_CLIST");;
+	}
+	
+	public LogUpdateCodeSegment(int index) {
+		log.setKey("log", index);
+		clist.setKey("_CLIST");;
+	}
+	
+	public void run() {
+		int index = log.index;
+		NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
+		@SuppressWarnings("unchecked")
+		List<String> list = clist.asClass(List.class);
+		if (!log.from.equals("local")) {
+			Either<Error, JungleTreeEditor> either = JungleManager.update(netLog);
+			if(either.isA()) {
+				/* Should throw after new LogUpdateCodeSegment */
+				throw new IllegalStateException();				
+			}
+		}
+		for (String node : list) {
+			if (!node.equals(log.from)) {
+				ods.put(node, log.key, log.getVal());
+			}
+		}
+		new LogUpdateCodeSegment(index);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,12 @@
+package jungle.app.bbs.codesegment;
+
+import alice.codesegment.CodeSegment;
+
+public class NullCodeSegment extends CodeSegment {
+
+	@Override
+	public void run() {
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,77 @@
+package jungle.app.bbs.codesegment;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import javax.servlet.Servlet;
+
+import jungle.app.bbs.BulletinBoard;
+import jungle.app.bbs.CreateBoardMessageServlet;
+import jungle.app.bbs.CreateBoardServlet;
+import jungle.app.bbs.EditMessageServlet;
+import jungle.app.bbs.NetworkJungleBulletinBoard;
+import jungle.app.bbs.ShowBoardMessageServlet;
+import jungle.app.bbs.ShowBoardsServlet;
+import alice.jungle.datasegment.store.HashSetDataSegment;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.ServletHandler;
+import org.mortbay.jetty.servlet.ServletHolder;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class StartBBSCodeSegment extends CodeSegment {
+	
+	int bbsPort = 8080;
+	Receiver host = ids.create(CommandType.PEEK);
+	private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
+	
+	public StartBBSCodeSegment(int p) {
+		bbsPort = p;
+		host.setKey("host");	
+	}
+
+	public StartBBSCodeSegment() {
+		host.setKey("host");	
+	}
+	
+	public void run() {
+		System.out.println("StartBBSCodeSegment");
+		String name = host.asString();
+		System.out.println("name : "+ name);
+		Matcher matcher = pattern.matcher(name);
+		matcher.find();
+//		String type = matcher.group(1);
+		
+		/* Jetty registration */
+		BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name);
+    	String createBoardMessagePath = "/createBoardMessage";
+    	String createBoardPath = "/createBoard";
+    	String editMessagePath = "/editMessage";
+    	String showBoardMessagePath = "/showBoardMessage";
+    	
+    	Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
+    	Servlet createBoard = new CreateBoardServlet(cassaBBS);
+    	Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
+    	Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
+    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
+    	
+    	Server serv = new Server(bbsPort);
+    	ServletHandler context = new ServletHandler();
+    	context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
+    	context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
+    	context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
+    	context.addServletWithMapping(new ServletHolder(index),"/");
+    	context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
+    	serv.addHandler(context);
+    	try {
+			serv.start();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		new LogUpdateCodeSegment();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jungle/app/bbs/transformer/MergeBBS.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,22 @@
+package jungle.app.bbs.transformer;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class MergeBBS implements NodeEditor {
+	
+	
+	public MergeBBS() {
+		
+	}
+	
+	@Override
+	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
+	{
+		return _e.getChildren().deleteChildAt(0);
+	}	
+	
+
+}
--- a/src/test/alice/jungle/PersistenJournalTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-package test.alice.jungle;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-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.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-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 alice.jungle.operations.NetworkNodePath;
-import alice.jungle.persistence.JungleUpdater;
-import alice.jungle.persistence.PersistentChangeList;
-import alice.jungle.persistence.PersistentJournal;
-import alice.jungle.persistence.PersistentJungle;
-
-public class PersistenJournalTest {
-
-	public static void main(String[] args) throws IOException {
-		PersistentJournal journal = new PersistentJournal(
-				new File("./log/commit.log"));
-		Jungle jungle = new PersistentJungle(journal, "uuid",new DefaultTreeEditor(new DefaultTraverser()));
-		jungle.createNewTree("hoge");
-		JungleTree tree = jungle.getTreeByName("hoge");
-		JungleTreeEditor editor = tree.getTreeEditor();
-		NetworkNodePath path = new NetworkNodePath();
-		String key = "key";
-		ByteBuffer value = ByteBuffer.wrap("value".getBytes());
-		int pos = 0;
-		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
-		if(either.isA()){
-			System.out.println("Failed addNewChildAt");
-			System.exit(0);
-		}
-		editor = either.b();
-		either = editor.putAttribute(path, key,	value);
-		JungleTreeEditor e = either.b();
-		e.success();
-		journal.close();
-
-		PersistentJournal journal2 = new PersistentJournal();
-		journal2.setInputFile(new File("./log/commit.log"));
-		journal2.setOutputFile(new File("./log/commit2.log"));
-		Jungle jungle2 = new PersistentJungle(journal, "uuid2", new DefaultTreeEditor(new DefaultTraverser()));
-		ChangeListReader reader = journal2.getReader();
-		PersistentChangeList chList = (PersistentChangeList) reader.read();
-		for (; chList != null; chList = (PersistentChangeList) reader.read()) {
-			String treeName = chList.getTreeName();
-			JungleTree tree2 = jungle2.getTreeByName(treeName);
-			if(tree2 == null) {
-				tree2 = jungle2.createNewTree(treeName);
-			}
-			System.out.println("Tree name :"+treeName);
-			JungleTreeEditor editor2 = tree2.getTreeEditor();
-			Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList.getTreeOperationLog());
-			if (either2.isA()) {
-				System.err.println("JungleUpdater Error");
-				System.exit(0);
-			}
-			editor2 = either2.b();
-			editor2.success();
-			printChangeList(chList);
-			System.out.println();
-		}
-		JungleTree tree2 = jungle2.getTreeByName("hoge");
-		Node node = tree2.getRootNode();
-		System.out.println("Children size : "+node.getChildren().size());
-		
-		journal2.close();
-
-	}
-	
-	public static void printChangeList(ChangeList chList) {
-		for (TreeOperation op : chList) {
-			NodePath p = op.getNodePath();
-			NodeOperation nodeOp = op.getNodeOperation();
-			Command c = nodeOp.getCommand();
-			String str = "";
-			switch (c) {
-			case PUT_ATTRIBUTE:
-				String opKey = nodeOp.getKey();
-				ByteBuffer opValue = nodeOp.getValue();
-				if (opValue.limit() < 100) {
-					str = String.format("key:%s,value:%s", opKey,
-							new String(opValue.array()));
-				} else {
-					str = String.format("key:%s,value:%d", opKey,
-							opValue.limit());
-				}
-				break;
-			case DELETE_ATTRIBUTE:
-				str = String.format("key:%s", nodeOp.getKey());
-				break;
-			case APPEND_CHILD:
-				str = String.format("pos:%d", nodeOp.getPosition());
-				break;
-			case DELETE_CHILD:
-				str = String.format("pos:%d", nodeOp.getPosition());
-				break;
-			}
-			System.out.println(String.format("[%s:%s:%s]", c, p, str));
-		}
-		
-	}
-	
-}
--- a/src/test/alice/jungle/core/operations/NetworkAppendChildOperationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkAppendChildAtOperation;
-import junit.framework.TestCase;
-
-public class NetworkAppendChildOperationTest extends TestCase {
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(op);
-		NetworkAppendChildAtOperation mOp = msgpack.convert(v, NetworkAppendChildAtOperation.class);
-//		NodeOperation mOp = msgpack.convert(v, NodeOperation.class);
-		assertEquals(op.getCommand(), mOp.getCommand());
-		assertEquals(op.getPosition(), 1);
-		assertEquals(op.getPosition(), mOp.getPosition());
-	}
-}
--- a/src/test/alice/jungle/core/operations/NetworkDeleteAttributeOprationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkDeleteAttributeOperation;
-import junit.framework.TestCase;
-
-public class NetworkDeleteAttributeOprationTest extends TestCase {
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkDeleteAttributeOperation op = new NetworkDeleteAttributeOperation("hoge");
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(op);
-		NetworkDeleteAttributeOperation mOp = msgpack.convert(v, NetworkDeleteAttributeOperation.class);
-		assertEquals(op.getCommand(), mOp.getCommand());
-		assert(mOp.getKey().equals("hoge"));
-
-	}
-	
-	
-}
--- a/src/test/alice/jungle/core/operations/NetworkDeleteChildAtOperationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkDeleteChildAtOperation;
-import junit.framework.TestCase;
-
-public class NetworkDeleteChildAtOperationTest extends TestCase {
-
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkDeleteChildAtOperation op = new NetworkDeleteChildAtOperation(1);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(op);
-		NetworkDeleteChildAtOperation mOp = msgpack.convert(v, NetworkDeleteChildAtOperation.class);
-		assertEquals(op.getCommand(), mOp.getCommand());
-		assertEquals(op.getPosition(), mOp.getPosition());
-
-	}	
-	
-}
--- a/src/test/alice/jungle/core/operations/NetworkNodeOperationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkAppendChildAtOperation;
-import alice.jungle.operations.NetworkNodeOperation;
-import junit.framework.TestCase;
-
-public class NetworkNodeOperationTest extends TestCase {
-	
-	public void testMsgpackConvert() throws IOException {
-		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
-		NetworkNodeOperation nOp = new NetworkNodeOperation(op);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(nOp);
-		NetworkNodeOperation mOp = msgpack.convert(v, NetworkNodeOperation.class);
-		assertEquals(op.getCommand(), mOp.getCommand());
-		assertEquals(op.getPosition(), 1);
-		assertEquals(op.getPosition(), mOp.getPosition());
-	}
-
-}
--- a/src/test/alice/jungle/core/operations/NetworkPutAttributeOperationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkPutAttributeOperation;
-import junit.framework.TestCase;
-
-public class NetworkPutAttributeOperationTest extends TestCase {
-	
-	public void testMsgpackConvert() throws IOException {
-		ByteBuffer value = ByteBuffer.allocate(16);
-		value.put( "fuga".getBytes());
-		NetworkPutAttributeOperation op = new NetworkPutAttributeOperation("hoge", value);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(op);
-		NetworkPutAttributeOperation mOp = msgpack.convert(v, NetworkPutAttributeOperation.class);
-//		NodeOperation mOp = msgpack.convert(v, NodeOperation.class);
-		assertEquals(op.getCommand(), mOp.getCommand());
-		System.out.println(new String(op.getValue().array()));
-		assert((new String(op.getValue().array())).equals(new String(mOp.getValue().array())));
-	}
-
-}
--- a/src/test/alice/jungle/core/operations/NetworkTreeOperationLogTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkAppendChildAtOperation;
-import alice.jungle.operations.NetworkNodePath;
-import alice.jungle.operations.NetworkTreeOperationLog;
-import junit.framework.TestCase;
-
-public class NetworkTreeOperationLogTest extends TestCase {
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
-		NetworkNodePath path = new NetworkNodePath();
-		path.add(1).add(2);
-		NetworkTreeOperationLog log = new NetworkTreeOperationLog();
-		log.add(path, op);
-		log.add(path, op);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(log);
-		NetworkTreeOperationLog mLog = msgpack.convert(v, NetworkTreeOperationLog.class);
-		assertNotNull(mLog);
-
-	}
-	
-}
--- a/src/test/alice/jungle/core/operations/NetworkTreeOperationTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-package test.alice.jungle.core.operations;
-
-import java.io.IOException;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkAppendChildAtOperation;
-import alice.jungle.operations.NetworkNodePath;
-import alice.jungle.operations.NetworkTreeOperation;
-import junit.framework.TestCase;
-
-public class NetworkTreeOperationTest extends TestCase {
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
-		NetworkNodePath path = new NetworkNodePath();
-		path.add(1).add(2);
-		NetworkTreeOperation treeOp = new NetworkTreeOperation(path, op);
-		MessagePack msgpack = new MessagePack();
-		Value v = msgpack.unconvert(treeOp);
-		NetworkTreeOperation mOp = msgpack.convert(v, NetworkTreeOperation.class);
-		assertNotNull(mOp.getNodePath());
-		assertEquals(op.getCommand(), mOp.getNodeOperation().getCommand());
-	}
-	
-}
--- a/src/test/alice/jungle/datasegment/NetworkNodePathTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-package test.alice.jungle.datasegment;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.msgpack.MessagePack;
-import org.msgpack.type.Value;
-
-import alice.jungle.operations.NetworkNodePath;
-import junit.framework.TestCase;
-
-public class NetworkNodePathTest extends TestCase {
-
-	public void testMsgpackConvert() throws IOException {
-		NetworkNodePath path = new NetworkNodePath();
-		path = path.add(1).add(2).add(3);
-		MessagePack msgpack = new MessagePack();
-		Value value = msgpack.unconvert(path);
-		NetworkNodePath mPath = msgpack.convert(value, NetworkNodePath.class);
-		assertEquals(path.size(), mPath.size());
-		Iterator<Integer> iter1 = path.iterator();
-		Iterator<Integer> iter2 = mPath.iterator();
-		while(iter1.hasNext() & iter2.hasNext()) {
-			int i1 = iter1.next();
-			int i2 = iter2.next();
-			assertEquals(i1, i2);
-		}
-	}
-
-
-
-}
--- a/src/test/java/alice/codesegment/local/HasFieldCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/local/HasFieldCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.local;
+package alice.codesegment.local;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
--- a/src/test/java/alice/codesegment/local/StartLocalCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/local/StartLocalCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.local;
+package alice.codesegment.local;
 
 public class StartLocalCodeSegment {
 	
--- a/src/test/java/alice/codesegment/remote/ClientCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/remote/ClientCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.remote;
+package alice.codesegment.remote;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
--- a/src/test/java/alice/codesegment/remote/ClientFirstSetKey.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/remote/ClientFirstSetKey.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.remote;
+package alice.codesegment.remote;
 
 import alice.codesegment.CodeSegment;
 
--- a/src/test/java/alice/codesegment/remote/HostCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/remote/HostCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.remote;
+package alice.codesegment.remote;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
--- a/src/test/java/alice/codesegment/remote/HostFirstPut.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/remote/HostFirstPut.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.codesegment.remote;
+package alice.codesegment.remote;
 
 import alice.codesegment.CodeSegment;
 
--- a/src/test/java/alice/codesegment/remote/StartHostCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/codesegment/remote/StartHostCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,7 +1,7 @@
-package test.java.alice.codesegment.remote;
+package alice.codesegment.remote;
 
+import alice.jungle.remote.RemoteConfig;
 import alice.daemon.AliceDaemon;
-import alice.jungle.remote.RemoteConfig;
 
 public class StartHostCodeSegment {
 	
--- a/src/test/java/alice/jungle/CheckDoubleTreeAttr.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/CheckDoubleTreeAttr.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import java.nio.ByteBuffer;
 import java.util.Iterator;
--- a/src/test/java/alice/jungle/CopyAttrJungle2.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/CopyAttrJungle2.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,20 +1,17 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import java.io.IOException;
 
-import test.java.alice.jungle.log.example.PrintChildrenAttribute;
-
+import alice.jungle.datasegment.container.DefaultTreeOperationLogContainer;
 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.logger.DefaultTreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jungle.app.bbs.JungleManager;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
 
 public class CopyAttrJungle2 extends CodeSegment {
 	
--- a/src/test/java/alice/jungle/DoubleJungleManager.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/DoubleJungleManager.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import java.nio.ByteBuffer;
 
@@ -7,12 +7,9 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
 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.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
--- a/src/test/java/alice/jungle/HashSetConvertTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/HashSetConvertTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import java.util.HashSet;
 
--- a/src/test/java/alice/jungle/LocalDoubleJungleTree.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/LocalDoubleJungleTree.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/PersistenJournalTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,116 @@
+package alice.jungle;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import alice.jungle.operations.NetworkNodePath;
+import alice.jungle.persistent.JungleUpdater;
+import alice.jungle.persistent.PersistentChangeList;
+import alice.jungle.persistent.PersistentJournal;
+import alice.jungle.persistent.PersistentJungle;
+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.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+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 PersistenJournalTest {
+
+	public static void main(String[] args) throws IOException {
+		PersistentJournal journal = new PersistentJournal(
+				new File("./log/commit.log"));
+		Jungle jungle = new PersistentJungle(journal, "uuid",new DefaultTreeEditor(new DefaultTraverser()));
+		jungle.createNewTree("hoge");
+		JungleTree tree = jungle.getTreeByName("hoge");
+		JungleTreeEditor editor = tree.getTreeEditor();
+		NetworkNodePath path = new NetworkNodePath();
+		String key = "key";
+		ByteBuffer value = ByteBuffer.wrap("value".getBytes());
+		int pos = 0;
+		Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, pos);
+		if(either.isA()){
+			System.out.println("Failed addNewChildAt");
+			System.exit(0);
+		}
+		editor = either.b();
+		either = editor.putAttribute(path, key,	value);
+		JungleTreeEditor e = either.b();
+		e.success();
+		journal.close();
+
+		PersistentJournal journal2 = new PersistentJournal();
+		journal2.setInputFile(new File("./log/commit.log"));
+		journal2.setOutputFile(new File("./log/commit2.log"));
+		Jungle jungle2 = new PersistentJungle(journal, "uuid2", new DefaultTreeEditor(new DefaultTraverser()));
+		ChangeListReader reader = journal2.getReader();
+		PersistentChangeList chList = (PersistentChangeList) reader.read();
+		for (; chList != null; chList = (PersistentChangeList) reader.read()) {
+			String treeName = chList.getTreeName();
+			JungleTree tree2 = jungle2.getTreeByName(treeName);
+			if(tree2 == null) {
+				tree2 = jungle2.createNewTree(treeName);
+			}
+			System.out.println("Tree name :"+treeName);
+			JungleTreeEditor editor2 = tree2.getTreeEditor();
+			Either<Error, JungleTreeEditor> either2 = JungleUpdater.edit(editor2, chList.getTreeOperationLog());
+			if (either2.isA()) {
+				System.err.println("JungleUpdater Error");
+				System.exit(0);
+			}
+			editor2 = either2.b();
+			editor2.success();
+			printChangeList(chList);
+			System.out.println();
+		}
+		JungleTree tree2 = jungle2.getTreeByName("hoge");
+		Node node = tree2.getRootNode();
+		System.out.println("Children size : "+node.getChildren().size());
+		
+		journal2.close();
+
+	}
+	
+	public static void printChangeList(ChangeList chList) {
+		for (TreeOperation op : chList) {
+			NodePath p = op.getNodePath();
+			NodeOperation nodeOp = op.getNodeOperation();
+			Command c = nodeOp.getCommand();
+			String str = "";
+			switch (c) {
+			case PUT_ATTRIBUTE:
+				String opKey = nodeOp.getKey();
+				ByteBuffer opValue = nodeOp.getValue();
+				if (opValue.limit() < 100) {
+					str = String.format("key:%s,value:%s", opKey,
+							new String(opValue.array()));
+				} else {
+					str = String.format("key:%s,value:%d", opKey,
+							opValue.limit());
+				}
+				break;
+			case DELETE_ATTRIBUTE:
+				str = String.format("key:%s", nodeOp.getKey());
+				break;
+			case APPEND_CHILD:
+				str = String.format("pos:%d", nodeOp.getPosition());
+				break;
+			case DELETE_CHILD:
+				str = String.format("pos:%d", nodeOp.getPosition());
+				break;
+			}
+			System.out.println(String.format("[%s:%s:%s]", c, p, str));
+		}
+		
+	}
+	
+}
--- a/src/test/java/alice/jungle/PutAttrJungle1.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/PutAttrJungle1.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle;
+package alice.jungle;
 
 import java.nio.ByteBuffer;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkAppendChildOperationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,24 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkAppendChildAtOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkAppendChildOperationTest extends TestCase {
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(op);
+		NetworkAppendChildAtOperation mOp = msgpack.convert(v, NetworkAppendChildAtOperation.class);
+//		NodeOperation mOp = msgpack.convert(v, NodeOperation.class);
+		assertEquals(op.getCommand(), mOp.getCommand());
+		assertEquals(op.getPosition(), 1);
+		assertEquals(op.getPosition(), mOp.getPosition());
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkDeleteAttributeOprationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,25 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkDeleteAttributeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkDeleteAttributeOprationTest extends TestCase {
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkDeleteAttributeOperation op = new NetworkDeleteAttributeOperation("hoge");
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(op);
+		NetworkDeleteAttributeOperation mOp = msgpack.convert(v, NetworkDeleteAttributeOperation.class);
+		assertEquals(op.getCommand(), mOp.getCommand());
+		assert(mOp.getKey().equals("hoge"));
+
+	}
+	
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkDeleteChildAtOperationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,25 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkDeleteChildAtOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkDeleteChildAtOperationTest extends TestCase {
+
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkDeleteChildAtOperation op = new NetworkDeleteChildAtOperation(1);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(op);
+		NetworkDeleteChildAtOperation mOp = msgpack.convert(v, NetworkDeleteChildAtOperation.class);
+		assertEquals(op.getCommand(), mOp.getCommand());
+		assertEquals(op.getPosition(), mOp.getPosition());
+
+	}	
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkNodeOperationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,26 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkAppendChildAtOperation;
+import alice.jungle.operations.NetworkNodeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkNodeOperationTest extends TestCase {
+	
+	public void testMsgpackConvert() throws IOException {
+		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
+		NetworkNodeOperation nOp = new NetworkNodeOperation(op);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(nOp);
+		NetworkNodeOperation mOp = msgpack.convert(v, NetworkNodeOperation.class);
+		assertEquals(op.getCommand(), mOp.getCommand());
+		assertEquals(op.getPosition(), 1);
+		assertEquals(op.getPosition(), mOp.getPosition());
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkPutAttributeOperationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,28 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import alice.jungle.operations.NetworkPutAttributeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkPutAttributeOperationTest extends TestCase {
+	
+	public void testMsgpackConvert() throws IOException {
+		ByteBuffer value = ByteBuffer.allocate(16);
+		value.put( "fuga".getBytes());
+		NetworkPutAttributeOperation op = new NetworkPutAttributeOperation("hoge", value);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(op);
+		NetworkPutAttributeOperation mOp = msgpack.convert(v, NetworkPutAttributeOperation.class);
+//		NodeOperation mOp = msgpack.convert(v, NodeOperation.class);
+		assertEquals(op.getCommand(), mOp.getCommand());
+		System.out.println(new String(op.getValue().array()));
+		assert((new String(op.getValue().array())).equals(new String(mOp.getValue().array())));
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkTreeOperationLogTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,30 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkAppendChildAtOperation;
+import alice.jungle.operations.NetworkNodePath;
+import alice.jungle.operations.NetworkTreeOperationLog;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkTreeOperationLogTest extends TestCase {
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
+		NetworkNodePath path = new NetworkNodePath();
+		path.add(1).add(2);
+		NetworkTreeOperationLog log = new NetworkTreeOperationLog();
+		log.add(path, op);
+		log.add(path, op);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(log);
+		NetworkTreeOperationLog mLog = msgpack.convert(v, NetworkTreeOperationLog.class);
+		assertNotNull(mLog);
+
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/core/operations/NetworkTreeOperationTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,28 @@
+package alice.jungle.core.operations;
+
+import java.io.IOException;
+
+import alice.jungle.operations.NetworkAppendChildAtOperation;
+import alice.jungle.operations.NetworkNodePath;
+import alice.jungle.operations.NetworkTreeOperation;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkTreeOperationTest extends TestCase {
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkAppendChildAtOperation op = new NetworkAppendChildAtOperation(1);
+		NetworkNodePath path = new NetworkNodePath();
+		path.add(1).add(2);
+		NetworkTreeOperation treeOp = new NetworkTreeOperation(path, op);
+		MessagePack msgpack = new MessagePack();
+		Value v = msgpack.unconvert(treeOp);
+		NetworkTreeOperation mOp = msgpack.convert(v, NetworkTreeOperation.class);
+		assertNotNull(mOp.getNodePath());
+		assertEquals(op.getCommand(), mOp.getNodeOperation().getCommand());
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/test/java/alice/jungle/datasegment/NetworkNodePathTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -0,0 +1,33 @@
+package alice.jungle.datasegment;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import alice.jungle.operations.NetworkNodePath;
+
+import org.msgpack.MessagePack;
+import org.msgpack.type.Value;
+
+import junit.framework.TestCase;
+
+public class NetworkNodePathTest extends TestCase {
+
+	public void testMsgpackConvert() throws IOException {
+		NetworkNodePath path = new NetworkNodePath();
+		path = path.add(1).add(2).add(3);
+		MessagePack msgpack = new MessagePack();
+		Value value = msgpack.unconvert(path);
+		NetworkNodePath mPath = msgpack.convert(value, NetworkNodePath.class);
+		assertEquals(path.size(), mPath.size());
+		Iterator<Integer> iter1 = path.iterator();
+		Iterator<Integer> iter2 = mPath.iterator();
+		while(iter1.hasNext() & iter2.hasNext()) {
+			int i1 = iter1.next();
+			int i2 = iter2.next();
+			assertEquals(i1, i2);
+		}
+	}
+
+
+
+}
--- a/src/test/java/alice/jungle/log/example/ListTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/ListTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicInteger;
--- a/src/test/java/alice/jungle/log/example/LogReadCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/LogReadCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,8 +1,9 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+import alice.jungle.datasegment.container.DefaultTreeOperationLogContainer;
 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;
@@ -18,7 +19,6 @@
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
 
 public class LogReadCodeSegment extends CodeSegment {
 	
--- a/src/test/java/alice/jungle/log/example/LogSendTest.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/LogSendTest.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,11 +1,10 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
+import alice.jungle.datasegment.container.DefaultTreeOperationLogContainer;
 import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
-
 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;
--- a/src/test/java/alice/jungle/log/example/PrintChildrenAttribute.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/PrintChildrenAttribute.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.nio.ByteBuffer;
 
--- a/src/test/java/alice/jungle/log/example/StartCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/StartCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,10 +1,11 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.LinkedList;
 import java.util.List;
 
+import alice.jungle.datasegment.container.DefaultTreeOperationLogContainer;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation;
@@ -14,7 +15,6 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 import alice.codesegment.CodeSegment;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
 
 public class StartCodeSegment extends CodeSegment {
 
--- a/src/test/java/alice/jungle/log/example/TestCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/TestCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -16,7 +16,7 @@
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 import alice.jungle.core.NetworkDefaultJungle;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
+import alice.jungle.datasegment.container.DefaultTreeOperationLogContainer;
 import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
 
 import org.msgpack.type.Value;
--- a/src/test/java/alice/jungle/log/example/TestLocalAlice.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/TestLocalAlice.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example;
+package alice.jungle.log.example;
 
 import alice.daemon.AliceDaemon;
 import alice.daemon.Config;
--- a/src/test/java/alice/jungle/log/example/codesement/operation/ShowAttribute.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/codesement/operation/ShowAttribute.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example.codesement.operation;
+package alice.jungle.log.example.codesement.operation;
 
 import java.nio.ByteBuffer;
 
--- a/src/test/java/alice/jungle/log/example/codesement/operation/StartJungleCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/codesement/operation/StartJungleCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,16 +1,13 @@
-package test.java.alice.jungle.log.example.codesement.operation;
+package alice.jungle.log.example.codesement.operation;
 
 import java.io.IOException;
-import java.nio.ByteBuffer;
 
+import alice.jungle.datasegment.container.DefaultTreeOperationContainer;
 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.operations.DefaultTreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
 import jungle.app.bbs.JungleManager;
-import alice.codesegment.CodeSegment;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationContainer;
 
 public class StartJungleCodeSegment {
 	
--- a/src/test/java/alice/jungle/log/example/codesement/operation/TestPutAttributeCodeSegment.java	Mon Nov 25 18:13:03 2013 +0900
+++ b/src/test/java/alice/jungle/log/example/codesement/operation/TestPutAttributeCodeSegment.java	Tue Nov 26 06:43:10 2013 +0900
@@ -1,4 +1,4 @@
-package test.java.alice.jungle.log.example.codesement.operation;
+package alice.jungle.log.example.codesement.operation;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -8,9 +8,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
 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.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
@@ -18,15 +16,13 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jungle.app.bbs.JungleManager;
+import alice.jungle.datasegment.container.DefaultTreeOperationContainer;
+import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
 
-import org.msgpack.type.Value;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationContainer;
-import alice.jungle.datasegment.store.container.DefaultTreeOperationLogContainer;
-import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
 
 public class TestPutAttributeCodeSegment extends CodeSegment {