changeset 66:29127ac788a6

move some files
author one
date Tue, 20 Aug 2013 17:38:09 +0900
parents ebf42371454b
children 89e39301ccaa
files .classpath 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/ChildLogCheckCodeSegment.java src/jungle/app/bbs/codesegment/HashLogUpdateCodeSegment.java src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java src/jungle/app/bbs/codesegment/NullCodeSegmentForUpdate.java src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java src/jungle/app/bbs/transformer/MergeBBS.java src/jungle/test/alice/CopyAttrJungle2.java src/jungle/test/bbs/BoardMessage.java src/jungle/test/bbs/BulletinBoard.java src/jungle/test/bbs/CassandraBulletinBoard.java src/jungle/test/bbs/CreateBoardMessageServlet.java src/jungle/test/bbs/CreateBoardServlet.java src/jungle/test/bbs/DistributeApp.java src/jungle/test/bbs/EditMessageServlet.java src/jungle/test/bbs/HectorSample.java src/jungle/test/bbs/IterableConverter.java src/jungle/test/bbs/JungleManager.java src/jungle/test/bbs/NetworkJungleBulletinBoard.java src/jungle/test/bbs/ShowBoardMessageServlet.java src/jungle/test/bbs/ShowBoardsServlet.java src/jungle/test/bbs/codesegment/ChildLogCheckCodeSegment.java src/jungle/test/bbs/codesegment/HashLogUpdateCodeSegment.java src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java src/jungle/test/bbs/codesegment/NullCodeSegmentForUpdate.java src/jungle/test/bbs/codesegment/StartBBSCodeSegment.java src/jungle/test/bbs/transformer/MergeBBS.java src/jungle/test/codesegment/operation/ShowAttribute.java src/jungle/test/codesegment/operation/StartJungleCodeSegment.java src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java src/jungle/test/codesegment/persistence/TestJungle.java src/jungle/test/core/practice/LogReadCodeSegment.java src/jungle/test/core/practice/LogSendTest.java src/jungle/test/core/practice/PrintChildrenAttribute.java
diffstat 49 files changed, 1283 insertions(+), 1286 deletions(-) [+]
line wrap: on
line diff
--- a/.classpath	Wed Aug 14 17:44:09 2013 +0900
+++ b/.classpath	Tue Aug 20 17:38:09 2013 +0900
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry including="**/*.java" kind="src" path="src"/>
+	<classpathentry kind="src" path="src/test/"/>
 	<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"/>
--- a/src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Tue Aug 20 17:38:09 2013 +0900
@@ -1,5 +1,6 @@
 package alice.jungle.transaction;
 
+
 import java.nio.ByteBuffer;
 
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
@@ -152,6 +153,5 @@
 	public String getUpdaterName() {
 		return updaterName;
 	}
-
 	
 }
--- a/src/alice/jungle/transaction/NetworkTransactionManager.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/alice/jungle/transaction/NetworkTransactionManager.java	Tue Aug 20 17:38:09 2013 +0900
@@ -23,8 +23,8 @@
 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;
-import jungle.test.bbs.codesegment.LogUpdateCodeSegment;
-import jungle.test.bbs.codesegment.NullCodeSegmentForUpdate;
+import jungle.app.bbs.codesegment.LogUpdateCodeSegment;
+import jungle.app.bbs.codesegment.NullCodeSegmentForUpdate;
 
 public class NetworkTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> 
 {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/BoardMessage.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/BulletinBoard.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/CassandraBulletinBoard.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/CreateBoardMessageServlet.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/CreateBoardServlet.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/DistributeApp.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,18 @@
+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));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/EditMessageServlet.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/HectorSample.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/IterableConverter.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/JungleManager.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,125 @@
+package jungle.app.bbs;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+import alice.jungle.datasegment.store.operations.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.core.Node;
+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.DefaultTreeOperationLog;
+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 JungleManager {
+	private static JungleManager jm = new JungleManager();
+	private Jungle jungle;
+
+	private JungleManager() {
+
+	}
+	
+	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) {
+		DefaultNodePath path = new DefaultNodePath();
+		NodeOperation nodeOp = op.getNodeOperation();
+		Command c = nodeOp.getCommand();
+		String key = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			path = path.add(pos);
+			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(DefaultTreeOperationLogContainer container) {
+		DefaultTreeOperationLog log = null;
+		try {
+			log = container.convert();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		String treeName = container.getTreeName();
+		if (JungleManager.getJungle().getTreeByName(treeName) == null) {
+			if(null == JungleManager.getJungle().createNewTree(treeName)){
+				throw new IllegalStateException();
+			}
+		}
+		JungleTree tree = JungleManager.getJungle().getTreeByName(treeName);
+		JungleTreeEditor editor = tree.getTreeEditor();
+		int pos = checkTimeStamp(tree.getRootNode(), container.getTimeStamp(), container.getPosition());
+		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, log, pos);
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		either = editor.success();
+		if(either.isA()) {
+			throw new IllegalStateException();			
+		}
+		return either;
+	}
+	
+	
+	
+	private static int checkTimeStamp(Node node, long newNodeTimeStamp, int containerPosition) {
+		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 containerPosition;
+			}
+			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/jungle/app/bbs/NetworkJungleBulletinBoard.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,283 @@
+package jungle.app.bbs;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Date;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import alice.jungle.core.NetworkDefaultJungle;
+import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
+import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
+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.operations.TreeOperation;
+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.transaction.DefaultTreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
+import jungle.app.bbs.codesegment.HashLogUpdateCodeSegment;
+
+public class NetworkJungleBulletinBoard implements BulletinBoard
+{
+	private final Jungle jungle;
+	
+	public NetworkJungleBulletinBoard(String _serverName)
+	{
+		jungle = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName);	
+		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();
+		/* Put DataSegment */
+		try {
+			putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp);
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		
+		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();
+		/* Put DataSegment */
+		try {
+			putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp);
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		
+	}
+
+	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();
+			try {
+				NetworkDefaultJungleTreeEditor<DefaultTreeNode> netEditor = (NetworkDefaultJungleTreeEditor<DefaultTreeNode>) editor;
+				putTreeOperationLog(netEditor, size, timestamp);
+			} catch (IOException e1) {
+				e1.printStackTrace();
+			}
+		}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();
+			try {
+				putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, Integer.parseInt(_uuid), timestamp);
+			} catch (IOException e1) {
+				e1.printStackTrace();
+			}
+			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 void putTreeOperationLog(NetworkDefaultJungleTreeEditor<DefaultTreeNode> editor, int pos, long timestamp) throws IOException {
+		String uuid = editor.getID();
+		String treeName = editor.getTreeName();
+		String updaterName = editor.getUpdaterName();
+		String revision = editor.getRevision();
+		Iterable<TreeOperation> log = editor.getTreeOperationLog();
+		putDataSegment(uuid, treeName, updaterName, log, revision, pos,timestamp);
+	}
+	
+	private void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable<TreeOperation> _log, String nextRevision, int pos, long timestamp) throws IOException {
+		DefaultTreeOperationLogContainer container = new DefaultTreeOperationLogContainer();
+		container.setTreeName(_treeName);
+		container.setUUID(_uuid);
+		container.setUpdaterName(_updaterName);
+		container.setRevision(nextRevision);
+		container.setPosition(pos);
+		container.unconvert(_log);
+		container.setTimeStamp(timestamp);
+		HashLogUpdateCodeSegment cs = new HashLogUpdateCodeSegment();
+		cs.ods.put("log", container);
+		cs.ods.put("logString", container.getHashLogString());
+		/* If this node is not Root node, push log to parent node's DS */
+		if(!_updaterName.equals("node0")) {
+			cs.ods.put("parent", "childLog", container);
+		}
+	}
+
+	
+	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/jungle/app/bbs/ShowBoardMessageServlet.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/ShowBoardsServlet.java	Tue Aug 20 17:38:09 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/jungle/app/bbs/codesegment/ChildLogCheckCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,55 @@
+package jungle.app.bbs.codesegment;
+
+
+
+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.datasegment.HashSetDataSegment;
+import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
+
+public class ChildLogCheckCodeSegment extends CodeSegment {
+	
+	Receiver host = ids.create(CommandType.PEEK);
+	Receiver childLog = ids.create(CommandType.TAKE);
+	Receiver hashLog = ids.create(CommandType.PEEK);	
+	
+	public ChildLogCheckCodeSegment() {
+		host.setKey("host");
+		childLog.setKey("local","childLog");
+		hashLog.setKey("hashLog");
+	}
+
+	public ChildLogCheckCodeSegment(int index) {
+		host.setKey("host");
+		childLog.setKey("local","childLog", index);
+		hashLog.setKey("hashLog");
+	}
+
+	public void run() {
+		int index = childLog.index;
+		String hostName = host.asString();
+		DefaultTreeOperationLogContainer container = childLog.asClass(DefaultTreeOperationLogContainer.class);		
+		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
+		if(ds.hash.contains(container.getHashLogString())) {
+			ods.update("hashLog", ds);		
+			new LogUpdateCodeSegment(index);
+			return;
+		}
+		Either<Error, JungleTreeEditor> either = JungleManager.update(container);
+		if(either.isA()) {
+			throw new IllegalStateException();			
+		}
+		ds.hash.add(container.getHashLogString());
+		ods.update("hashLog", ds);
+		ods.put("log", container);
+		new ChildLogCheckCodeSegment(index);
+		if(!hostName.equals("node0")) {
+			ods.put("parent", "childLog", container);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/codesegment/HashLogUpdateCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,24 @@
+package jungle.app.bbs.codesegment;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.jungle.datasegment.HashSetDataSegment;
+
+public class HashLogUpdateCodeSegment extends CodeSegment {
+	
+	Receiver hashLog = ids.create(CommandType.PEEK);
+	Receiver logString = ids.create(CommandType.TAKE);
+	
+	public HashLogUpdateCodeSegment() {
+		hashLog.setKey("hashLog");
+		logString.setKey("logString");
+	}
+	
+	public void run() {
+		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
+		String str = logString.asString();
+		ds.hash.add(str);
+		ods.put("hashLog", ds);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,52 @@
+package jungle.app.bbs.codesegment;
+
+
+
+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.datasegment.HashSetDataSegment;
+import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
+
+public class LogUpdateCodeSegment extends CodeSegment {
+	
+	Receiver parentLog = ids.create(CommandType.PEEK);
+	Receiver host = ids.create(CommandType.PEEK);
+	Receiver hashLog = ids.create(CommandType.PEEK);
+	
+	public LogUpdateCodeSegment() {
+		parentLog.setKey("parent", "log");
+		host.setKey("host");
+		hashLog.setKey("hashLog");
+	}
+	
+	public LogUpdateCodeSegment(int index) {
+		parentLog.setKey("parent", "log", index);
+		host.setKey("host");
+		hashLog.setKey("hashLog");
+	}
+	
+	public void run() {
+		int index = parentLog.index;
+//		String hostName = host.asString();
+		DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class);
+		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
+		if(ds.hash.contains(container.getHashLogString())) {
+			ods.update("hashLog", ds);		
+			new LogUpdateCodeSegment(index);
+			return;
+		}
+		Either<Error, JungleTreeEditor> either = JungleManager.update(container);
+		if(either.isA()) {
+			throw new IllegalStateException();			
+		}
+		ds.hash.add(container.getHashLogString());
+		ods.update("hashLog", ds);		
+		ods.put("log", container);
+		new LogUpdateCodeSegment(index);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/codesegment/NullCodeSegmentForUpdate.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,11 @@
+package jungle.app.bbs.codesegment;
+
+import alice.codesegment.CodeSegment;
+
+public class NullCodeSegmentForUpdate extends CodeSegment{
+	
+	public void run() {
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -0,0 +1,89 @@
+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 ChildLogCheckCodeSegment();
+		HashSetDataSegment hashLog = new HashSetDataSegment();
+		ods.put("hashLog", hashLog);
+
+		int num = new Integer(matcher.group(2));
+		if (num != 0) {
+//			try {Thread.sleep(100);} catch(Exception e)  { e.printStackTrace(); }
+			new LogUpdateCodeSegment();
+		}
+
+
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/app/bbs/transformer/MergeBBS.java	Tue Aug 20 17:38:09 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/jungle/test/alice/CopyAttrJungle2.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/alice/CopyAttrJungle2.java	Tue Aug 20 17:38:09 2013 +0900
@@ -8,7 +8,7 @@
 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.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import jungle.test.core.practice.PrintChildrenAttribute;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
--- a/src/jungle/test/bbs/BoardMessage.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-package jungle.test.bbs;
-
-public interface BoardMessage
-{
-	public String getUUID();
-	public String getAuthor();
-	public String getMessage();
-}
--- a/src/jungle/test/bbs/BulletinBoard.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-package jungle.test.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/test/bbs/CassandraBulletinBoard.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-package jungle.test.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/test/bbs/CreateBoardMessageServlet.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-package jungle.test.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/test/bbs/CreateBoardServlet.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-package jungle.test.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/test/bbs/DistributeApp.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-package jungle.test.bbs;
-
-
-import jungle.test.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/test/bbs/EditMessageServlet.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-package jungle.test.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/test/bbs/HectorSample.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-package jungle.test.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/test/bbs/IterableConverter.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-package jungle.test.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/test/bbs/JungleManager.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-package jungle.test.bbs;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-
-import alice.jungle.datasegment.store.operations.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.core.Node;
-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.DefaultTreeOperationLog;
-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 JungleManager {
-	private static JungleManager jm = new JungleManager();
-	private Jungle jungle;
-
-	private JungleManager() {
-
-	}
-	
-	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) {
-		DefaultNodePath path = new DefaultNodePath();
-		NodeOperation nodeOp = op.getNodeOperation();
-		Command c = nodeOp.getCommand();
-		String key = "";
-		switch (c) {
-		case PUT_ATTRIBUTE:
-			path = path.add(pos);
-			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(DefaultTreeOperationLogContainer container) {
-		DefaultTreeOperationLog log = null;
-		try {
-			log = container.convert();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		String treeName = container.getTreeName();
-		if (JungleManager.getJungle().getTreeByName(treeName) == null) {
-			if(null == JungleManager.getJungle().createNewTree(treeName)){
-				throw new IllegalStateException();
-			}
-		}
-		JungleTree tree = JungleManager.getJungle().getTreeByName(treeName);
-		JungleTreeEditor editor = tree.getTreeEditor();
-		int pos = checkTimeStamp(tree.getRootNode(), container.getTimeStamp(), container.getPosition());
-		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, log, pos);
-		if(either.isA()) {
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		either = editor.success();
-		if(either.isA()) {
-			throw new IllegalStateException();			
-		}
-		return either;
-	}
-	
-	
-	
-	private static int checkTimeStamp(Node node, long newNodeTimeStamp, int containerPosition) {
-		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 containerPosition;
-			}
-			if(n.getAttributes().get("timestamp") != null) {
-				childTimeStamp = n.getAttributes().get("timestamp").getLong();
-				if (newNodeTimeStamp < childTimeStamp) {
-					break;
-				}
-			}
-			count++;
-		}
-		return count;
-	}
-}
--- a/src/jungle/test/bbs/NetworkJungleBulletinBoard.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,283 +0,0 @@
-package jungle.test.bbs;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.Date;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import alice.jungle.core.NetworkDefaultJungle;
-import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
-import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
-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.operations.TreeOperation;
-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.transaction.DefaultTreeNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
-import jungle.test.bbs.codesegment.HashLogUpdateCodeSegment;
-
-public class NetworkJungleBulletinBoard implements BulletinBoard
-{
-	private final Jungle jungle;
-	
-	public NetworkJungleBulletinBoard(String _serverName)
-	{
-		jungle = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName);	
-		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();
-		/* Put DataSegment */
-		try {
-			putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp);
-		} catch (IOException e1) {
-			e1.printStackTrace();
-		}
-		
-		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();
-		/* Put DataSegment */
-		try {
-			putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp);
-		} catch (IOException e1) {
-			e1.printStackTrace();
-		}
-		
-	}
-
-	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();
-			try {
-				NetworkDefaultJungleTreeEditor<DefaultTreeNode> netEditor = (NetworkDefaultJungleTreeEditor<DefaultTreeNode>) editor;
-				putTreeOperationLog(netEditor, size, timestamp);
-			} catch (IOException e1) {
-				e1.printStackTrace();
-			}
-		}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();
-			try {
-				putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, Integer.parseInt(_uuid), timestamp);
-			} catch (IOException e1) {
-				e1.printStackTrace();
-			}
-			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 void putTreeOperationLog(NetworkDefaultJungleTreeEditor<DefaultTreeNode> editor, int pos, long timestamp) throws IOException {
-		String uuid = editor.getID();
-		String treeName = editor.getTreeName();
-		String updaterName = editor.getUpdaterName();
-		String revision = editor.getRevision();
-		Iterable<TreeOperation> log = editor.getTreeOperationLog();
-		putDataSegment(uuid, treeName, updaterName, log, revision, pos,timestamp);
-	}
-	
-	private void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable<TreeOperation> _log, String nextRevision, int pos, long timestamp) throws IOException {
-		DefaultTreeOperationLogContainer container = new DefaultTreeOperationLogContainer();
-		container.setTreeName(_treeName);
-		container.setUUID(_uuid);
-		container.setUpdaterName(_updaterName);
-		container.setRevision(nextRevision);
-		container.setPosition(pos);
-		container.unconvert(_log);
-		container.setTimeStamp(timestamp);
-		HashLogUpdateCodeSegment cs = new HashLogUpdateCodeSegment();
-		cs.ods.put("log", container);
-		cs.ods.put("logString", container.getHashLogString());
-		/* If this node is not Root node, push log to parent node's DS */
-		if(!_updaterName.equals("node0")) {
-			cs.ods.put("parent", "childLog", container);
-		}
-	}
-
-	
-	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/test/bbs/ShowBoardMessageServlet.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-package jungle.test.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/test/bbs/ShowBoardsServlet.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-package jungle.test.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/test/bbs/codesegment/ChildLogCheckCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-package jungle.test.bbs.codesegment;
-
-
-
-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.test.bbs.JungleManager;
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.datasegment.HashSetDataSegment;
-import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
-
-public class ChildLogCheckCodeSegment extends CodeSegment {
-	
-	Receiver host = ids.create(CommandType.PEEK);
-	Receiver childLog = ids.create(CommandType.TAKE);
-	Receiver hashLog = ids.create(CommandType.PEEK);	
-	
-	public ChildLogCheckCodeSegment() {
-		host.setKey("host");
-		childLog.setKey("local","childLog");
-		hashLog.setKey("hashLog");
-	}
-
-	public ChildLogCheckCodeSegment(int index) {
-		host.setKey("host");
-		childLog.setKey("local","childLog", index);
-		hashLog.setKey("hashLog");
-	}
-
-	public void run() {
-		int index = childLog.index;
-		String hostName = host.asString();
-		DefaultTreeOperationLogContainer container = childLog.asClass(DefaultTreeOperationLogContainer.class);		
-		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
-		if(ds.hash.contains(container.getHashLogString())) {
-			ods.update("hashLog", ds);		
-			new LogUpdateCodeSegment(index);
-			return;
-		}
-		Either<Error, JungleTreeEditor> either = JungleManager.update(container);
-		if(either.isA()) {
-			throw new IllegalStateException();			
-		}
-		ds.hash.add(container.getHashLogString());
-		ods.update("hashLog", ds);
-		ods.put("log", container);
-		new ChildLogCheckCodeSegment(index);
-		if(!hostName.equals("node0")) {
-			ods.put("parent", "childLog", container);
-		}
-	}
-}
--- a/src/jungle/test/bbs/codesegment/HashLogUpdateCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-package jungle.test.bbs.codesegment;
-
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.datasegment.HashSetDataSegment;
-
-public class HashLogUpdateCodeSegment extends CodeSegment {
-	
-	Receiver hashLog = ids.create(CommandType.PEEK);
-	Receiver logString = ids.create(CommandType.TAKE);
-	
-	public HashLogUpdateCodeSegment() {
-		hashLog.setKey("hashLog");
-		logString.setKey("logString");
-	}
-	
-	public void run() {
-		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
-		String str = logString.asString();
-		ds.hash.add(str);
-		ods.put("hashLog", ds);
-	}
-}
--- a/src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-package jungle.test.bbs.codesegment;
-
-
-
-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.test.bbs.JungleManager;
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.datasegment.HashSetDataSegment;
-import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
-
-public class LogUpdateCodeSegment extends CodeSegment {
-	
-	Receiver parentLog = ids.create(CommandType.PEEK);
-	Receiver host = ids.create(CommandType.PEEK);
-	Receiver hashLog = ids.create(CommandType.PEEK);
-	
-	public LogUpdateCodeSegment() {
-		parentLog.setKey("parent", "log");
-		host.setKey("host");
-		hashLog.setKey("hashLog");
-	}
-	
-	public LogUpdateCodeSegment(int index) {
-		parentLog.setKey("parent", "log", index);
-		host.setKey("host");
-		hashLog.setKey("hashLog");
-	}
-	
-	public void run() {
-		int index = parentLog.index;
-//		String hostName = host.asString();
-		DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class);
-		HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
-		if(ds.hash.contains(container.getHashLogString())) {
-			ods.update("hashLog", ds);		
-			new LogUpdateCodeSegment(index);
-			return;
-		}
-		Either<Error, JungleTreeEditor> either = JungleManager.update(container);
-		if(either.isA()) {
-			throw new IllegalStateException();			
-		}
-		ds.hash.add(container.getHashLogString());
-		ods.update("hashLog", ds);		
-		ods.put("log", container);
-		new LogUpdateCodeSegment(index);
-	}
-}
--- a/src/jungle/test/bbs/codesegment/NullCodeSegmentForUpdate.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-package jungle.test.bbs.codesegment;
-
-import alice.codesegment.CodeSegment;
-
-public class NullCodeSegmentForUpdate extends CodeSegment{
-	
-	public void run() {
-		
-	}
-
-}
--- a/src/jungle/test/bbs/codesegment/StartBBSCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-package jungle.test.bbs.codesegment;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import javax.servlet.Servlet;
-
-import jungle.test.bbs.BulletinBoard;
-import jungle.test.bbs.CreateBoardMessageServlet;
-import jungle.test.bbs.CreateBoardServlet;
-import jungle.test.bbs.EditMessageServlet;
-import jungle.test.bbs.NetworkJungleBulletinBoard;
-import jungle.test.bbs.ShowBoardMessageServlet;
-import jungle.test.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 ChildLogCheckCodeSegment();
-		HashSetDataSegment hashLog = new HashSetDataSegment();
-		ods.put("hashLog", hashLog);
-
-		int num = new Integer(matcher.group(2));
-		if (num != 0) {
-//			try {Thread.sleep(100);} catch(Exception e)  { e.printStackTrace(); }
-			new LogUpdateCodeSegment();
-		}
-
-
-
-	}
-
-}
--- a/src/jungle/test/bbs/transformer/MergeBBS.java	Wed Aug 14 17:44:09 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-package jungle.test.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/jungle/test/codesegment/operation/ShowAttribute.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/codesegment/operation/ShowAttribute.java	Tue Aug 20 17:38:09 2013 +0900
@@ -10,7 +10,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
--- a/src/jungle/test/codesegment/operation/StartJungleCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/codesegment/operation/StartJungleCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -8,7 +8,7 @@
 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.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import alice.codesegment.CodeSegment;
 import alice.jungle.datasegment.store.operations.DefaultTreeOperationContainer;
 
--- a/src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -17,7 +17,7 @@
 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;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 
 import org.msgpack.type.Value;
 
--- a/src/jungle/test/codesegment/persistence/TestJungle.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/codesegment/persistence/TestJungle.java	Tue Aug 20 17:38:09 2013 +0900
@@ -4,7 +4,7 @@
 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.TreeEditor;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import jungle.test.codesegment.operation.TestPutAttributeCodeSegment;
 
 public class TestJungle {
--- a/src/jungle/test/core/practice/LogReadCodeSegment.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/core/practice/LogReadCodeSegment.java	Tue Aug 20 17:38:09 2013 +0900
@@ -14,7 +14,7 @@
 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;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
--- a/src/jungle/test/core/practice/LogSendTest.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/core/practice/LogSendTest.java	Tue Aug 20 17:38:09 2013 +0900
@@ -12,7 +12,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 
 public class LogSendTest {
 	
--- a/src/jungle/test/core/practice/PrintChildrenAttribute.java	Wed Aug 14 17:44:09 2013 +0900
+++ b/src/jungle/test/core/practice/PrintChildrenAttribute.java	Tue Aug 20 17:38:09 2013 +0900
@@ -6,7 +6,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jungle.test.bbs.JungleManager;
+import jungle.app.bbs.JungleManager;
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
@@ -34,11 +34,7 @@
 		}
 		
 		System.exit(0);
-		
-		
-		
-		
-		
+
 	}