changeset 112:8f9811a1e00c

Moved app files
author one
date Fri, 29 Nov 2013 04:31:22 +0900
parents 6e7724d55a72
children 7d9b7fcb4d9a
files src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java src/main/java/app/bbs/BoardMessage.java src/main/java/app/bbs/BulletinBoard.java src/main/java/app/bbs/CassandraBulletinBoard.java src/main/java/app/bbs/CreateBoardMessageServlet.java src/main/java/app/bbs/CreateBoardServlet.java src/main/java/app/bbs/DistributeApp.java src/main/java/app/bbs/EditMessageServlet.java src/main/java/app/bbs/HectorSample.java src/main/java/app/bbs/IterableConverter.java src/main/java/app/bbs/JungleManager.java src/main/java/app/bbs/NetworkJungleBulletinBoard.java src/main/java/app/bbs/ShowBoardMessageServlet.java src/main/java/app/bbs/ShowBoardsServlet.java src/main/java/app/bbs/codesegment/LogUpdateCodeSegment.java src/main/java/app/bbs/codesegment/NullCodeSegment.java src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java src/main/java/app/bbs/transformer/MergeBBS.java src/main/java/jungle/app/bbs/BoardMessage.java src/main/java/jungle/app/bbs/BulletinBoard.java src/main/java/jungle/app/bbs/CassandraBulletinBoard.java src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java src/main/java/jungle/app/bbs/CreateBoardServlet.java src/main/java/jungle/app/bbs/DistributeApp.java src/main/java/jungle/app/bbs/EditMessageServlet.java src/main/java/jungle/app/bbs/HectorSample.java src/main/java/jungle/app/bbs/IterableConverter.java src/main/java/jungle/app/bbs/JungleManager.java src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java src/main/java/jungle/app/bbs/ShowBoardsServlet.java src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java src/main/java/jungle/app/bbs/transformer/MergeBBS.java
diffstat 35 files changed, 1125 insertions(+), 1129 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Thu Nov 28 19:21:43 2013 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Fri Nov 29 04:31:22 2013 +0900
@@ -5,6 +5,7 @@
 import java.nio.ByteBuffer;
 
 import alice.jungle.operations.NetworkTreeOperationLog;
+import app.bbs.codesegment.NullCodeSegment;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
@@ -27,7 +28,6 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
-import jungle.app.bbs.codesegment.NullCodeSegment;
 
 public class NetworkDefaultJungleTreeEditor<T extends TreeNode<T>> implements JungleTreeEditor {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/BoardMessage.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,8 @@
+package app.bbs;
+
+public interface BoardMessage
+{
+	public String getUUID();
+	public String getAuthor();
+	public String getMessage();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/BulletinBoard.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,11 @@
+package app.bbs;
+
+public interface BulletinBoard
+{
+	public Iterable<String> getBoards();
+	public void createBoards(String _name,String _author,String _initMessage,String _editKey);
+	public void createBoardMessage(String _board,String _author,String _message,String _editKey);
+	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey);
+	
+	public Iterable<BoardMessage> getMessages(String _boardName);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/CassandraBulletinBoard.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,192 @@
+package app.bbs;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.cassandra.locator.SimpleStrategy;
+
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.cassandra.serializers.UUIDSerializer;
+import me.prettyprint.cassandra.service.CassandraHost;
+import me.prettyprint.cassandra.service.template.SuperCfResult;
+import me.prettyprint.cassandra.service.template.SuperCfUpdater;
+import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
+import me.prettyprint.cassandra.utils.TimeUUIDUtils;
+import me.prettyprint.hector.api.Cluster;
+import me.prettyprint.hector.api.Keyspace;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
+import me.prettyprint.hector.api.ddl.ColumnType;
+import me.prettyprint.hector.api.ddl.ComparatorType;
+import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
+import me.prettyprint.hector.api.factory.HFactory;
+import me.prettyprint.hector.api.query.QueryResult;
+import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
+import me.prettyprint.hector.api.query.SuperSliceQuery;
+
+public class CassandraBulletinBoard implements BulletinBoard
+{
+	private final String address;
+	private final String clusterName;
+	private final Cluster cluster;
+	private final String keyspace;
+	
+	private static final String COLUMN_FAMILY_BOARD = "boards";
+	
+	public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName)
+	{
+		address = _address;
+		clusterName = _clusterName;
+		keyspace = _keyspaceName;
+		cluster = HFactory.getOrCreateCluster(clusterName,address);
+		
+		initialize();
+	}
+	
+	private void initialize()
+	{
+		if(cluster.describeKeyspace(keyspace) == null){
+			KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace,
+					SimpleStrategy.class.getName(),1,Collections.<ColumnFamilyDefinition> emptyList());
+			cluster.addKeyspace(keyspaceDefinition,false);
+			ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE);
+			columnFamilyDefinition.setColumnType(ColumnType.SUPER);
+			cluster.addColumnFamily(columnFamilyDefinition);
+		}
+	}
+	
+	public Iterable<String> getBoards()
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
+		RangeSuperSlicesQuery<String,UUID,String,String> query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
+				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
+		query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0);
+		
+		QueryResult<OrderedSuperRows<String,UUID,String,String>> result = query.execute();
+		OrderedSuperRows<String,UUID,String,String> rows = result.get();
+		List<SuperRow<String,UUID,String,String>> list = rows.getList();
+		
+		IterableConverter.Converter<String,SuperRow<String,UUID,String,String>> converter
+			= new IterableConverter.Converter<String, SuperRow<String,UUID,String,String>>(){
+				public String conv(SuperRow<String, UUID, String, String> _b) {
+					return _b.getKey();
+				}
+			};
+		
+		return new IterableConverter<String,SuperRow<String,UUID,String,String>>(list,converter);
+	}
+	
+	private static final String COLUMN_MESSAGE_AUTHOR = "author";
+	private static final String COLUMN_MESSAGE_BODY = "message";
+	private static final String COLUMN_MESSAGE_EDIT_KEY = "edit";
+
+	public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		
+		SuperCfUpdater<String,UUID,String> updater = template.createUpdater(_name,_time);
+		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
+		updater.setString(COLUMN_MESSAGE_BODY,_message);
+		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
+		
+		template.update(updater);
+	}
+	
+	public void createBoards(String _name,String _author,String _initMessage,String _editKey)
+	{
+		UUID time = TimeUUIDUtils.getTimeUUID(0);
+		createBoardMessage(time,_name,_author,_initMessage,_editKey);
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
+		SuperSliceQuery<String, UUID, String, String> query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
+		
+		UUID start = TimeUUIDUtils.getTimeUUID(0);
+		query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100);
+		
+		QueryResult<SuperSlice<UUID, String, String>> result = query.execute();
+		SuperSlice<UUID,String,String> ss = result.get();
+		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
+		
+		IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>> converter =
+				new IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>>(){
+					public BoardMessage conv(HSuperColumn<UUID, String, String> _b){
+						UUID uuid = _b.getName();
+						String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue();
+						String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue();
+						BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString());
+						return bm;
+					}
+				};
+		
+		
+		return new IterableConverter<BoardMessage,HSuperColumn<UUID,String,String>>(list,converter);
+	}
+	
+	private static class BoardMessageImpl implements BoardMessage
+	{
+		private final String author;
+		private final String message;
+		private final String uuid;
+		
+		public BoardMessageImpl(String _author,String _message,String _uuid)
+		{
+			author = _author;
+			message = _message;
+			uuid = _uuid;
+		}
+
+		public String getAuthor()
+		{
+			return author;
+		}
+
+		public String getMessage()
+		{
+			return message;
+		}
+
+		public String getUUID()
+		{
+			return uuid;
+		}
+	}
+
+	public void createBoardMessage(String _board, String _author, String _message,String _editKey)
+	{
+		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
+		createBoardMessage(time,_board,_author,_message,_editKey);
+	}
+
+	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey)
+	{
+		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
+		UUID time = UUID.fromString(_uuid);
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		
+		SuperCfResult<String,UUID,String> result = template.querySuperColumn(_board,time);
+		String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY);
+		if(!editKey.equals(editKey)){
+			return;
+		}
+		
+		SuperCfUpdater<String, UUID, String> updater = template.createUpdater(_board,time);
+		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
+		updater.setString(COLUMN_MESSAGE_BODY,_message);
+		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
+		
+		template.update(updater);
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/CreateBoardMessageServlet.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,40 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CreateBoardMessageServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_MESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CreateBoardMessageServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	@Override
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		
+		try{
+			bbs.createBoardMessage(boardName,author,msg,key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/CreateBoardServlet.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,39 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CreateBoardServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_INITMESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CreateBoardServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		
+		try{
+			bbs.createBoards(boardName,author,msg,key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/DistributeApp.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,16 @@
+package app.bbs;
+
+
+import alice.jungle.remote.RemoteConfig;
+import alice.topology.node.TopologyNode;
+import app.bbs.codesegment.StartBBSCodeSegment;
+
+
+public class DistributeApp 
+{
+    public static void main( String[] args ) throws Exception
+    {
+   		RemoteConfig conf = new RemoteConfig(args);
+   		new TopologyNode(conf, new StartBBSCodeSegment(conf.bbsPort));
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/EditMessageServlet.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,64 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class EditMessageServlet extends HttpServlet
+{
+	private final BulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_MSGID = "uuid";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_BOARD_MESSAGE= "msg";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public EditMessageServlet(BulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = _req.getParameter(PARAM_BOARD_NAME);
+		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
+		
+		
+		try{
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>edit message</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p>Author : <input type='text' name='author'/>" +
+					"<input type='hidden' name='key' value='"+uuid+"'/>" +
+					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
+			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = _req.getParameter(PARAM_BOARD_NAME);
+		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
+		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
+		
+		try{
+			bbs.editMessage(boardName, uuid, author, msg, key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/HectorSample.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,70 @@
+package app.bbs;
+
+import java.util.List;
+import java.util.UUID;
+import me.prettyprint.cassandra.serializers.StringSerializer;
+import me.prettyprint.cassandra.serializers.UUIDSerializer;
+import me.prettyprint.cassandra.service.template.SuperCfUpdater;
+import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
+import me.prettyprint.cassandra.utils.TimeUUIDUtils;
+import me.prettyprint.hector.api.*;
+import me.prettyprint.hector.api.beans.HColumn;
+import me.prettyprint.hector.api.beans.HSuperColumn;
+import me.prettyprint.hector.api.beans.OrderedSuperRows;
+import me.prettyprint.hector.api.beans.SuperRow;
+import me.prettyprint.hector.api.beans.SuperSlice;
+import me.prettyprint.hector.api.factory.HFactory;
+import me.prettyprint.hector.api.query.QueryResult;
+import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
+import me.prettyprint.hector.api.query.SuperSliceQuery;
+
+public class HectorSample
+{
+	public static void main(String _args[])
+	{
+		Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160");
+		
+		Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster);
+		/*
+		ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE);
+		newCF.setColumnType(ColumnType.SUPER);
+		myCluster.addColumnFamily(newCF);
+		*/
+		
+		ThriftSuperCfTemplate<String,UUID,String> template = 
+				new ThriftSuperCfTemplate<String,UUID,String>(ksp,"boards",StringSerializer.get(),
+						UUIDSerializer.get(),StringSerializer.get());
+		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
+		SuperCfUpdater<String,UUID,String> updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0));
+		updater.setString("name","peter");
+		updater.setString("message",time.toString());
+		
+		template.update(updater);
+		
+		UUID start = TimeUUIDUtils.getTimeUUID(0);
+		
+		SuperSliceQuery<String, UUID, String, String> sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
+		sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100);
+		
+		QueryResult<SuperSlice<UUID,String,String>> results = sq.execute();
+		
+		SuperSlice<UUID,String,String> ss = results.get();
+		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
+		for(HSuperColumn<UUID,String,String> sc : list){
+			HColumn<String,String> sub = sc.getSubColumnByName("name");
+			System.out.println(sub.getValue());
+			sub = sc.getSubColumnByName("message");
+			System.out.println(sub.getValue());
+		}
+		
+		RangeSuperSlicesQuery<String,UUID,String,String> rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
+				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
+		rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc");
+		
+		QueryResult<OrderedSuperRows<String,UUID,String,String>> rsqResult = rsq.execute();
+		OrderedSuperRows<String, UUID, String, String> rows = rsqResult.get();
+		for(SuperRow<String, UUID, String, String>  row : rows.getList()){
+			System.out.println(row.getKey());
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/IterableConverter.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,52 @@
+package app.bbs;
+
+import java.util.Iterator;
+
+public class IterableConverter<A,B> implements Iterable<A>
+{
+	private final Iterable<B> iterable;
+	private final Converter<A,B> converter;
+	
+	public IterableConverter(Iterable<B> _iterable,Converter<A,B> _converter)
+	{
+		iterable = _iterable;
+		converter = _converter;
+	}
+	
+	public Iterator<A> iterator()
+	{
+		return new IteratorConverter<A,B>(iterable.iterator(),converter);
+	}
+	
+	private static final class IteratorConverter<A,B> implements Iterator<A>
+	{
+		private final Iterator<B> iterator;
+		private final Converter<A,B> converter;
+		
+		public IteratorConverter(Iterator<B> _iterator,Converter<A,B> _converter)
+		{
+			iterator = _iterator;
+			converter = _converter;
+		}
+		
+		public boolean hasNext()
+		{
+			return iterator.hasNext();
+		}
+
+		public A next()
+		{
+			return converter.conv(iterator.next());
+		}
+
+		public void remove()
+		{
+			iterator.remove();
+		}
+	}
+
+	public static interface Converter<A,B>
+	{
+		public A conv(B _b);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/JungleManager.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,127 @@
+package app.bbs;
+
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+
+import alice.jungle.operations.NetworkTreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class JungleManager {
+	private static JungleManager jm = new JungleManager();
+	private Jungle jungle;
+	private static int NOT_CHANGE_POSITION = 0;
+
+	private JungleManager() {
+		jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser()));
+	}
+	
+	public static void setJungle(Jungle _j) {
+		jm.jungle = _j;
+	}
+	
+	public static Jungle getJungle() {
+		return jm.jungle;
+	}
+	
+	public static JungleTree createNewTree(String name) {
+		return jm.jungle.createNewTree(name);		
+	}
+
+	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) {
+		JungleTreeEditor editor = _editor;
+		Either<Error, JungleTreeEditor> either = null;
+		for (TreeOperation op : _log) {
+			either = _edit(editor, op, pos);
+			if(either.isA()) {
+				return either;
+			}
+			editor = either.b();
+		}
+		return either;
+	}
+	
+	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
+			TreeOperation op, int _pos) {
+		NodePath path = new DefaultNodePath();
+		NodeOperation nodeOp = op.getNodeOperation();
+		int pos = _pos;
+		if (_pos == NOT_CHANGE_POSITION ) {
+			pos = nodeOp.getPosition();
+		}
+		Command c = nodeOp.getCommand();
+		String key = "";
+		switch (c) {
+		case PUT_ATTRIBUTE:
+			path = op.getNodePath();
+			key = nodeOp.getKey();
+			ByteBuffer value = nodeOp.getValue();
+			return editor.putAttribute(path, key, value);
+		case DELETE_ATTRIBUTE:
+			key = nodeOp.getKey();
+			return editor.deleteAttribute(path, key);
+		case APPEND_CHILD:
+			return editor.addNewChildAt(path, pos);
+		case DELETE_CHILD:
+			return editor.deleteChildAt(path, 0);
+		}
+		return null;
+	}
+	
+	public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) {
+		String treeName = netLog.getTreeName();
+		Jungle jungle = JungleManager.getJungle(); 
+		if (jungle.getTreeByName(treeName) == null) {
+			if(null == jungle.createNewTree(treeName)){
+				throw new IllegalStateException();
+			}
+		}
+		JungleTree tree = jungle.getTreeByName(treeName);
+		JungleTreeEditor editor = tree.getLocalTreeEditor();
+
+		//		int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp());
+		int pos = 0;
+		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, netLog, pos);
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		either = editor.success();
+		if(either.isA()) {
+			throw new IllegalStateException();
+		}
+		return either;
+	}
+	
+	private static int calculatePosition(Node node, long newNodeTimeStamp) {
+		int count = 0;
+		long childTimeStamp = 0;
+		for(Iterator<Node> iter = node.getChildren().iterator();iter.hasNext();) {
+			Node n = iter.next();
+			if(n.getAttributes().get("timestamp") == null) {
+				return NOT_CHANGE_POSITION;
+			}
+			if(n.getAttributes().get("timestamp") != null) {
+				childTimeStamp = n.getAttributes().get("timestamp").getLong();
+				if (newNodeTimeStamp < childTimeStamp) {
+					break;
+				}
+			}
+			count++;
+		}
+		return count;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,228 @@
+package app.bbs;
+
+import java.nio.ByteBuffer;
+import java.util.Date;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import alice.jungle.core.NetworkDefaultJungle;
+import alice.jungle.persistent.AliceJournal;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
+
+public class NetworkJungleBulletinBoard implements BulletinBoard
+{
+	private final Jungle jungle;
+	
+	public NetworkJungleBulletinBoard(String _uuid)
+	{
+		jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser()));	
+		jungle.createNewTree("boards");
+		JungleManager.setJungle(jungle);
+	}
+
+	public Iterable<String> getBoards()
+	{
+		JungleTree tree = jungle.getTreeByName("boards");
+		Node node = tree.getRootNode();
+		Children<Node> chs = node.getChildren();
+		
+		IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){
+			public String conv(Node _b) {
+				ByteBuffer e = _b.getAttributes().get("name");
+				return new String(e.array());
+			}
+		};
+		
+		return new IterableConverter<String,Node>(chs,converter);
+	}
+
+	public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
+	{
+		if(null == jungle.createNewTree(_name)){
+			throw new IllegalStateException();
+		}
+		
+		JungleTree tree = jungle.getTreeByName("boards");
+		JungleTreeEditor editor = tree.getTreeEditor();
+		DefaultNodePath root = new DefaultNodePath();
+		Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		
+		either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes()));
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		Either<Error,JungleTreeEditor> result = editor.success();
+		if(result.isA()){
+			throw new IllegalStateException();
+		}
+		final long timestamp = new Date().getTime();
+
+		
+		tree = jungle.getTreeByName(_name);
+		editor = tree.getTreeEditor();
+		either = editor.addNewChildAt(root,0);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		
+		NodeEditor e = new NodeEditor(){
+			public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+				_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+				_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
+				_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+				ByteBuffer tBuffer = ByteBuffer.allocate(16);
+				_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+				return DefaultEither.newB(_e);
+			}
+		};
+		
+		either = editor.edit(root.add(0),e);
+		if(either.isA()){
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		editor.success();
+	}
+
+	public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
+	{
+		JungleTree tree = jungle.getTreeByName(_board);
+		if(tree == null){
+			throw new IllegalStateException();
+		}
+		
+		Either<Error, JungleTreeEditor> either;
+		do{
+			Node node = tree.getRootNode();
+			int size = node.getChildren().size();
+			DefaultNodePath path = new DefaultNodePath();
+		
+			JungleTreeEditor editor = tree.getTreeEditor();
+			either = editor.addNewChildAt(path,size);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			final long timestamp = new Date().getTime();
+			NodeEditor e = new NodeEditor(){
+				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
+					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+					ByteBuffer tBuffer = ByteBuffer.allocate(16);
+					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+					return DefaultEither.newB(_e);
+				}
+			};
+			path = path.add(size);
+			either = editor.edit(path,e);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+
+		}while(either.isA());
+	}
+
+	public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
+	{
+		for(;;) {
+			DefaultNodePath path = new DefaultNodePath();
+			path = path.add(Integer.parseInt(_uuid));
+		
+			JungleTree tree = jungle.getTreeByName(_board);
+			JungleTreeEditor editor = tree.getTreeEditor();
+			final long timestamp = new Date().getTime(); 
+			NodeEditor e = new NodeEditor(){
+				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
+					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
+					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
+					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
+					ByteBuffer tBuffer = ByteBuffer.allocate(16);
+					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+				return DefaultEither.newB(_e);
+				}
+			};
+		
+			Either<Error, JungleTreeEditor> either = editor.edit(path,e);
+			if(either.isA()){
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+			if(!either.isA()) {
+				return;
+			}
+		}
+
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName)
+	{
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		Node node = tree.getRootNode();
+		Children<Node> chs = node.getChildren();
+		
+		final AtomicInteger counter = new AtomicInteger(0);
+		IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){
+			public BoardMessage conv(Node _b) {
+				String uuid = Integer.toString(counter.get());
+				String author = new String(_b.getAttributes().get("author").array());
+				String message = new String(_b.getAttributes().get("mes").array());
+				counter.incrementAndGet();
+				return new BoardMessageImpl(author,message,uuid);
+			}
+		};
+		return new IterableConverter<BoardMessage,Node>(chs,converter);
+	}
+	
+
+	
+	private static class BoardMessageImpl implements BoardMessage
+	{
+		private final String author;
+		private final String message;
+		private final String uuid;
+		
+		public BoardMessageImpl(String _author,String _message,String _uuid)
+		{
+			author = _author;
+			message = _message;
+			uuid = _uuid;
+		}
+
+		public String getAuthor()
+		{
+			return author;
+		}
+
+		public String getMessage()
+		{
+			return message;
+		}
+
+		public String getUUID()
+		{
+			return uuid;
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/ShowBoardMessageServlet.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,60 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ShowBoardMessageServlet extends HttpServlet
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final BulletinBoard bbs;
+	private final String createBoardMessagePath;
+	private final String editMessagePath;
+	
+	private static final String PARAM_BOARD_NAME = "bname";
+
+	public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath)
+	{
+		bbs = _bbs;
+		createBoardMessagePath = _createBoardMessagePath;
+		editMessagePath = _editMessagePath;
+	}
+
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = _req.getParameter(PARAM_BOARD_NAME);
+		
+		try{
+			printBoard(bname,_res.getWriter());
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+		
+	}
+	
+	private void printBoard(String _bname,PrintWriter _pw) throws Exception
+	{
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>"+_bname+"</h1>\n");
+		
+		_pw.write("<form action='"+createBoardMessagePath+"' method='POST'\n");
+		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='"+_bname+"'/> EditKey : <input type='text' name='key'/></p>\n");
+		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<p><input type='submit' value='submit'/></p>\n");
+		
+		for(BoardMessage msg : bbs.getMessages(_bname)){
+			_pw.write("<hr/>");
+			_pw.write("<p><b>"+msg.getAuthor()+"</b></p>");
+			_pw.write("<p>"+msg.getMessage()+"</p>");
+			_pw.write("<small><a href='"+editMessagePath+"?bname="+_bname+"&uuid="+msg.getUUID()+"'>edit</a></small>");
+		}
+		
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/ShowBoardsServlet.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,55 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ShowBoardsServlet extends HttpServlet
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final BulletinBoard bbs;
+	private final String createBoardPath;
+	private final String showBoardMessagePath;
+
+	public ShowBoardsServlet(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath)
+	{
+		bbs = _bbs;
+		createBoardPath = _createBoardPath;
+		showBoardMessagePath = _showBoardMessagePath;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		try{
+			printBoard(_res.getWriter());
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+		
+	}
+	
+	private void printBoard(PrintWriter _pw) throws Exception
+	{
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>BBS</h1>\n");
+		_pw.write("<form action='"+createBoardPath+"' method='POST'\n");
+		_pw.write("<p>Create new board.</p>");
+		_pw.write("<p>BoardName : <input type='text' name='bname'/></p>\n");
+		_pw.write("<p>Author : <input type='text' name='author'/> EditKey : <input type='text' name='key'/></p>\n");
+		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<p><input type='submit' value='submit'/></p><hr/>\n");
+		
+		_pw.write("<h2>list of boards</h2>");
+		for(String board : bbs.getBoards()){
+			_pw.write("<p><a href='"+showBoardMessagePath+"?bname="+board+"'>"+board+"</a></p>");
+		}
+		
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/codesegment/LogUpdateCodeSegment.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,51 @@
+package app.bbs.codesegment;
+
+
+
+import java.util.List;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import alice.jungle.operations.NetworkTreeOperationLog;
+import app.bbs.JungleManager;
+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;
+
+public class LogUpdateCodeSegment extends CodeSegment {
+	
+	Receiver log = ids.create(CommandType.PEEK);
+	Receiver clist = ids.create(CommandType.PEEK);
+	
+	
+	public LogUpdateCodeSegment() {
+		log.setKey("log");
+		clist.setKey("_CLIST");;
+	}
+	
+	public LogUpdateCodeSegment(int index) {
+		log.setKey("log", index);
+		clist.setKey("_CLIST");;
+	}
+	
+	public void run() {
+		int index = log.index;
+		NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
+		@SuppressWarnings("unchecked")
+		List<String> list = clist.asClass(List.class);
+		if (!log.from.equals("local")) {
+			Either<Error, JungleTreeEditor> either = JungleManager.update(netLog);
+			if(either.isA()) {
+				/* Should throw after new LogUpdateCodeSegment */
+				throw new IllegalStateException();				
+			}
+		}
+		for (String node : list) {
+			if (!node.equals(log.from)) {
+				ods.put(node, log.key, log.getVal());
+			}
+		}
+		new LogUpdateCodeSegment(index);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/codesegment/NullCodeSegment.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,13 @@
+package app.bbs.codesegment;
+
+import alice.codesegment.CodeSegment;
+
+
+public class NullCodeSegment extends CodeSegment {
+
+	@Override
+	public void run() {
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,76 @@
+package app.bbs.codesegment;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import javax.servlet.Servlet;
+
+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 app.bbs.BulletinBoard;
+import app.bbs.CreateBoardMessageServlet;
+import app.bbs.CreateBoardServlet;
+import app.bbs.EditMessageServlet;
+import app.bbs.NetworkJungleBulletinBoard;
+import app.bbs.ShowBoardMessageServlet;
+import app.bbs.ShowBoardsServlet;
+
+
+public class StartBBSCodeSegment extends CodeSegment {
+	
+	int bbsPort = 8080;
+	Receiver host = ids.create(CommandType.PEEK);
+	private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
+	
+	public StartBBSCodeSegment(int p) {
+		bbsPort = p;
+		host.setKey("host");	
+	}
+
+	public StartBBSCodeSegment() {
+		host.setKey("host");	
+	}
+	
+	public void run() {
+		System.out.println("StartBBSCodeSegment");
+		String name = host.asString();
+		System.out.println("name : "+ name);
+		Matcher matcher = pattern.matcher(name);
+		matcher.find();
+//		String type = matcher.group(1);
+		
+		/* Jetty registration */
+		BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name);
+    	String createBoardMessagePath = "/createBoardMessage";
+    	String createBoardPath = "/createBoard";
+    	String editMessagePath = "/editMessage";
+    	String showBoardMessagePath = "/showBoardMessage";
+    	
+    	Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
+    	Servlet createBoard = new CreateBoardServlet(cassaBBS);
+    	Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
+    	Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
+    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
+    	
+    	Server serv = new Server(bbsPort);
+    	ServletHandler context = new ServletHandler();
+    	context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
+    	context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
+    	context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
+    	context.addServletWithMapping(new ServletHolder(index),"/");
+    	context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
+    	serv.addHandler(context);
+    	try {
+			serv.start();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		new LogUpdateCodeSegment();
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/transformer/MergeBBS.java	Fri Nov 29 04:31:22 2013 +0900
@@ -0,0 +1,22 @@
+package 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/main/java/jungle/app/bbs/BoardMessage.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-package jungle.app.bbs;
-
-public interface BoardMessage
-{
-	public String getUUID();
-	public String getAuthor();
-	public String getMessage();
-}
--- a/src/main/java/jungle/app/bbs/BulletinBoard.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-package jungle.app.bbs;
-
-public interface BulletinBoard
-{
-	public Iterable<String> getBoards();
-	public void createBoards(String _name,String _author,String _initMessage,String _editKey);
-	public void createBoardMessage(String _board,String _author,String _message,String _editKey);
-	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey);
-	
-	public Iterable<BoardMessage> getMessages(String _boardName);
-}
--- a/src/main/java/jungle/app/bbs/CassandraBulletinBoard.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,192 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-import org.apache.cassandra.locator.SimpleStrategy;
-
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.serializers.UUIDSerializer;
-import me.prettyprint.cassandra.service.CassandraHost;
-import me.prettyprint.cassandra.service.template.SuperCfResult;
-import me.prettyprint.cassandra.service.template.SuperCfUpdater;
-import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
-import me.prettyprint.cassandra.utils.TimeUUIDUtils;
-import me.prettyprint.hector.api.Cluster;
-import me.prettyprint.hector.api.Keyspace;
-import me.prettyprint.hector.api.beans.HSuperColumn;
-import me.prettyprint.hector.api.beans.OrderedSuperRows;
-import me.prettyprint.hector.api.beans.SuperRow;
-import me.prettyprint.hector.api.beans.SuperSlice;
-import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
-import me.prettyprint.hector.api.ddl.ColumnType;
-import me.prettyprint.hector.api.ddl.ComparatorType;
-import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
-import me.prettyprint.hector.api.query.SuperSliceQuery;
-
-public class CassandraBulletinBoard implements BulletinBoard
-{
-	private final String address;
-	private final String clusterName;
-	private final Cluster cluster;
-	private final String keyspace;
-	
-	private static final String COLUMN_FAMILY_BOARD = "boards";
-	
-	public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName)
-	{
-		address = _address;
-		clusterName = _clusterName;
-		keyspace = _keyspaceName;
-		cluster = HFactory.getOrCreateCluster(clusterName,address);
-		
-		initialize();
-	}
-	
-	private void initialize()
-	{
-		if(cluster.describeKeyspace(keyspace) == null){
-			KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace,
-					SimpleStrategy.class.getName(),1,Collections.<ColumnFamilyDefinition> emptyList());
-			cluster.addKeyspace(keyspaceDefinition,false);
-			ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE);
-			columnFamilyDefinition.setColumnType(ColumnType.SUPER);
-			cluster.addColumnFamily(columnFamilyDefinition);
-		}
-	}
-	
-	public Iterable<String> getBoards()
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
-		RangeSuperSlicesQuery<String,UUID,String,String> query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
-				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
-		query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0);
-		
-		QueryResult<OrderedSuperRows<String,UUID,String,String>> result = query.execute();
-		OrderedSuperRows<String,UUID,String,String> rows = result.get();
-		List<SuperRow<String,UUID,String,String>> list = rows.getList();
-		
-		IterableConverter.Converter<String,SuperRow<String,UUID,String,String>> converter
-			= new IterableConverter.Converter<String, SuperRow<String,UUID,String,String>>(){
-				public String conv(SuperRow<String, UUID, String, String> _b) {
-					return _b.getKey();
-				}
-			};
-		
-		return new IterableConverter<String,SuperRow<String,UUID,String,String>>(list,converter);
-	}
-	
-	private static final String COLUMN_MESSAGE_AUTHOR = "author";
-	private static final String COLUMN_MESSAGE_BODY = "message";
-	private static final String COLUMN_MESSAGE_EDIT_KEY = "edit";
-
-	public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		
-		SuperCfUpdater<String,UUID,String> updater = template.createUpdater(_name,_time);
-		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
-		updater.setString(COLUMN_MESSAGE_BODY,_message);
-		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
-		
-		template.update(updater);
-	}
-	
-	public void createBoards(String _name,String _author,String _initMessage,String _editKey)
-	{
-		UUID time = TimeUUIDUtils.getTimeUUID(0);
-		createBoardMessage(time,_name,_author,_initMessage,_editKey);
-	}
-
-	public Iterable<BoardMessage> getMessages(String _boardName)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace,cluster);
-		SuperSliceQuery<String, UUID, String, String> query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
-		
-		UUID start = TimeUUIDUtils.getTimeUUID(0);
-		query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100);
-		
-		QueryResult<SuperSlice<UUID, String, String>> result = query.execute();
-		SuperSlice<UUID,String,String> ss = result.get();
-		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
-		
-		IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>> converter =
-				new IterableConverter.Converter<BoardMessage,HSuperColumn<UUID,String,String>>(){
-					public BoardMessage conv(HSuperColumn<UUID, String, String> _b){
-						UUID uuid = _b.getName();
-						String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue();
-						String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue();
-						BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString());
-						return bm;
-					}
-				};
-		
-		
-		return new IterableConverter<BoardMessage,HSuperColumn<UUID,String,String>>(list,converter);
-	}
-	
-	private static class BoardMessageImpl implements BoardMessage
-	{
-		private final String author;
-		private final String message;
-		private final String uuid;
-		
-		public BoardMessageImpl(String _author,String _message,String _uuid)
-		{
-			author = _author;
-			message = _message;
-			uuid = _uuid;
-		}
-
-		public String getAuthor()
-		{
-			return author;
-		}
-
-		public String getMessage()
-		{
-			return message;
-		}
-
-		public String getUUID()
-		{
-			return uuid;
-		}
-	}
-
-	public void createBoardMessage(String _board, String _author, String _message,String _editKey)
-	{
-		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
-		createBoardMessage(time,_board,_author,_message,_editKey);
-	}
-
-	public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey)
-	{
-		Keyspace ksp = HFactory.createKeyspace(keyspace, cluster);
-		UUID time = UUID.fromString(_uuid);
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		
-		SuperCfResult<String,UUID,String> result = template.querySuperColumn(_board,time);
-		String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY);
-		if(!editKey.equals(editKey)){
-			return;
-		}
-		
-		SuperCfUpdater<String, UUID, String> updater = template.createUpdater(_board,time);
-		updater.setString(COLUMN_MESSAGE_AUTHOR,_author);
-		updater.setString(COLUMN_MESSAGE_BODY,_message);
-		updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey);
-		
-		template.update(updater);
-	}
-
-}
--- a/src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class CreateBoardMessageServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_MESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CreateBoardMessageServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-	
-	@Override
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		
-		try{
-			bbs.createBoardMessage(boardName,author,msg,key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/main/java/jungle/app/bbs/CreateBoardServlet.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class CreateBoardServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_INITMESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CreateBoardServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		
-		try{
-			bbs.createBoards(boardName,author,msg,key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/main/java/jungle/app/bbs/DistributeApp.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-package jungle.app.bbs;
-
-
-import alice.jungle.remote.RemoteConfig;
-import alice.topology.node.TopologyNode;
-import jungle.app.bbs.codesegment.StartBBSCodeSegment;
-
-
-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/main/java/jungle/app/bbs/EditMessageServlet.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class EditMessageServlet extends HttpServlet
-{
-	private final BulletinBoard bbs;
-	private static final String PARAM_BOARD_NAME = "bname";
-	private static final String PARAM_BOARD_MSGID = "uuid";
-	private static final String PARAM_BOARD_AUTHOR = "author";
-	private static final String PARAM_BOARD_MESSAGE= "msg";
-	private static final String PARAM_BOARD_EDITKEY = "key";
-	
-	private static final long serialVersionUID = 1L;
-	
-	public EditMessageServlet(BulletinBoard _bbs)
-	{
-		bbs = _bbs;
-	}
-	
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String bname = _req.getParameter(PARAM_BOARD_NAME);
-		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
-		
-		
-		try{
-			PrintWriter pw = _res.getWriter();
-			pw.write("<html><body><h1>edit message</h1>");
-			pw.write("<form method='POST'\n");
-			pw.write("<p>Author : <input type='text' name='author'/>" +
-					"<input type='hidden' name='key' value='"+uuid+"'/>" +
-					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
-			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-			pw.write("<p><input type='submit' value='submit'/></p>\n");
-			pw.write("</body></html>");
-			pw.flush();
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-
-	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String boardName = _req.getParameter(PARAM_BOARD_NAME);
-		String author = _req.getParameter(PARAM_BOARD_AUTHOR);
-		String msg = _req.getParameter(PARAM_BOARD_MESSAGE);
-		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
-		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
-		
-		try{
-			bbs.editMessage(boardName, uuid, author, msg, key);
-			PrintWriter pw = _res.getWriter();
-			pw.write("successfully written");
-			pw.flush();
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-	}
-}
--- a/src/main/java/jungle/app/bbs/HectorSample.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.List;
-import java.util.UUID;
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.cassandra.serializers.UUIDSerializer;
-import me.prettyprint.cassandra.service.template.SuperCfUpdater;
-import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate;
-import me.prettyprint.cassandra.utils.TimeUUIDUtils;
-import me.prettyprint.hector.api.*;
-import me.prettyprint.hector.api.beans.HColumn;
-import me.prettyprint.hector.api.beans.HSuperColumn;
-import me.prettyprint.hector.api.beans.OrderedSuperRows;
-import me.prettyprint.hector.api.beans.SuperRow;
-import me.prettyprint.hector.api.beans.SuperSlice;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSuperSlicesQuery;
-import me.prettyprint.hector.api.query.SuperSliceQuery;
-
-public class HectorSample
-{
-	public static void main(String _args[])
-	{
-		Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160");
-		
-		Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster);
-		/*
-		ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE);
-		newCF.setColumnType(ColumnType.SUPER);
-		myCluster.addColumnFamily(newCF);
-		*/
-		
-		ThriftSuperCfTemplate<String,UUID,String> template = 
-				new ThriftSuperCfTemplate<String,UUID,String>(ksp,"boards",StringSerializer.get(),
-						UUIDSerializer.get(),StringSerializer.get());
-		UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis();
-		SuperCfUpdater<String,UUID,String> updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0));
-		updater.setString("name","peter");
-		updater.setString("message",time.toString());
-		
-		template.update(updater);
-		
-		UUID start = TimeUUIDUtils.getTimeUUID(0);
-		
-		SuperSliceQuery<String, UUID, String, String> sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get());
-		sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100);
-		
-		QueryResult<SuperSlice<UUID,String,String>> results = sq.execute();
-		
-		SuperSlice<UUID,String,String> ss = results.get();
-		List<HSuperColumn<UUID,String,String>> list = ss.getSuperColumns();
-		for(HSuperColumn<UUID,String,String> sc : list){
-			HColumn<String,String> sub = sc.getSubColumnByName("name");
-			System.out.println(sub.getValue());
-			sub = sc.getSubColumnByName("message");
-			System.out.println(sub.getValue());
-		}
-		
-		RangeSuperSlicesQuery<String,UUID,String,String> rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(),
-				UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get());
-		rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc");
-		
-		QueryResult<OrderedSuperRows<String,UUID,String,String>> rsqResult = rsq.execute();
-		OrderedSuperRows<String, UUID, String, String> rows = rsqResult.get();
-		for(SuperRow<String, UUID, String, String>  row : rows.getList()){
-			System.out.println(row.getKey());
-		}
-	}
-}
--- a/src/main/java/jungle/app/bbs/IterableConverter.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-package jungle.app.bbs;
-
-import java.util.Iterator;
-
-public class IterableConverter<A,B> implements Iterable<A>
-{
-	private final Iterable<B> iterable;
-	private final Converter<A,B> converter;
-	
-	public IterableConverter(Iterable<B> _iterable,Converter<A,B> _converter)
-	{
-		iterable = _iterable;
-		converter = _converter;
-	}
-	
-	public Iterator<A> iterator()
-	{
-		return new IteratorConverter<A,B>(iterable.iterator(),converter);
-	}
-	
-	private static final class IteratorConverter<A,B> implements Iterator<A>
-	{
-		private final Iterator<B> iterator;
-		private final Converter<A,B> converter;
-		
-		public IteratorConverter(Iterator<B> _iterator,Converter<A,B> _converter)
-		{
-			iterator = _iterator;
-			converter = _converter;
-		}
-		
-		public boolean hasNext()
-		{
-			return iterator.hasNext();
-		}
-
-		public A next()
-		{
-			return converter.conv(iterator.next());
-		}
-
-		public void remove()
-		{
-			iterator.remove();
-		}
-	}
-
-	public static interface Converter<A,B>
-	{
-		public A conv(B _b);
-	}
-}
--- a/src/main/java/jungle/app/bbs/JungleManager.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-package jungle.app.bbs;
-
-import java.nio.ByteBuffer;
-import java.util.Iterator;
-
-import alice.jungle.operations.NetworkTreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class JungleManager {
-	private static JungleManager jm = new JungleManager();
-	private Jungle jungle;
-	private static int NOT_CHANGE_POSITION = 0;
-
-	private JungleManager() {
-		jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser()));
-	}
-	
-	public static void setJungle(Jungle _j) {
-		jm.jungle = _j;
-	}
-	
-	public static Jungle getJungle() {
-		return jm.jungle;
-	}
-	
-	public static JungleTree createNewTree(String name) {
-		return jm.jungle.createNewTree(name);		
-	}
-
-	public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) {
-		JungleTreeEditor editor = _editor;
-		Either<Error, JungleTreeEditor> either = null;
-		for (TreeOperation op : _log) {
-			either = _edit(editor, op, pos);
-			if(either.isA()) {
-				return either;
-			}
-			editor = either.b();
-		}
-		return either;
-	}
-	
-	private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
-			TreeOperation op, int _pos) {
-		NodePath path = new DefaultNodePath();
-		NodeOperation nodeOp = op.getNodeOperation();
-		int pos = _pos;
-		if (_pos == NOT_CHANGE_POSITION ) {
-			pos = nodeOp.getPosition();
-		}
-		Command c = nodeOp.getCommand();
-		String key = "";
-		switch (c) {
-		case PUT_ATTRIBUTE:
-			path = op.getNodePath();
-			key = nodeOp.getKey();
-			ByteBuffer value = nodeOp.getValue();
-			return editor.putAttribute(path, key, value);
-		case DELETE_ATTRIBUTE:
-			key = nodeOp.getKey();
-			return editor.deleteAttribute(path, key);
-		case APPEND_CHILD:
-			return editor.addNewChildAt(path, pos);
-		case DELETE_CHILD:
-			return editor.deleteChildAt(path, 0);
-		}
-		return null;
-	}
-	
-	public static Either<Error, JungleTreeEditor> update(NetworkTreeOperationLog netLog) {
-		String treeName = netLog.getTreeName();
-		Jungle jungle = JungleManager.getJungle(); 
-		if (jungle.getTreeByName(treeName) == null) {
-			if(null == jungle.createNewTree(treeName)){
-				throw new IllegalStateException();
-			}
-		}
-		JungleTree tree = jungle.getTreeByName(treeName);
-		JungleTreeEditor editor = tree.getLocalTreeEditor();
-
-		//		int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp());
-		int pos = 0;
-		Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, netLog, pos);
-		if(either.isA()) {
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		either = editor.success();
-		if(either.isA()) {
-			throw new IllegalStateException();
-		}
-		return either;
-	}
-	
-	private static int calculatePosition(Node node, long newNodeTimeStamp) {
-		int count = 0;
-		long childTimeStamp = 0;
-		for(Iterator<Node> iter = node.getChildren().iterator();iter.hasNext();) {
-			Node n = iter.next();
-			if(n.getAttributes().get("timestamp") == null) {
-				return NOT_CHANGE_POSITION;
-			}
-			if(n.getAttributes().get("timestamp") != null) {
-				childTimeStamp = n.getAttributes().get("timestamp").getLong();
-				if (newNodeTimeStamp < childTimeStamp) {
-					break;
-				}
-			}
-			count++;
-		}
-		return count;
-	}
-}
--- a/src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-package jungle.app.bbs;
-
-import java.nio.ByteBuffer;
-import java.util.Date;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import alice.jungle.core.NetworkDefaultJungle;
-import alice.jungle.persistent.AliceJournal;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
-
-public class NetworkJungleBulletinBoard implements BulletinBoard
-{
-	private final Jungle jungle;
-	
-	public NetworkJungleBulletinBoard(String _uuid)
-	{
-		jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser()));	
-		jungle.createNewTree("boards");
-		JungleManager.setJungle(jungle);
-	}
-
-	public Iterable<String> getBoards()
-	{
-		JungleTree tree = jungle.getTreeByName("boards");
-		Node node = tree.getRootNode();
-		Children<Node> chs = node.getChildren();
-		
-		IterableConverter.Converter<String,Node> converter = new IterableConverter.Converter<String,Node>(){
-			public String conv(Node _b) {
-				ByteBuffer e = _b.getAttributes().get("name");
-				return new String(e.array());
-			}
-		};
-		
-		return new IterableConverter<String,Node>(chs,converter);
-	}
-
-	public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
-	{
-		if(null == jungle.createNewTree(_name)){
-			throw new IllegalStateException();
-		}
-		
-		JungleTree tree = jungle.getTreeByName("boards");
-		JungleTreeEditor editor = tree.getTreeEditor();
-		DefaultNodePath root = new DefaultNodePath();
-		Either<Error,JungleTreeEditor> either = editor.addNewChildAt(root,0);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		
-		either = editor.putAttribute(root.add(0),"name",ByteBuffer.wrap(_name.getBytes()));
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		Either<Error,JungleTreeEditor> result = editor.success();
-		if(result.isA()){
-			throw new IllegalStateException();
-		}
-		final long timestamp = new Date().getTime();
-
-		
-		tree = jungle.getTreeByName(_name);
-		editor = tree.getTreeEditor();
-		either = editor.addNewChildAt(root,0);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		
-		NodeEditor e = new NodeEditor(){
-			public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-				_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-				_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
-				_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-				ByteBuffer tBuffer = ByteBuffer.allocate(16);
-				_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-				return DefaultEither.newB(_e);
-			}
-		};
-		
-		either = editor.edit(root.add(0),e);
-		if(either.isA()){
-			throw new IllegalStateException();
-		}
-		editor = either.b();
-		editor.success();
-		
-	}
-
-	public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
-	{
-		JungleTree tree = jungle.getTreeByName(_board);
-		if(tree == null){
-			throw new IllegalStateException();
-		}
-		
-		Either<Error, JungleTreeEditor> either;
-		do{
-			Node node = tree.getRootNode();
-			int size = node.getChildren().size();
-			DefaultNodePath path = new DefaultNodePath();
-		
-			JungleTreeEditor editor = tree.getTreeEditor();
-			either = editor.addNewChildAt(path,size);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			final long timestamp = new Date().getTime();
-			NodeEditor e = new NodeEditor(){
-				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
-					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-					ByteBuffer tBuffer = ByteBuffer.allocate(16);
-					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-					return DefaultEither.newB(_e);
-				}
-			};
-			path = path.add(size);
-			either = editor.edit(path,e);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			either = editor.success();
-
-		}while(either.isA());
-		/* Put DataSegment */
-	}
-
-	public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
-	{
-		for(;;) {
-			DefaultNodePath path = new DefaultNodePath();
-			path = path.add(Integer.parseInt(_uuid));
-		
-			JungleTree tree = jungle.getTreeByName(_board);
-			JungleTreeEditor editor = tree.getTreeEditor();
-			final long timestamp = new Date().getTime(); 
-			NodeEditor e = new NodeEditor(){
-				public <T extends EditableNode<T>> Either<Error, T> edit(T _e){
-					_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
-					_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
-					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-					ByteBuffer tBuffer = ByteBuffer.allocate(16);
-					_e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
-				return DefaultEither.newB(_e);
-				}
-			};
-		
-			Either<Error, JungleTreeEditor> either = editor.edit(path,e);
-			if(either.isA()){
-				throw new IllegalStateException();
-			}
-			editor = either.b();
-			either = editor.success();
-			if(!either.isA()) {
-				return;
-			}
-		}
-
-	}
-
-	public Iterable<BoardMessage> getMessages(String _boardName)
-	{
-		JungleTree tree = jungle.getTreeByName(_boardName);
-		Node node = tree.getRootNode();
-		Children<Node> chs = node.getChildren();
-		
-		final AtomicInteger counter = new AtomicInteger(0);
-		IterableConverter.Converter<BoardMessage,Node> converter = new IterableConverter.Converter<BoardMessage,Node>(){
-			public BoardMessage conv(Node _b) {
-				String uuid = Integer.toString(counter.get());
-				String author = new String(_b.getAttributes().get("author").array());
-				String message = new String(_b.getAttributes().get("mes").array());
-				counter.incrementAndGet();
-				return new BoardMessageImpl(author,message,uuid);
-			}
-		};
-		
-		return new IterableConverter<BoardMessage,Node>(chs,converter);
-	}
-	
-
-	
-	private static class BoardMessageImpl implements BoardMessage
-	{
-		private final String author;
-		private final String message;
-		private final String uuid;
-		
-		public BoardMessageImpl(String _author,String _message,String _uuid)
-		{
-			author = _author;
-			message = _message;
-			uuid = _uuid;
-		}
-
-		public String getAuthor()
-		{
-			return author;
-		}
-
-		public String getMessage()
-		{
-			return message;
-		}
-
-		public String getUUID()
-		{
-			return uuid;
-		}
-	}
-}
--- a/src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class ShowBoardMessageServlet extends HttpServlet
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final BulletinBoard bbs;
-	private final String createBoardMessagePath;
-	private final String editMessagePath;
-	
-	private static final String PARAM_BOARD_NAME = "bname";
-
-	public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath)
-	{
-		bbs = _bbs;
-		createBoardMessagePath = _createBoardMessagePath;
-		editMessagePath = _editMessagePath;
-	}
-
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		String bname = _req.getParameter(PARAM_BOARD_NAME);
-		
-		try{
-			printBoard(bname,_res.getWriter());
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-		
-	}
-	
-	private void printBoard(String _bname,PrintWriter _pw) throws Exception
-	{
-		_pw.write("<html><body>\n");
-		_pw.write("<h1>"+_bname+"</h1>\n");
-		
-		_pw.write("<form action='"+createBoardMessagePath+"' method='POST'\n");
-		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='"+_bname+"'/> EditKey : <input type='text' name='key'/></p>\n");
-		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-		_pw.write("<p><input type='submit' value='submit'/></p>\n");
-		
-		for(BoardMessage msg : bbs.getMessages(_bname)){
-			_pw.write("<hr/>");
-			_pw.write("<p><b>"+msg.getAuthor()+"</b></p>");
-			_pw.write("<p>"+msg.getMessage()+"</p>");
-			_pw.write("<small><a href='"+editMessagePath+"?bname="+_bname+"&uuid="+msg.getUUID()+"'>edit</a></small>");
-		}
-		
-		_pw.write("</body></html>");
-		_pw.flush();
-	}
-}
--- a/src/main/java/jungle/app/bbs/ShowBoardsServlet.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-package jungle.app.bbs;
-
-import java.io.PrintWriter;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-public class ShowBoardsServlet extends HttpServlet
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-	private final BulletinBoard bbs;
-	private final String createBoardPath;
-	private final String showBoardMessagePath;
-
-	public ShowBoardsServlet(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath)
-	{
-		bbs = _bbs;
-		createBoardPath = _createBoardPath;
-		showBoardMessagePath = _showBoardMessagePath;
-	}
-	
-	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
-	{
-		try{
-			printBoard(_res.getWriter());
-		}catch(Exception _e){
-			_res.setStatus(500);
-		}
-		
-	}
-	
-	private void printBoard(PrintWriter _pw) throws Exception
-	{
-		_pw.write("<html><body>\n");
-		_pw.write("<h1>BBS</h1>\n");
-		_pw.write("<form action='"+createBoardPath+"' method='POST'\n");
-		_pw.write("<p>Create new board.</p>");
-		_pw.write("<p>BoardName : <input type='text' name='bname'/></p>\n");
-		_pw.write("<p>Author : <input type='text' name='author'/> EditKey : <input type='text' name='key'/></p>\n");
-		_pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
-		_pw.write("<p><input type='submit' value='submit'/></p><hr/>\n");
-		
-		_pw.write("<h2>list of boards</h2>");
-		for(String board : bbs.getBoards()){
-			_pw.write("<p><a href='"+showBoardMessagePath+"?bname="+board+"'>"+board+"</a></p>");
-		}
-		
-		_pw.write("</body></html>");
-		_pw.flush();
-	}
-}
--- a/src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-
-
-import java.util.List;
-
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-import alice.jungle.operations.NetworkTreeOperationLog;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jungle.app.bbs.JungleManager;
-
-public class LogUpdateCodeSegment extends CodeSegment {
-	
-	Receiver log = ids.create(CommandType.PEEK);
-	Receiver clist = ids.create(CommandType.PEEK);
-	
-	
-	public LogUpdateCodeSegment() {
-		log.setKey("log");
-		clist.setKey("_CLIST");;
-	}
-	
-	public LogUpdateCodeSegment(int index) {
-		log.setKey("log", index);
-		clist.setKey("_CLIST");;
-	}
-	
-	public void run() {
-		int index = log.index;
-		NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
-		@SuppressWarnings("unchecked")
-		List<String> list = clist.asClass(List.class);
-		if (!log.from.equals("local")) {
-			Either<Error, JungleTreeEditor> either = JungleManager.update(netLog);
-			if(either.isA()) {
-				/* Should throw after new LogUpdateCodeSegment */
-				throw new IllegalStateException();				
-			}
-		}
-		for (String node : list) {
-			if (!node.equals(log.from)) {
-				ods.put(node, log.key, log.getVal());
-			}
-		}
-		new LogUpdateCodeSegment(index);
-	}
-}
--- a/src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-import alice.codesegment.CodeSegment;
-
-
-public class NullCodeSegment extends CodeSegment {
-
-	@Override
-	public void run() {
-		
-	}
-
-}
--- a/src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-package jungle.app.bbs.codesegment;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import javax.servlet.Servlet;
-
-import jungle.app.bbs.BulletinBoard;
-import jungle.app.bbs.CreateBoardMessageServlet;
-import jungle.app.bbs.CreateBoardServlet;
-import jungle.app.bbs.EditMessageServlet;
-import jungle.app.bbs.NetworkJungleBulletinBoard;
-import jungle.app.bbs.ShowBoardMessageServlet;
-import jungle.app.bbs.ShowBoardsServlet;
-
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.servlet.ServletHandler;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-import alice.codesegment.CodeSegment;
-import alice.datasegment.CommandType;
-import alice.datasegment.Receiver;
-
-
-public class StartBBSCodeSegment extends CodeSegment {
-	
-	int bbsPort = 8080;
-	Receiver host = ids.create(CommandType.PEEK);
-	private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
-	
-	public StartBBSCodeSegment(int p) {
-		bbsPort = p;
-		host.setKey("host");	
-	}
-
-	public StartBBSCodeSegment() {
-		host.setKey("host");	
-	}
-	
-	public void run() {
-		System.out.println("StartBBSCodeSegment");
-		String name = host.asString();
-		System.out.println("name : "+ name);
-		Matcher matcher = pattern.matcher(name);
-		matcher.find();
-//		String type = matcher.group(1);
-		
-		/* Jetty registration */
-		BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name);
-    	String createBoardMessagePath = "/createBoardMessage";
-    	String createBoardPath = "/createBoard";
-    	String editMessagePath = "/editMessage";
-    	String showBoardMessagePath = "/showBoardMessage";
-    	
-    	Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
-    	Servlet createBoard = new CreateBoardServlet(cassaBBS);
-    	Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
-    	Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
-    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
-    	
-    	Server serv = new Server(bbsPort);
-    	ServletHandler context = new ServletHandler();
-    	context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
-    	context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
-    	context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
-    	context.addServletWithMapping(new ServletHolder(index),"/");
-    	context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
-    	serv.addHandler(context);
-    	try {
-			serv.start();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		new LogUpdateCodeSegment();
-	}
-
-}
--- a/src/main/java/jungle/app/bbs/transformer/MergeBBS.java	Thu Nov 28 19:21:43 2013 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-package jungle.app.bbs.transformer;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-
-public class MergeBBS implements NodeEditor {
-	
-	
-	public MergeBBS() {
-		
-	}
-	
-	@Override
-	public <T extends EditableNode<T>> Either<Error,T> edit(T _e)
-	{
-		return _e.getChildren().deleteChildAt(0);
-	}	
-	
-
-}