changeset 190:269bada9eedc

add
author tatsuki
date Fri, 17 Oct 2014 15:16:56 +0900
parents 8788cc341358
children 5d0734fd859d
files src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java src/main/java/alice/jungle/persistent/PersistentJungleTree.java src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java src/main/java/app/bbs/NetworkJungleBulletinBoard.java src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java src/main/java/app/bbs/codesegment/StartmaTrixBBSCodeSegment.java src/main/java/app/bbs/thinks/MatrixApp.java src/main/java/app/bbs/thinks/NetworkMatrixBulletinBoard.java src/main/java/app/bbs/thinks/NetworkMatrixJungleBulletinBoard.java src/main/java/app/bbs/thinks/ShowBoardsServletMatrix.java src/main/java/app/bbs/thinks/ShowMatrix.java src/main/java/app/bbs/thinks/ShowMessageWithTimeStampServletMatrix.java src/test/java/alice/jungle/log/example/FindMatrixTest.java
diffstat 16 files changed, 1197 insertions(+), 524 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java	Fri Oct 17 15:16:56 2014 +0900
@@ -9,7 +9,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.Pair;
-import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
 
 import org.msgpack.annotation.Message;
 
@@ -30,9 +29,9 @@
 		pos = _pos;
 	}
 
-	public Either<Error, Logging> _edit(Logging _e) 
+	public Either<Error, LoggingNode> _edit(LoggingNode _e) 
 	{
-		Either<Error,Logging> either = _e.getChildren().addNewChildAt(pos);
+		Either<Error,LoggingNode> either = _e.getChildren().addNewChildAt(pos);
 		if(either.isA()){
 			// error
 			return either;
@@ -41,17 +40,17 @@
 	}
 	
 	@Override
-	public Either<Error, Logging> edit(TreeNode _e) {
-		Logging logNode = wrap(_e);
+	public Either<Error, LoggingNode> edit(TreeNode _e) {
+		LoggingNode logNode = wrap(_e);
 		return _edit(logNode);
 	}
 
-	public Logging wrap(TreeNode node) {
+	public LoggingNode wrap(TreeNode node) {
 		return new LoggingNode(node);
 	}
 
 	@Override
-	public Logging wrap(TreeNode node, OperationLog op) {
+	public LoggingNode wrap(TreeNode node, OperationLog op) {
 		return new LoggingNode(node, op);
 	}
 
--- a/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java	Fri Oct 17 15:16:56 2014 +0900
@@ -10,7 +10,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
+import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.LoggingNode;
 @Message
 public class NetworkPutAttributeOperation  implements NodeOperation
 {
--- a/src/main/java/alice/jungle/persistent/PersistentJungleTree.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/alice/jungle/persistent/PersistentJungleTree.java	Fri Oct 17 15:16:56 2014 +0900
@@ -11,6 +11,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
@@ -67,7 +68,7 @@
 	}
 
 	@Override
-	public JungleTreeEditor getIndexTreeEditor() {
+	public IndexJungleTreeEditor getIndexTreeEditor() {
 		// TODO Auto-generated method stub
 		return null;
 	}
--- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java	Fri Oct 17 15:16:56 2014 +0900
@@ -10,6 +10,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
@@ -70,7 +71,7 @@
 	}
 
 	@Override
-	public JungleTreeEditor getIndexTreeEditor() {
+	public IndexJungleTreeEditor getIndexTreeEditor() {
 		// TODO Auto-generated method stub
 		return null;
 	}
--- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java	Fri Oct 17 15:16:56 2014 +0900
@@ -27,7 +27,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
-import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 
 public class NetworkDefaultJungleTreeEditor implements JungleTreeEditor {
 
@@ -68,7 +68,7 @@
 	private Either<Error,JungleTreeEditor> _edit(final NodePath _path,NodeEditor _e)
 	{
 		//LoggingNodeHook hook = new LoggingNodeHook(_e);
-		Either<Error,Logging> either = editor.edit(root,_path,_e);
+		Either<Error,LoggingNode> either = editor.edit(root,_path,_e);
 		if(either.isA()){
 			return DefaultEither.newA(either.a());
 		}
--- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Fri Oct 17 15:16:56 2014 +0900
@@ -3,8 +3,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -41,7 +39,7 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
-import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
 import junit.framework.Assert;
 
 public class NetworkJungleBulletinBoard implements NetworkBulletinBoard {
@@ -196,8 +194,8 @@
 		NodeEditor e = new NodeEditor() {
 			ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
 
-			public Either<Error,Logging> edit(TreeNode node) {
-				Logging logNode = wrap(node , new DefaultOperationLog());
+			public Either<Error,LoggingNode> edit(TreeNode node) {
+				LoggingNode logNode = wrap(node , new DefaultOperationLog());
 				logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
 				logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b();
 				logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
@@ -206,7 +204,7 @@
 				return DefaultEither.newB(logNode);
 			}
 			@Override
-			public Logging wrap(TreeNode node, OperationLog op) {
+			public LoggingNode wrap(TreeNode node, OperationLog op) {
 				return new LoggingNode(node, op);
 			}
 			@Override
@@ -270,15 +268,15 @@
 
 			NodeEditor e = new NodeEditor() {
 
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
 					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
 					return DefaultEither.newB(logNode);
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -325,8 +323,8 @@
 			editor = either.b();
 
 			NodeEditor e = new NodeEditor() {
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
 					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
 					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
@@ -335,7 +333,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -376,8 +374,8 @@
 			}
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					System.out.println(new String(node.getAttributes().get("mes").array()));
 					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
 					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
@@ -388,7 +386,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -431,8 +429,8 @@
 			NodeEditor e = new NodeEditor() {
 				String str;
 
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					str = "0";
 					int count = 0;
 					for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
@@ -444,7 +442,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -484,8 +482,8 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					// EnableNodeWrapper<T> node = _e.getWrap();
 					logNode = logNode.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b();
 					logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b();
@@ -493,7 +491,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -564,8 +562,8 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					logNode = logNode.getAttributes().delete("mes" + id).b();
 					logNode = logNode.getAttributes().delete("timestamp" + id).b();
 					int count = Integer.parseInt(id);
@@ -583,7 +581,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -617,8 +615,8 @@
 
 			JungleTreeEditor editor = tree.getTreeEditor();
 			NodeEditor e = new NodeEditor() {
-				public Either<Error,Logging> edit(TreeNode node) {
-					Logging logNode = wrap(node , new DefaultOperationLog());
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
 					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
 					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
 					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
@@ -627,7 +625,7 @@
 				}
 
 				@Override
-				public Logging wrap(TreeNode node, OperationLog op) {
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
 					return new LoggingNode(node, op);
 				}
 
@@ -722,6 +720,8 @@
 		TreeNode node = tree.getRootNode();
 
 		DefaultTraverser traverser = new DefaultTraverser();
+		// TraversableNodeWrapper<Node> traversable = new
+		// TraversableNodeWrapper<Node>(node);
 		DefaultEvaluator evaluator = new DefaultEvaluator(path);
 		Either<Error, Traversal> ret = traverser.traverse(node,
 				evaluator);
@@ -734,26 +734,7 @@
 		return new getAttributeImp(target);
 	}
 
-	public TreeNode search(JungleTree tree ,String searchAttribute,String key){
-		InterfaceTraverser ifTraverser = tree.getTraverser();
-		Iterator<Pair<TreeNode, NodePath>> searchNode = ifTraverser.find(
-		        (TreeNode node) -> {
-		            ByteBuffer attribute = node.getAttributes().get(key);
-		            if(attribute != null){
-		                byte[] byteAttribute = attribute.array();
-		                String str = new String(byteAttribute);
-		                System.out.println(str);
-		                return str.equals(searchAttribute);
-		            }
-		            return false;
-		        }
-		        );
-		
-		if (!searchNode.hasNext()) 
-			return null;
-		return searchNode.next().left();
-		
-	}
+
 	
 	public boolean compare(TreeNode compareNode, String compareAttribute) {
 		String labName = compareNode.getAttributes().getString("mes");
@@ -770,86 +751,6 @@
 		return false;
 	}
 	
-	public String searchJungle(String requestName , String approvalName) {
-		JungleTree tree = jungle.getTreeByName("人物");
-
-		
-		TreeNode searchNode = search(tree , requestName,"mes");
-		if (searchNode == null){
-            fail(requestName,approvalName,"申請者がデータに無い人物です");
-			return "申請者がデータに無い人物です";
-		}
-		
-		if (!compare(searchNode, "河野研")){
-            fail(requestName,approvalName,"河野研以外に所属している人は、この申請をすることが出来ません");
-			return "河野研以外に所属している人は、この申請をすることが出来ません";
-		}
-		
-		searchNode = search(tree , approvalName,"mes");
-		if (searchNode == null){
-            fail(requestName,approvalName,"承認者がデータに無い人物です");
-			return "承認者がデータに無い人物です";
-		}
-		
-		String position = searchNode.getAttributes().getString("mes1");
-		
-		JungleTree grantTree = jungle.getTreeByName("役職");
-		searchNode = search(grantTree , position,"mes");
-		
-		if (!compare(searchNode, "准教授権限") && !compare(searchNode, "教授権限")){
-            fail(requestName,approvalName,"権限がありません(この申請の承認は助教授か、教授である必要があります");
-			return "権限がありません(この申請の承認は助教授か、教授である必要があります";
-		}
-		
-	      searchNode = search(tree , approvalName,"mes");
-	        if (searchNode == null){
-                fail(requestName,approvalName,"申請者がデータに無い人物です");
-	            return "申請者がデータに無い人物です";
-	        }
-	        
-	        if (!compare(searchNode, "上位申請権限")){
-	            fail(requestName,approvalName,"権限がありません(この申請の承認は上位申請者である必要があります");
-	            return "権限がありません(この申請の承認は上位申請者である必要があります";
-	        }
-	        success(requestName,approvalName);
-	        
-	        return "申請が受理されました";   
-	}
-	
-	   public void fail(String requestName, String approvalName, String reason){
-	        JungleTree contextTree = jungle.getTreeByName("申請");
-	        JungleTreeEditor editor = contextTree.getTreeEditor();
-	        editor = editor.putAttribute(new DefaultNodePath(),"mes0", ByteBuffer.wrap(("申請者名 = " + requestName).getBytes())).b();
-	        editor = editor.putAttribute(new DefaultNodePath(),"mes1", ByteBuffer.wrap(("申請内容".getBytes()))).b();
-	        Date date = new Date();
-	        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
-	        String time = sdf.format(date);
-	        editor = editor.putAttribute(new DefaultNodePath(),"mes2", ByteBuffer.wrap(("承認時間 = " + time).getBytes())).b();
-
-	        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes", ByteBuffer.wrap("否認書".getBytes())).b();
-	        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes0", ByteBuffer.wrap(("否認者名 = " + approvalName).getBytes())).b();
-	        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes1", ByteBuffer.wrap(("否認理由 = " + reason).getBytes())).b();
-	        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes2", ByteBuffer.wrap(("承認時間 = " + time).getBytes())).b();
-	        editor.success();
-	    }
-	
-	public void success(String requestName, String approvalName){
-        JungleTree contextTree = jungle.getTreeByName("申請");
-        JungleTreeEditor editor = contextTree.getTreeEditor();
-        editor = editor.putAttribute(new DefaultNodePath(),"mes0", ByteBuffer.wrap(("申請者名 = " + requestName).getBytes())).b();
-        editor = editor.putAttribute(new DefaultNodePath(),"mes1", ByteBuffer.wrap(("申請内容".getBytes()))).b();
-        Date date = new Date();
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
-        String time = sdf.format(date);
-        editor = editor.putAttribute(new DefaultNodePath(),"mes2", ByteBuffer.wrap(("承認時間" + time).getBytes())).b();
-
-        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes", ByteBuffer.wrap("承認書".getBytes())).b();
-        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes0", ByteBuffer.wrap(("承認者名 = " + approvalName).getBytes())).b();
-        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes1", ByteBuffer.wrap("承認理由 = 権限があってるので許可した".getBytes())).b();
-        editor = editor.putAttribute(new DefaultNodePath().add(0),"mes2", ByteBuffer.wrap(("承認時間" + time).getBytes())).b();
-        editor.success();
-	}
-	
 	public int getRequestNum() {
 		return requestCounter.get();
 	}
@@ -891,4 +792,10 @@
 		return str;
 	}
 
+	@Override
+	public String searchJungle(String requestName, String permmitName) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 }
--- a/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java	Fri Oct 17 15:16:56 2014 +0900
@@ -18,15 +18,12 @@
 	private final NetworkBulletinBoard bbs;
 	private final String createBoardMessagePath;
 	private final String editMessagePath;
-	private final String showMatrixPath;
 
 	private static final String PARAM_BOARD_NAME = "bname";
 
 	public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs,
-			String _createBoardMessagePath, String _editMessagePath, String _showMatrixPath,
-			ThreadPool thp) {
+			String _createBoardMessagePath, String _editMessagePath,ThreadPool thp) {
 		bbs = _bbs;
-		showMatrixPath = _showMatrixPath;
 		createBoardMessagePath = _createBoardMessagePath;
 		editMessagePath = _editMessagePath;
 	}
@@ -52,7 +49,6 @@
 		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='" +bbs.sanitize( _bname) + "'/> EditKey : <input type='textarea' 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");
-		_pw.write("<small><a href=" + showMatrixPath + "?bname=" + bbs.sanitize(_bname) + "&uuid= >MatrixMode"+"</a></small><br>");
 		
 		for (BoardMessage msg : bbs.getMessages(_bname)) {//フォルダの表示
 			_pw.write("<hr/>");
--- a/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java	Fri Oct 17 15:16:56 2014 +0900
@@ -6,6 +6,7 @@
 import javax.servlet.Servlet;
 
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerCollection;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.thread.ThreadPool;
@@ -25,14 +26,6 @@
 import app.bbs.NetworkJungleBulletinBoard;
 import app.bbs.RequestNumCheckServlet;
 import app.bbs.ShowMessageWithTimeStampServlet;
-import app.bbs.thinks.CreateNode;
-import app.bbs.thinks.EditAttributeServlet;
-import app.bbs.thinks.EditNodeName;
-import app.bbs.thinks.ShowMatrix;
-import app.bbs.thinks.createAttributeMatrix;
-import app.bbs.thinks.deleteAttributeServlet;
-import app.bbs.thinks.deleteNodeServlet;
-import app.bbs.thinks.permission;
 
 public class StartBBSCodeSegment extends CodeSegment {
 
@@ -78,48 +71,26 @@
         System.out.println("name : "+ name);
         /* Jetty registration */
         String createBoardMessagePath = "/createBoardMessage";
-        String createFolderPath = "/createFolder";
         String createBoardPath = "/createBoard";
         String editMessagePath = "/editMessage";
         String showBoardMessagePath = "/showBoardMessage";
-        String showMatrixPath = "/showMatrix";
-        String createAttributePath = "/createAttribute";
-        String editAttributePath = "/editAttribute";
-        String deleteAttributePath = "/deleteAttribute";
-        String deleteNodePath = "/deleteNode";
-        String editNodePath = "/editNode";
-        String permissionPath = "/permission";
+
+
         Server serv = new Server(bbsPort);
         ThreadPool thp = serv.getThreadPool();
         Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
-        Servlet createFolder = new CreateNode(cassaBBS);
         Servlet createBoard = new CreateBoardServlet(cassaBBS);
-        Servlet editNode = new EditNodeName(cassaBBS);
-        Servlet createAttribute = new createAttributeMatrix(cassaBBS);
-        Servlet editAttribute = new EditAttributeServlet(cassaBBS);
-        Servlet deleteAttribute = new deleteAttributeServlet(cassaBBS);
-        Servlet deleteNode = new deleteNodeServlet(cassaBBS);
         Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
         Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
         //    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
-        Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,showMatrixPath, thp);
-        Servlet matrix = new ShowMatrix(cassaBBS,createFolderPath,editNodePath, showMatrixPath, createAttributePath, editAttributePath,deleteAttributePath,deleteNodePath,thp);
-        Servlet per = new permission(cassaBBS,permissionPath,thp);
+        Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,thp);
+
         ServletHandler context = new ServletHandler();
-        context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
-        
         context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
-        context.addServletWithMapping(new ServletHolder(createFolder),createFolderPath);
         context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
-        context.addServletWithMapping(new ServletHolder(editNode),editNodePath);
-        context.addServletWithMapping(new ServletHolder(createAttribute),createAttributePath);
+        context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
         context.addServletWithMapping(new ServletHolder(index),"/");
-        context.addServletWithMapping(new ServletHolder(deleteAttribute),deleteAttributePath);
-        context.addServletWithMapping(new ServletHolder(deleteNode),deleteNodePath);
-        context.addServletWithMapping(new ServletHolder(editAttribute),editAttributePath);
         context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
-        context.addServletWithMapping(new ServletHolder(matrix),showMatrixPath);
-        context.addServletWithMapping(new ServletHolder(per),permissionPath);
         /* 
          * For write benchmark 
          */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/codesegment/StartmaTrixBBSCodeSegment.java	Fri Oct 17 15:16:56 2014 +0900
@@ -0,0 +1,145 @@
+package app.bbs.codesegment;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import javax.servlet.Servlet;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.thread.ThreadPool;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.CreateBoardMessageServlet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.CreateBoardServlet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.EditMessageServlet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.EditMessageUseGetServlet;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.ShowBoardsServlet;
+
+
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import app.bbs.NetworkBulletinBoard;
+import app.bbs.NetworkJungleBulletinBoard;
+import app.bbs.RequestNumCheckServlet;
+import app.bbs.ShowMessageWithTimeStampServlet;
+import app.bbs.thinks.CreateNode;
+import app.bbs.thinks.EditAttributeServlet;
+import app.bbs.thinks.EditNodeName;
+import app.bbs.thinks.NetworkMatrixJungleBulletinBoard;
+import app.bbs.thinks.ShowBoardsServletMatrix;
+import app.bbs.thinks.ShowMatrix;
+import app.bbs.thinks.ShowMessageWithTimeStampServletMatrix;
+import app.bbs.thinks.createAttributeMatrix;
+import app.bbs.thinks.deleteAttributeServlet;
+import app.bbs.thinks.deleteNodeServlet;
+import app.bbs.thinks.permission;
+
+public class StartmaTrixBBSCodeSegment extends CodeSegment {
+
+    int bbsPort = 8080;
+    Receiver host = ids.create(CommandType.PEEK);
+    private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$");
+    private String[] args;
+    boolean persistentFlag = false;
+
+    public StartmaTrixBBSCodeSegment(String[] _args, int p) {
+        args = _args;
+        bbsPort = p;
+        host.setKey("host");	
+    }
+
+    public StartmaTrixBBSCodeSegment() {
+        args = null;
+        host.setKey("host");	
+    }
+
+    @Override
+    public void run() {
+        String name = host.asString();
+        Matcher matcher = pattern.matcher(name);
+        matcher.find();
+        //		String type = matcher.group(1);
+        for(String arg: args) {
+            if(arg.equals("-persistent")){
+                persistentFlag = true;
+            }
+        }
+        NetworkBulletinBoard cassaBBS = null;
+        if(persistentFlag) {
+            System.out.println("log loading...");
+            cassaBBS = NetworkMatrixJungleBulletinBoard.NewPersistentJungle(name);
+            cassaBBS.init();
+        } else {
+            cassaBBS = new NetworkJungleBulletinBoard(name);
+            cassaBBS.init();
+        }
+
+        System.out.println("StartBBSCodeSegment");
+        System.out.println("name : "+ name);
+        /* Jetty registration */
+        String createBoardMessagePath = "/createBoardMessage";
+        String createFolderPath = "/createFolder";
+        String createBoardPath = "/createBoard";
+        String editMessagePath = "/editMessage";
+        String showBoardMessagePath = "/showBoardMessage";
+        String showMatrixPath = "/showMatrix";
+        String createAttributePath = "/createAttribute";
+        String editAttributePath = "/editAttribute";
+        String deleteAttributePath = "/deleteAttribute";
+        String deleteNodePath = "/deleteNode";
+        String editNodePath = "/editNode";
+        String permissionPath = "/permission";
+        Server serv = new Server(bbsPort);
+        ThreadPool thp = serv.getThreadPool();
+        Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
+        Servlet createFolder = new CreateNode(cassaBBS);
+        Servlet createBoard = new CreateBoardServlet(cassaBBS);
+        Servlet editNode = new EditNodeName(cassaBBS);
+        Servlet createAttribute = new createAttributeMatrix(cassaBBS);
+        Servlet editAttribute = new EditAttributeServlet(cassaBBS);
+        Servlet deleteAttribute = new deleteAttributeServlet(cassaBBS);
+        Servlet deleteNode = new deleteNodeServlet(cassaBBS);
+        Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
+        Servlet index = new ShowBoardsServletMatrix(cassaBBS,createBoardPath,showMatrixPath);
+        //    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
+        Servlet board = new ShowMessageWithTimeStampServletMatrix(cassaBBS,createBoardMessagePath,editMessagePath,showMatrixPath, thp);
+        Servlet matrix = new ShowMatrix(cassaBBS,createFolderPath,editNodePath, showMatrixPath, createAttributePath, editAttributePath,deleteAttributePath,deleteNodePath,thp);
+        Servlet per = new permission(cassaBBS,permissionPath,thp);
+        ServletHandler context = new ServletHandler();
+        context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
+        
+        context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
+        context.addServletWithMapping(new ServletHolder(createFolder),createFolderPath);
+        context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
+        context.addServletWithMapping(new ServletHolder(editNode),editNodePath);
+        context.addServletWithMapping(new ServletHolder(createAttribute),createAttributePath);
+        context.addServletWithMapping(new ServletHolder(index),"/");
+        context.addServletWithMapping(new ServletHolder(deleteAttribute),deleteAttributePath);
+        context.addServletWithMapping(new ServletHolder(deleteNode),deleteNodePath);
+        context.addServletWithMapping(new ServletHolder(editAttribute),editAttributePath);
+        context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
+        context.addServletWithMapping(new ServletHolder(matrix),showMatrixPath);
+        context.addServletWithMapping(new ServletHolder(per),permissionPath);
+        /* 
+         * For write benchmark 
+         */
+        String editMessageUseGetPath = "/editMessageUseGet";
+        Servlet editMessageUseGet = new EditMessageUseGetServlet(cassaBBS);
+        context.addServletWithMapping(new ServletHolder(editMessageUseGet), editMessageUseGetPath);
+        String requestNumCheckPath = "/requestNum";
+        Servlet requestNumCheckServlet = new RequestNumCheckServlet(cassaBBS);
+        context.addServletWithMapping(new ServletHolder(requestNumCheckServlet), requestNumCheckPath);
+
+        serv.setHandler(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/thinks/MatrixApp.java	Fri Oct 17 15:16:56 2014 +0900
@@ -0,0 +1,20 @@
+package app.bbs.thinks;
+
+import alice.jungle.remote.RemoteConfig;
+import alice.topology.node.TopologyNode;
+import app.bbs.codesegment.StartBBSCodeSegment;
+import app.bbs.codesegment.StartmaTrixBBSCodeSegment;
+
+public class MatrixApp {
+    public static void main(String[] args) throws Exception {
+        RemoteConfig conf = new RemoteConfig(args);
+        if (conf.getManagerHostName() == null) {
+            // String localHostName ="localhost";
+            // HostMessage host = new HostMessage(localHostName, conf.localPort);
+            StartmaTrixBBSCodeSegment cs1 = new StartmaTrixBBSCodeSegment(args, conf.bbsPort);
+            cs1.ods.put("host", "node0");
+        } else {
+            new TopologyNode(conf, new StartBBSCodeSegment(args, conf.bbsPort));
+        }
+    }
+}
--- a/src/main/java/app/bbs/thinks/NetworkMatrixBulletinBoard.java	Sun Sep 28 17:29:11 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,343 +0,0 @@
-package app.bbs.thinks;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.concurrent.atomic.AtomicInteger;
-
-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.bbs.BoardMessage;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.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.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
-import alice.jungle.core.NetworkDefaultJungle;
-import alice.jungle.persistent.AliceJournal;
-import alice.jungle.persistent.NetworkJournal;
-import alice.jungle.persistent.PersistentJournal;
-import alice.jungle.transaction.JungleUpdater;
-import app.bbs.BulletinBoardJungleManager;
-import app.bbs.NetworkBulletinBoard;
-import app.bbs.NetworkJungleBulletinBoard;
-
-public class NetworkMatrixBulletinBoard implements NetworkBulletinBoard {
-
-    private final Jungle jungle;
-    private final NetworkJournal journal;
-    private final String LOG_DIR;
-    private Boolean persistentFlag;
-    private AtomicInteger requestCounter;
-    private long renewTime;
-
-    private NetworkMatrixBulletinBoard(String _uuid, NetworkJournal _journal) {
-        journal = _journal;
-        jungle = new NetworkDefaultJungle(journal, _uuid,
-                new DefaultTreeEditor(new DefaultTraverser()));
-        BulletinBoardJungleManager.setJungle(jungle);
-        persistentFlag = false;
-        requestCounter = BulletinBoardJungleManager.getRequestCounter();
-        LOG_DIR = "./log";
-        renewTime = 0;
-    }
-    
-    public NetworkMatrixBulletinBoard(String _uuid) {
-        this(_uuid, new AliceJournal());
-        jungle.createNewTree("boards");
-    }
-
-    public static NetworkBulletinBoard NewPersistentJungle(String _uuid) {
-        NetworkMatrixBulletinBoard board = new NetworkMatrixBulletinBoard( _uuid, new PersistentJournal());
-        board.persistentFlag = true;
-        return board;
-    }
-
-    @Override
-    public void init() {
-        if (!persistentFlag) {
-            return;
-        }
-        checkAndCreateLogDirectory();
-        try {
-            commitLogRecover();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public void checkAndCreateLogDirectory() {
-        File logFile = new File(LOG_DIR);
-        if (!logFile.exists()) {
-            logFile.mkdir();
-            return;
-        }
-        if (logFile.isFile()) {
-            logFile.delete();
-            logFile.mkdir();
-        }
-    }
-
-    public void commitLogRecover() throws IOException {
-        File[] logFiles = new File(LOG_DIR).listFiles();
-        for (File logFile : logFiles) {
-            commitLogRecover(logFile);
-            logFile.delete();
-        }
-        if (jungle.getTreeByName("boards") == null) {
-            jungle.createNewTree("boards");
-        }
-    }
-
-    private void commitLogRecover(File logFile) throws IOException {
-        journal.setInputFile(logFile);
-        ChangeListReader reader = journal.getReader();
-        if (reader == null)
-            return;
-        for (ChangeList chList : reader) {
-            String treeName = chList.getTreeName();
-            JungleTree tree = jungle.getTreeByName(treeName);
-            if (tree == null) {
-                tree = jungle.createNewTree(treeName);
-            }
-            JungleTreeEditor editor = tree.getLocalTreeEditor();
-            Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor,
-                    chList);
-            editor = either.b();
-            if (either.isA()) {
-                throw new IOException("Failed commit log recovery");
-            }
-            editor.success();
-        }
-    }
-
-    @Override
-    public Iterable<String> getBoards() {
-        JungleTree tree = jungle.getTreeByName("boards");
-        TreeNode node = tree.getRootNode();
-        Children chs = node.getChildren();
-
-        IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
-            public String conv(TreeNode _b) {
-                ByteBuffer e = _b.getAttributes().get("name");
-                System.out.println(new String(e.array()));
-                return new String(e.array());
-            }
-        };
-
-        return new IterableConverter<String, TreeNode>(chs, converter);
-    }
-
-    @Override
-    public long getRenewTime(String _boardName) {
-        return renewTime;
-    }
-
-    @Override
-    public void createBoards(String _name, String _author, String _initMessage,
-            String _editKey) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void createBoardMessage(String _board, String _author,
-            String _message, String _editKey) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void editMessage(String _board, String _uuid, String _author,
-            String _message, String _editKey) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public String sanitize(String str) {
-        if (str == null) {
-            return str;
-        }
-        str = str.replaceAll("&", "&amp;");
-        str = str.replaceAll("<", "&lt;");
-        str = str.replaceAll(">", "&gt;");
-        str = str.replaceAll("\"", "&quot;");
-        str = str.replaceAll("'", "&#39;");
-        return str;
-    }
-
-    @Override
-    public Iterable<BoardMessage> getMessages(String _boardName) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public int getRequestNum() {
-        return requestCounter.get();
-    }
-
-    @Override
-    public Iterable<BoardMessage> getFolder(String _boardName, String nodeNum) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void createFolder(String boardName, String author, String msg,
-            String key, String _nodeNum) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void createAttribute(String boardName, String uuid, String author,
-            String msg, String key) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public getAttributeImp getAttribute(String _bname, String nodeNum) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void editAttribute(String boardName, String path, String id,
-            String message) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void deleteAttribute(String _board, String _path, String id) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void deleteNode(String _board, String _path, String id) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void editMatrixMessage(String boardName, String path, String author,
-            String msg, String key) {
-        // TODO Auto-generated method stub
-
-    }
-
-    
-    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 TreeNode search(JungleTree tree ,String searchAttribute,String key){
-        InterfaceTraverser ifTraverser = tree.getTraverser();
-        Iterator<Pair<TreeNode, NodePath>> searchNode = ifTraverser.find(
-                (TreeNode node) -> {
-                    ByteBuffer attribute = node.getAttributes().get(key);
-                    if(attribute != null){
-                        byte[] byteAttribute = attribute.array();
-                        String str = new String(byteAttribute);
-                        System.out.println(str);
-                        return str.equals(searchAttribute);
-                    }
-                    return false;
-                }
-                );
-        
-        if (!searchNode.hasNext()) 
-            return null;
-        return searchNode.next().left();
-        
-    }
-    
-    public boolean compare(TreeNode compareNode, String compareAttribute) {
-        String labName = compareNode.getAttributes().getString("mes");
-        if (labName.equals(compareAttribute))
-            return true;
-
-        int loopCount = 0;
-        for (loopCount = 0 ;compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++ ) {
-            labName = compareNode.getAttributes().getString("mes" + loopCount);
-            if (labName.equals(compareAttribute))
-                return true;
-        }
-        
-        return false;
-    }
-    
-    @Override
-    public String searchJungle(String requestName , String approvalName) {
-        JungleTree tree = jungle.getTreeByName("人物");
-
-        
-        TreeNode searchNode = search(tree , requestName,"mes");
-        if (searchNode == null)
-            return "申請者がデータに無い人物です";
-        
-        if (!compare(searchNode, "河野研"))
-            return "河野研以外に所属している人は、この申請をすることが出来ません";
-        
-        
-        searchNode = search(tree , approvalName,"mes");
-        if (searchNode == null)
-            return "承認者がデータに無い人物です";
-        
-        String position = searchNode.getAttributes().getString("mes1");
-        
-        JungleTree grantTree = jungle.getTreeByName("役職");
-        searchNode = search(grantTree , position,"mes");
-        
-        if (!compare(searchNode, "准教授権限") && !compare(searchNode, "教授権限"))
-            return "権限がありません(この申請の承認は助教授か、教授である必要があります";
-        
-        
-          searchNode = search(tree , approvalName,"mes");
-            if (searchNode == null)
-                return "申請者がデータに無い人物です";
-            
-            if (!compare(searchNode, "上位申請権限"))
-                return "権限がありません(この申請の承認は上位申請者である必要があります";
-            
-   
-    }
-
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/thinks/NetworkMatrixJungleBulletinBoard.java	Fri Oct 17 15:16:56 2014 +0900
@@ -0,0 +1,848 @@
+package app.bbs.thinks;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import fj.data.List;
+import fj.data.TreeMap;
+import alice.jungle.core.NetworkDefaultJungle;
+import alice.jungle.persistent.AliceJournal;
+import alice.jungle.persistent.NetworkJournal;
+import alice.jungle.persistent.PersistentJournal;
+import alice.jungle.transaction.JungleUpdater;
+import app.bbs.BulletinBoardJungleManager;
+import app.bbs.NetworkBulletinBoard;
+import app.bbs.thinks.getAttributeImp;
+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.bbs.BoardMessage;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.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.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal;
+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 jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode;
+import junit.framework.Assert;
+
+public class NetworkMatrixJungleBulletinBoard implements NetworkBulletinBoard {
+	private final Jungle jungle;
+	private final NetworkJournal journal;
+	private final String LOG_DIR;
+	private Boolean persistentFlag;
+	private AtomicInteger requestCounter;
+	private long renewTime;
+
+	private NetworkMatrixJungleBulletinBoard(String _uuid, NetworkJournal _journal) {
+		journal = _journal;
+		jungle = new NetworkDefaultJungle(journal, _uuid,
+				new DefaultTreeEditor(new DefaultTraverser()));
+		BulletinBoardJungleManager.setJungle(jungle);
+		persistentFlag = false;
+		requestCounter = BulletinBoardJungleManager.getRequestCounter();
+		LOG_DIR = "./log";
+		renewTime = 0;
+	}
+
+	public NetworkMatrixJungleBulletinBoard(String _uuid) {
+		this(_uuid, new AliceJournal());
+		jungle.createNewTree("boards");
+	}
+
+	public static NetworkBulletinBoard NewPersistentJungle(String _uuid) {
+		NetworkMatrixJungleBulletinBoard board = new NetworkMatrixJungleBulletinBoard(
+				_uuid, new PersistentJournal());
+		board.persistentFlag = true;
+		return board;
+	}
+
+	public void init() {
+		if (!persistentFlag) {
+			return;
+		}
+		checkAndCreateLogDirectory();
+		try {
+			commitLogRecover();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void checkAndCreateLogDirectory() {
+		File logFile = new File(LOG_DIR);
+		if (!logFile.exists()) {
+			logFile.mkdir();
+			return;
+		}
+		if (logFile.isFile()) {
+			logFile.delete();
+			logFile.mkdir();
+		}
+	}
+
+	public void commitLogRecover() throws IOException {
+		File[] logFiles = new File(LOG_DIR).listFiles();
+		for (File logFile : logFiles) {
+			commitLogRecover(logFile);
+			logFile.delete();
+		}
+		if (jungle.getTreeByName("boards") == null) {
+			jungle.createNewTree("boards");
+		}
+	}
+
+	private void commitLogRecover(File logFile) throws IOException {
+		journal.setInputFile(logFile);
+		ChangeListReader reader = journal.getReader();
+		if (reader == null)
+			return;
+		for (ChangeList chList : reader) {
+			String treeName = chList.getTreeName();
+			JungleTree tree = jungle.getTreeByName(treeName);
+			if (tree == null) {
+				tree = jungle.createNewTree(treeName);
+			}
+			JungleTreeEditor editor = tree.getLocalTreeEditor();
+			Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor,
+					chList);
+			editor = either.b();
+			if (either.isA()) {
+				throw new IOException("Failed commit log recovery");
+			}
+			editor.success();
+		}
+	}
+
+	public Iterable<String> getBoards() {
+		JungleTree tree = jungle.getTreeByName("boards");
+		TreeNode node = tree.getRootNode();
+		Children chs = node.getChildren();
+
+		IterableConverter.Converter<String, TreeNode> converter = new IterableConverter.Converter<String, TreeNode>() {
+			public String conv(TreeNode _b) {
+				ByteBuffer e = _b.getAttributes().get("name");
+				System.out.println(new String(e.array()));
+				return new String(e.array());
+			}
+		};
+
+		return new IterableConverter<String, TreeNode>(chs, converter);
+	}
+
+	public long getRenewTime(String _boardName) {
+		return renewTime;
+	}
+
+	public void createBoards(final String _name, final String _author, final String _initMessage, final String _editKey) {
+		requestCounter.incrementAndGet();
+		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();
+		final long timestamp = System.currentTimeMillis();
+		ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		either = editor.putAttribute(root.add(0), "timestamp", tBuffer);
+		if (either.isA()) {
+			throw new IllegalStateException();
+		}
+		either = either.b().success();
+		if (either.isA()) {
+			throw new IllegalStateException();
+		}
+
+		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() {
+			ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
+
+			public Either<Error,LoggingNode> edit(TreeNode node) {
+				LoggingNode logNode = wrap(node , new DefaultOperationLog());
+				logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+				logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b();
+				logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+				tBuffer2.putLong(timestamp);
+				logNode = logNode.getAttributes().put("timestamp", tBuffer2).b();
+				return DefaultEither.newB(logNode);
+			}
+			@Override
+			public LoggingNode wrap(TreeNode node, OperationLog op) {
+				return new LoggingNode(node, op);
+			}
+			@Override
+			public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+				// TODO Auto-generated method stub
+				return null;
+			}
+
+		};
+
+		either = editor.edit(root.add(0), e);
+		if (either.isA()) {
+			throw new IllegalStateException();
+		}
+		either.b().success();
+
+	}
+
+	public void createFolder(final String _board, final String _author, final String _message, final String _editKey, String _nodeNum) {
+		JungleTree tree = jungle.getTreeByName(_board);
+		if (tree == null) {
+			throw new IllegalStateException();
+		}
+
+		DefaultNodePath path = new DefaultNodePath();
+		try {
+			for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
+				if (!_nodeNum.substring(count, count + 1).equals("/"))
+					path = path.add(Integer.parseInt(_nodeNum.substring(count,
+							count + 1)));
+			}
+		} catch (Exception _e) {
+		}
+		requestCounter.incrementAndGet();
+		Either<Error, JungleTreeEditor> either;
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+
+		do {
+			TreeNode node = tree.getRootNode();
+			DefaultTraverser traverser = new DefaultTraverser();
+			// TraversableNodeWrapper<Node> traversable = new
+			// TraversableNodeWrapper<Node>(node);
+			DefaultEvaluator evaluator = new DefaultEvaluator(path);
+			Either<Error, Traversal> ret = traverser.traverse(node,
+					evaluator);
+			if (ret.isA()) {
+				Assert.fail();
+			}
+
+			Traversal traversal = ret.b();
+			TreeNode target = traversal.destination();
+			int size = target.getChildren().size();
+			JungleTreeEditor editor = tree.getTreeEditor();
+			either = editor.addNewChildAt(path, size);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+
+			NodeEditor e = new NodeEditor() {
+
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			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 createBoardMessage(final String _board, final String _author, final String _message, final String _editKey) {
+		requestCounter.incrementAndGet();
+		JungleTree tree = jungle.getTreeByName(_board);
+		if (tree == null) {
+			throw new IllegalStateException();
+		}
+
+		Either<Error, JungleTreeEditor> either;
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		do {
+
+			TreeNode 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();
+
+			NodeEditor e = new NodeEditor() {
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			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 _nodeNum,final String _author, final String _message, final String _editKey) {
+		requestCounter.incrementAndGet();
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(_board);
+		Either<Error, JungleTreeEditor> either = null;
+
+		do {
+			DefaultNodePath path = new DefaultNodePath();
+			try {
+				for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
+					if (!_nodeNum.substring(count, count + 1).equals("/"))
+						path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1)));
+				}
+			} catch (Exception _e) {
+			}
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					System.out.println(new String(node.getAttributes().get("mes").array()));
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					System.out.println(new String(node.getAttributes().get("mes").array()));
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+		renewTime = timestamp;
+	}
+
+	public void createAttribute(String _board, String _uuid, final String _author, final String _message, final String _editKey) {
+		requestCounter.incrementAndGet();
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(_board);
+		Either<Error, JungleTreeEditor> either = null;
+		DefaultNodePath path = new DefaultNodePath();
+		do {
+			try {
+				for (int count = 0; _uuid.substring(count, count + 1) != null; count++) {
+					if (!_uuid.substring(count, count + 1).equals("/"))
+						path = path.add(Integer.parseInt(_uuid.substring(count,
+								count + 1)));
+				}
+			} catch (Exception _e) {
+			}
+
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				String str;
+
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					str = "0";
+					int count = 0;
+					for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) {
+					}
+					str = String.valueOf(count);
+					logNode = logNode.getAttributes().put("mes" + str,ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp" + str, tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+	}
+
+	public void editAttribute(String boardName, String _path, final String id, final String _message) {
+		requestCounter.incrementAndGet();
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(boardName);
+		Either<Error, JungleTreeEditor> either = null;
+		DefaultNodePath path = new DefaultNodePath();
+		do {
+			try {
+				for (int count = 0; _path.substring(count, count + 1) != null; count++) {
+					if (!_path.substring(count, count + 1).equals("/"))
+						path = path.add(Integer.parseInt(_path.substring(count,
+								count + 1)));
+				}
+			} catch (Exception _e) {
+			}
+
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					// EnableNodeWrapper<T> node = _e.getWrap();
+					logNode = logNode.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+	}
+
+	public void deleteNode(String _board, String _path, String _id) {
+		requestCounter.incrementAndGet();
+		int id = Integer.parseInt(_id);
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(_board);
+		Either<Error, JungleTreeEditor> either = null;
+		DefaultNodePath path = new DefaultNodePath();
+		do {
+			try {
+				for (int count = 0; _path.substring(count, count + 1) != null; count++) {
+					if (!_path.substring(count, count + 1).equals("/"))
+						path = path.add(Integer.parseInt(_path.substring(count,count + 1)));
+				}
+			} catch (Exception _e) {
+			}
+
+			JungleTreeEditor editor = tree.getTreeEditor();
+
+			either = editor.deleteChildAt(path, id);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+
+	}
+
+	public void deleteAttribute(String _board, String _path, final String id) {
+		requestCounter.incrementAndGet();
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(_board);
+		Either<Error, JungleTreeEditor> either = null;
+		DefaultNodePath path = new DefaultNodePath();
+		do {
+			try {
+				for (int count = 0; _path.substring(count, count + 1) != null; count++) {
+					if (!_path.substring(count, count + 1).equals("/"))
+						path = path.add(Integer.parseInt(_path.substring(count,
+								count + 1)));
+				}
+			} catch (Exception _e) {
+				System.out.println("屑");
+			}
+
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().delete("mes" + id).b();
+					logNode = logNode.getAttributes().delete("timestamp" + id).b();
+					int count = Integer.parseInt(id);
+					for (; logNode.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) {
+						logNode = logNode.getAttributes().put("mes" + count,node.getAttributes().get("mes"+ String.valueOf(count + 1))).b();
+						logNode = logNode.getAttributes().put("timestamp" + count, tBuffer).b();
+						count++;
+					}
+					if (count != Integer.parseInt(id)) {
+						logNode = logNode.getAttributes().delete("timestamp" + count).b();
+						logNode = logNode.getAttributes().delete("mes" + count).b();
+					}
+
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+	}
+
+	public void editMatrixMessage(String _board, String _uuid,
+			final String _author, final String _message, final String _editKey) {
+		requestCounter.incrementAndGet();
+		final long timestamp = System.currentTimeMillis();
+		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+		tBuffer.putLong(timestamp);
+		JungleTree tree = jungle.getTreeByName(_board);
+		Either<Error, JungleTreeEditor> either = null;
+		do {
+			DefaultNodePath path = new DefaultNodePath();
+			path = path.add(Integer.parseInt(_uuid));
+
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				public Either<Error,LoggingNode> edit(TreeNode node) {
+					LoggingNode logNode = wrap(node , new DefaultOperationLog());
+					logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b();
+					logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b();
+					logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					logNode = logNode.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(logNode);
+				}
+
+				@Override
+				public LoggingNode wrap(TreeNode node, OperationLog op) {
+					return new LoggingNode(node, op);
+				}
+
+				@Override
+				public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() {
+					// TODO Auto-generated method stub
+					return null;
+				}
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+		renewTime = timestamp;
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName) {
+		requestCounter.incrementAndGet();
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		TreeNode node = tree.getRootNode();
+		Children chs = node.getChildren();
+		final AtomicInteger counter = new AtomicInteger(0);
+		IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() {
+			public BoardMessage conv(TreeNode _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, TreeNode>(chs, converter);
+	}
+
+	public Iterable<BoardMessage> getFolder(String _boardName, String _nodeNum) {
+
+		DefaultNodePath path = new DefaultNodePath();
+		try {
+			for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
+				if (!_nodeNum.substring(count, count + 1).equals("/"))
+					path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1)));
+			}
+		} catch (Exception _e) {
+		}
+		requestCounter.incrementAndGet();
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		TreeNode node = tree.getRootNode();
+
+		DefaultTraverser traverser = new DefaultTraverser();
+		// TraversableNodeWrapper<Node> traversable = new
+		// TraversableNodeWrapper<Node>(node);
+		DefaultEvaluator evaluator = new DefaultEvaluator(path);
+		Either<Error, Traversal> ret = traverser.traverse(node,
+				evaluator);
+		if (ret.isA()) {
+			Assert.fail();
+		}
+
+		Traversal traversal = ret.b();
+		TreeNode target = traversal.destination();
+		Children chs = target.getChildren();
+
+		final AtomicInteger counter = new AtomicInteger(0);
+		IterableConverter.Converter<BoardMessage, TreeNode> converter = new IterableConverter.Converter<BoardMessage, TreeNode>() {
+			public BoardMessage conv(TreeNode _b) {
+				String uuid = Integer.toString(counter.get());
+				String message = new String(_b.getAttributes().get("mes")
+						.array());
+				counter.incrementAndGet();
+				return new BoardMessageImpl(null, message, uuid);
+			}
+		};
+		return new IterableConverter<BoardMessage, TreeNode>(chs, converter);
+	}
+
+	public getAttributeImp getAttribute(String _boardName, String _nodeNum) {
+
+		DefaultNodePath path = new DefaultNodePath();
+		try {
+			for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) {
+				if (!_nodeNum.substring(count, count + 1).equals("/"))
+					path = path.add(Integer.parseInt(_nodeNum.substring(count,
+							count + 1)));
+			}
+		} catch (Exception _e) {
+		}
+		requestCounter.incrementAndGet();
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		TreeNode node = tree.getRootNode();
+
+		DefaultTraverser traverser = new DefaultTraverser();
+		// TraversableNodeWrapper<Node> traversable = new
+		// TraversableNodeWrapper<Node>(node);
+		DefaultEvaluator evaluator = new DefaultEvaluator(path);
+		Either<Error, Traversal> ret = traverser.traverse(node,
+				evaluator);
+		if (ret.isA()) {
+			Assert.fail();
+		}
+
+		Traversal traversal = ret.b();
+		TreeNode target = traversal.destination();
+		return new getAttributeImp(target);
+	}
+
+	public TreeNode search(JungleTree tree ,String searchAttribute,String key){
+		// 
+		InterfaceTraverser ifTraverser = tree.getTraverser();
+		Iterator<Pair<TreeNode, NodePath>> searchNode = ifTraverser.find(
+		        (TreeNode node) -> {
+		            ByteBuffer attribute = node.getAttributes().get(key);
+		            if(attribute != null){
+		                byte[] byteAttribute = attribute.array();
+		                String str = new String(byteAttribute);
+		                System.out.println(str);
+		                return str.equals(searchAttribute);
+		            }
+		            return false;
+		        }
+		        ,key,searchAttribute);
+		
+		if (!searchNode.hasNext()) 
+			return null;
+		return searchNode.next().left();
+		
+	}
+	
+	public boolean compare(TreeNode compareNode, String compareAttribute) {
+		String labName = compareNode.getAttributes().getString("mes");
+		if (labName.equals(compareAttribute))
+			return true;
+
+		int loopCount = 0;
+		for (loopCount = 0 ;compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++ ) {
+			labName = compareNode.getAttributes().getString("mes" + loopCount);
+			if (labName.equals(compareAttribute))
+				return true;
+		}
+		
+		return false;
+	}
+	public String searchJungle(String requestName , String approvalName) {
+		JungleTree tree = jungle.getTreeByName("人物");
+
+		
+		TreeNode searchNode = search(tree , "河野研","mes");
+		
+		if (searchNode == null)
+			return "申請者がデータに無い人物です";
+		
+		if (!compare(searchNode, "河野研"))
+			return "河野研以外に所属している人は、この申請をすることが出来ません";
+		
+		
+		searchNode = search(tree , approvalName,"mes");
+		if (searchNode == null)
+			return "承認者がデータに無い人物です";
+		
+		if (!compare(searchNode, "上位申請権限"))
+			return "権限がありません(この申請の承認は上位申請者である必要があります";
+		
+		String position = searchNode.getAttributes().getString("mes1");
+		
+		JungleTree grantTree = jungle.getTreeByName("役職");
+		searchNode = search(grantTree , position,"mes");
+		
+		if (!compare(searchNode, "准教授権限") || !!compare(searchNode, "教授権限"))
+			return "権限がありません(この申請の承認は助教授か、教授である必要があります";
+		
+		return "申請が受理されました";	
+	}
+	
+	
+	public int getRequestNum() {
+		return requestCounter.get();
+	}
+
+	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 String sanitize(String str) {
+		if (str == null) {
+			return str;
+		}
+		str = str.replaceAll("&", "&amp;");
+		str = str.replaceAll("<", "&lt;");
+		str = str.replaceAll(">", "&gt;");
+		str = str.replaceAll("\"", "&quot;");
+		str = str.replaceAll("'", "&#39;");
+		return str;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/thinks/ShowBoardsServletMatrix.java	Fri Oct 17 15:16:56 2014 +0900
@@ -0,0 +1,58 @@
+package app.bbs.thinks;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
+
+public class ShowBoardsServletMatrix extends HttpServlet
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final BulletinBoard bbs;
+	private final String createBoardPath;
+	private final String showBoardMessagePath;
+
+	public ShowBoardsServletMatrix(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath)
+	{
+		bbs = _bbs;
+		createBoardPath = _createBoardPath;
+		showBoardMessagePath = _showBoardMessagePath;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		try{
+			_res.setCharacterEncoding("UTF-8");
+			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=" + bbs.sanitize(board) + "'>"+ bbs.sanitize(board) + "</a></p>");
+		}
+		
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- a/src/main/java/app/bbs/thinks/ShowMatrix.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/main/java/app/bbs/thinks/ShowMatrix.java	Fri Oct 17 15:16:56 2014 +0900
@@ -62,7 +62,9 @@
 
 		if (nodeName == null)
 			nodeName = "rootNode";
-
+		if (path == null)
+			path = "";
+		
 		_pw.write("<h1>" + bbs.sanitize(nodeName) + " Path = " + path + "</h1>\n");
 
 		_pw.write("<form action='" + createBoardMessagePath
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/thinks/ShowMessageWithTimeStampServletMatrix.java	Fri Oct 17 15:16:56 2014 +0900
@@ -0,0 +1,68 @@
+package app.bbs.thinks;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.util.thread.ThreadPool;
+
+import app.bbs.NetworkBulletinBoard;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
+
+public class ShowMessageWithTimeStampServletMatrix extends HttpServlet {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final NetworkBulletinBoard bbs;
+	private final String createBoardMessagePath;
+	private final String editMessagePath;
+	private final String showMatrixPath;
+
+	private static final String PARAM_BOARD_NAME = "bname";
+
+	public ShowMessageWithTimeStampServletMatrix(NetworkBulletinBoard _bbs,
+			String _createBoardMessagePath, String _editMessagePath, String _showMatrixPath,
+			ThreadPool thp) {
+		bbs = _bbs;
+		showMatrixPath = _showMatrixPath;
+		createBoardMessagePath = _createBoardMessagePath;
+		editMessagePath = _editMessagePath;
+	}
+
+	public void doGet(HttpServletRequest _req, HttpServletResponse _res) {
+		final String bname = (_req.getParameter(PARAM_BOARD_NAME));
+		try {
+			_res.setCharacterEncoding("UTF-8");
+			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>" + bbs.sanitize(_bname) + "</h1>\n");
+		_pw.write("<p>Latest renew time : " + bbs.getRenewTime(_bname)
+				+ "</p>\n");
+		;
+
+		_pw.write("<form action='" + createBoardMessagePath + "' method='POST'\n");
+		_pw.write("<p>Author : <input type='text' name='author'/> <input type='hidden' name='bname' value='" +bbs.sanitize( _bname) + "'/> EditKey : <input type='textarea' 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");
+		_pw.write("<small><a href=" + showMatrixPath + "?bname=" + bbs.sanitize(_bname) + "&uuid= >MatrixMode"+"</a></small><br>");
+		
+		for (BoardMessage msg : bbs.getMessages(_bname)) {//フォルダの表示
+			_pw.write("<hr/>");
+			_pw.write("<p> Author <b>" + bbs.sanitize(msg.getAuthor()) + "</b></p>");
+			_pw.write("<small><a href=" + editMessagePath + "?bname=" + bbs.sanitize(_bname)
+					+ "&uuid=" + msg.getUUID() + ">"+ bbs.sanitize(msg.getMessage()) +"</a></small><br>");
+		}
+
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
--- a/src/test/java/alice/jungle/log/example/FindMatrixTest.java	Sun Sep 28 17:29:11 2014 +0900
+++ b/src/test/java/alice/jungle/log/example/FindMatrixTest.java	Fri Oct 17 15:16:56 2014 +0900
@@ -60,7 +60,7 @@
 		            }
 		            return false;
 		        }
-		        );
+		        ,"mes","比嘉健太");
 		
 		TreeNode node = searchNode.next().left();
 		byte[] nodeAttibute = node.getAttributes().get("mes").array();