changeset 166:b3d5fbe95b9a

Create Folder Method
author tatsuki
date Mon, 28 Jul 2014 14:09:54 +0900
parents cef31516e2e5
children 564f683b7aef
files src/main/java/app/bbs/NetworkBulletinBoard.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/thinks/CreateFolderMatrix.java src/main/java/app/bbs/thinks/ShowMatrix.java src/main/java/app/bbs/thinks/createAttributeMatrix.java src/test/java/alice/jungle/showMessageTest.java
diffstat 8 files changed, 580 insertions(+), 185 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/app/bbs/NetworkBulletinBoard.java	Tue Jul 15 18:07:36 2014 +0900
+++ b/src/main/java/app/bbs/NetworkBulletinBoard.java	Mon Jul 28 14:09:54 2014 +0900
@@ -1,5 +1,6 @@
 package app.bbs;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
 
 
@@ -7,5 +8,7 @@
 	public void init();
 	public int getRequestNum();
 	public long getRenewTime(String boardName);
-
+	public Iterable<BoardMessage> getFolder(String _boardName, String nodeNum);
+	public void createFolder(String boardName, String author, String msg,String key, String _nodeNum);
+	public void createAttribute(String boardName, String uuid, String author, String msg, String key);
 }
--- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Tue Jul 15 18:07:36 2014 +0900
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java	Mon Jul 28 14:09:54 2014 +0900
@@ -20,49 +20,51 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader;
 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.TraversableNodeWrapper;
 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.DefaultEvaluator;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+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 junit.framework.Assert;
 
-public class NetworkJungleBulletinBoard implements NetworkBulletinBoard
-{
+public class NetworkJungleBulletinBoard implements NetworkBulletinBoard {
 	private final Jungle jungle;
 	private final NetworkJournal journal;
 	private final String LOG_DIR;
 	private Boolean persistentFlag;
-	private  AtomicInteger requestCounter;
+	private AtomicInteger requestCounter;
 	private long renewTime;
-	
-	private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) 
-	{
+
+	private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) {
 		journal = _journal;
-		jungle = new NetworkDefaultJungle(journal, _uuid,new DefaultTreeEditor(new DefaultTraverser()));
+		jungle = new NetworkDefaultJungle(journal, _uuid,
+				new DefaultTreeEditor(new DefaultTraverser()));
 		BulletinBoardJungleManager.setJungle(jungle);
 		persistentFlag = false;
 		requestCounter = BulletinBoardJungleManager.getRequestCounter();
 		LOG_DIR = "./log";
 		renewTime = 0;
 	}
-	
-	public NetworkJungleBulletinBoard(String _uuid)
-	{
+
+	public NetworkJungleBulletinBoard(String _uuid) {
 		this(_uuid, new AliceJournal());
 		jungle.createNewTree("boards");
 	}
-	
-	public static NetworkBulletinBoard NewPersistentJungle(String _uuid)
-	{
-		NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(_uuid, new PersistentJournal());
+
+	public static NetworkBulletinBoard NewPersistentJungle(String _uuid) {
+		NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(
+				_uuid, new PersistentJournal());
 		board.persistentFlag = true;
 		return board;
 	}
-	
+
 	public void init() {
-		if(!persistentFlag) {
+		if (!persistentFlag) {
 			return;
 		}
 		checkAndCreateLogDirectory();
@@ -72,10 +74,10 @@
 			e.printStackTrace();
 		}
 	}
-	
+
 	public void checkAndCreateLogDirectory() {
 		File logFile = new File(LOG_DIR);
-		if(!logFile.exists()) {
+		if (!logFile.exists()) {
 			logFile.mkdir();
 			return;
 		}
@@ -84,14 +86,14 @@
 			logFile.mkdir();
 		}
 	}
-	
+
 	public void commitLogRecover() throws IOException {
-		File[] logFiles = new File(LOG_DIR).listFiles(); 
-		for(File logFile : logFiles) {
+		File[] logFiles = new File(LOG_DIR).listFiles();
+		for (File logFile : logFiles) {
 			commitLogRecover(logFile);
 			logFile.delete();
 		}
-		if(jungle.getTreeByName("boards") == null) {
+		if (jungle.getTreeByName("boards") == null) {
 			jungle.createNewTree("boards");
 		}
 	}
@@ -99,153 +101,224 @@
 	private void commitLogRecover(File logFile) throws IOException {
 		journal.setInputFile(logFile);
 		ChangeListReader reader = journal.getReader();
-		if (reader == null) return;
+		if (reader == null)
+			return;
 		for (ChangeList chList : reader) {
 			String treeName = chList.getTreeName();
 			JungleTree tree = jungle.getTreeByName(treeName);
-			if(tree == null) {
+			if (tree == null) {
 				tree = jungle.createNewTree(treeName);
 			}
 			JungleTreeEditor editor = tree.getLocalTreeEditor();
-			Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList);
+			Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor,
+					chList);
 			editor = either.b();
-			if(either.isA()) {
+			if (either.isA()) {
 				throw new IOException("Failed commit log recovery");
 			}
 			editor.success();
 		}
 	}
 
-	public Iterable<String> getBoards()
-	{
+	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>(){
+
+		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);
+
+		return new IterableConverter<String, Node>(chs, converter);
 	}
-	
+
 	public long getRenewTime(String _boardName) {
 		return renewTime;
 	}
-	
 
-	public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
-	{
+	public void createBoards(final String _name, final String _author,
+			final String _initMessage, final String _editKey) {
 		requestCounter.incrementAndGet();
-		if(null == jungle.createNewTree(_name)){
+		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()){
+		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()){
+
+		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()){
+		either = editor.putAttribute(root.add(0), "timestamp", tBuffer);
+		if (either.isA()) {
 			throw new IllegalStateException();
 		}
 		either = either.b().success();
-		if(either.isA()){
+		if (either.isA()) {
 			throw new IllegalStateException();
 		}
-		
-		
+
 		tree = jungle.getTreeByName(_name);
 		editor = tree.getTreeEditor();
-		either = editor.addNewChildAt(root,0);
-		if(either.isA()){
+		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();
+
+		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 tBuffer2 = ByteBuffer.allocate(16);
 				tBuffer2.putLong(timestamp);
-				_e = _e.getAttributes().put("timestamp",tBuffer2).b();
+				_e = _e.getAttributes().put("timestamp", tBuffer2).b();
 				return DefaultEither.newB(_e);
 			}
 		};
-		
-		either = editor.edit(root.add(0),e);
-		if(either.isA()){
+
+		either = editor.edit(root.add(0), e);
+		if (either.isA()) {
 			throw new IllegalStateException();
 		}
 		either.b().success();
 
 	}
 
-	public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
-	{
-		requestCounter.incrementAndGet();
+	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){
+		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{
+		do {
 			Node node = tree.getRootNode();
-			int size = node.getChildren().size();
-			DefaultNodePath path = new DefaultNodePath();
-		
+			
+			
+			DefaultTraverser traverser = new DefaultTraverser();
+			TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node);
+			DefaultEvaluator evaluator = new DefaultEvaluator(path);
+			Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator);
+			if (ret.isA()) {
+				Assert.fail();
+			}
+
+			Traversal<TraversableNodeWrapper<Node>> traversal = ret.b();
+			TraversableNodeWrapper<Node> target = traversal.destination();
+			int size = target.getWrapped().getChildren().size() ;
 			JungleTreeEditor editor = tree.getTreeEditor();
-			either = editor.addNewChildAt(path,size);
-			if(either.isA()){
+			either = editor.addNewChildAt(path, size);
+			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(_message.getBytes())).b();
-					_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
-					_e = _e.getAttributes().put("timestamp",tBuffer).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(_message.getBytes())).b();
+					_e = _e.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b();
+					_e = _e.getAttributes().put("timestamp", tBuffer).b();
 					return DefaultEither.newB(_e);
 				}
 			};
 			path = path.add(size);
-			either = editor.edit(path,e);
-			if(either.isA()){
+			either = editor.edit(path, e);
+			if (either.isA()) {
 				throw new IllegalStateException();
 			}
 			editor = either.b();
 			either = editor.success();
-		}while(either.isA());
+		} while (either.isA());
 
-		
 	}
 
-	public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
-	{
+	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 {
+			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();
+
+			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();
+					_e = _e.getAttributes().put("timestamp", tBuffer).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) {
 		requestCounter.incrementAndGet();
 		final long timestamp = System.currentTimeMillis();
 		final ByteBuffer tBuffer = ByteBuffer.allocate(16);
@@ -257,74 +330,195 @@
 			path = path.add(Integer.parseInt(_uuid));
 
 			JungleTreeEditor editor = tree.getTreeEditor();
-			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();
-					_e = _e.getAttributes().put("timestamp",tBuffer).b();
-				return DefaultEither.newB(_e);
+			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();
+					_e = _e.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(_e);
 				}
 			};
-			either = editor.edit(path,e);
-			if(either.isA()){
+			either = editor.edit(path, e);
+			if (either.isA()) {
 				throw new IllegalStateException();
 			}
 			editor = either.b();
 			either = editor.success();
-		}while(either.isA());
+		} 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) {
+			}
+			Node node = tree.getRootNode();
+			
+			
+			DefaultTraverser traverser = new DefaultTraverser();
+			TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node);
+			DefaultEvaluator evaluator = new DefaultEvaluator(path);
+			Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator);
+			if (ret.isA()) {
+				Assert.fail();
+			}
+
+			Traversal<TraversableNodeWrapper<Node>> traversal = ret.b();
+			TraversableNodeWrapper<Node> target = traversal.destination();
+			final Node cheakNode = target.getWrapped();
+			System.out.println(cheakNode.getAttributes().get("attribute"));
+			
+			
+			JungleTreeEditor editor = tree.getTreeEditor();
+			NodeEditor e = new NodeEditor() {
+				public <T extends EditableNode<T>> Either<Error, T> edit(T _e) {
+				//	EnableNodeWrapper<T> node = _e.getWrap();
+					_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();
+					_e = _e.getAttributes().put("timestamp", tBuffer).b();
+
+					return DefaultEither.newB(_e);
+				}
+			};
+			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 <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();
+					_e = _e.getAttributes().put("timestamp", tBuffer).b();
+					return DefaultEither.newB(_e);
+				}
+			};
+			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)
-	{
+	public Iterable<BoardMessage> getMessages(String _boardName) {
 		requestCounter.incrementAndGet();
 		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>(){
+		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);
+	}
+
+	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);
+		Node node = tree.getRootNode();
+
+		DefaultTraverser traverser = new DefaultTraverser();
+		TraversableNodeWrapper<Node> traversable = new TraversableNodeWrapper<Node>(node);
+		DefaultEvaluator evaluator = new DefaultEvaluator(path);
+		Either<Error, Traversal<TraversableNodeWrapper<Node>>> ret = traverser.traverse(traversable, evaluator);
+		if (ret.isA()) {
+			Assert.fail();
+		}
+
+		Traversal<TraversableNodeWrapper<Node>> traversal = ret.b();
+		TraversableNodeWrapper<Node> target = traversal.destination();
+		Children<Node> chs = target.getWrapped().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 BoardMessageImpl(author, message, uuid);
 			}
 		};
-		return new IterableConverter<BoardMessage,Node>(chs,converter);
+		return new IterableConverter<BoardMessage, Node>(chs, converter);
 	}
-	
+
 	public int getRequestNum() {
 		return requestCounter.get();
 	}
-	
 
-	private static class BoardMessageImpl implements BoardMessage
-	{
+	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)
-		{
+
+		public BoardMessageImpl(String _author, String _message, String _uuid) {
 			author = _author;
 			message = _message;
 			uuid = _uuid;
 		}
 
-		public String getAuthor()
-		{
+		public String getAuthor() {
 			return author;
 		}
 
-		public String getMessage()
-		{
+		public String getMessage() {
 			return message;
 		}
 
-		public String getUUID()
-		{
+		public String getUUID() {
 			return uuid;
 		}
 
--- a/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java	Tue Jul 15 18:07:36 2014 +0900
+++ b/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java	Mon Jul 28 14:09:54 2014 +0900
@@ -11,57 +11,64 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
 
 public class ShowMessageWithTimeStampServlet extends HttpServlet {
-    /**
+	/**
 	 * 
 	 */
-    private static final long serialVersionUID = 1L;
-    private final NetworkBulletinBoard bbs;
-    private final String createBoardMessagePath;
-    private final String editMessagePath;
+	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";
+	private static final String PARAM_BOARD_NAME = "bname";
 
-    public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs,
-            String _createBoardMessagePath, String _editMessagePath,
-            ThreadPool thp) {
-        bbs = _bbs;
-        createBoardMessagePath = _createBoardMessagePath;
-        editMessagePath = _editMessagePath;
-    }
+	public ShowMessageWithTimeStampServlet(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 {
-            printBoard(bname, _res.getWriter());
-        } catch (Exception _e) {
-            _res.setStatus(500);
-        }
-    }
+	public void doGet(HttpServletRequest _req, HttpServletResponse _res) {
+		final String bname = _req.getParameter(PARAM_BOARD_NAME);
+		final String name = _req.getParameter("key");
+		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("<p>Latest renew time : " + bbs.getRenewTime(_bname)
-                + "</p>\n");
-        ;
+	private void printBoard(String _bname, PrintWriter _pw) throws Exception {
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>" + _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='"
+				+ _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");
 
-        _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=" + showMatrixPath + "?bname=" + _bname
+					+ "&uuid=0" + ">"+msg.getMessage()+"(show matrix)"+"</a></small><br>");
+			_pw.write("<small><a href='" + editMessagePath + "?bname=" + _bname
+					+ "&uuid=" + msg.getUUID() + "'>edit</a></small>");
+		}
 
-        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();
-    }
+		//forコメントの表示
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
 }
--- a/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java	Tue Jul 15 18:07:36 2014 +0900
+++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java	Mon Jul 28 14:09:54 2014 +0900
@@ -25,6 +25,9 @@
 import app.bbs.NetworkJungleBulletinBoard;
 import app.bbs.RequestNumCheckServlet;
 import app.bbs.ShowMessageWithTimeStampServlet;
+import app.bbs.thinks.CreateFolderMatrix;
+import app.bbs.thinks.ShowMatrix;
+import app.bbs.thinks.createAttributeMatrix;
 
 public class StartBBSCodeSegment extends CodeSegment {
 
@@ -70,26 +73,33 @@
         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";
         Server serv = new Server(bbsPort);
         ThreadPool thp = serv.getThreadPool();
         Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS);
+        Servlet createFolder = new CreateFolderMatrix(cassaBBS);
         Servlet createBoard = new CreateBoardServlet(cassaBBS);
         Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
+        Servlet createAttribute = new createAttributeMatrix(cassaBBS);
         Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
         //    	Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
-        Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,thp);
-
+        Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,showMatrixPath, thp);
+        Servlet matrix = new ShowMatrix(cassaBBS,createFolderPath,editMessagePath, showMatrixPath, createAttributePath,thp);
+        
         ServletHandler context = new ServletHandler();
         context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath);
+        context.addServletWithMapping(new ServletHolder(createFolder),createFolderPath);
         context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath);
         context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath);
+        context.addServletWithMapping(new ServletHolder(createAttribute),createAttributePath);
         context.addServletWithMapping(new ServletHolder(index),"/");
         context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath);
+        context.addServletWithMapping(new ServletHolder(matrix),showMatrixPath);
         /* 
          * For write benchmark 
          */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/thinks/CreateFolderMatrix.java	Mon Jul 28 14:09:54 2014 +0900
@@ -0,0 +1,39 @@
+package app.bbs.thinks;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import app.bbs.NetworkBulletinBoard;
+
+public class CreateFolderMatrix extends HttpServlet {
+	private final NetworkBulletinBoard 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 CreateFolderMatrix(NetworkBulletinBoard _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);
+		String nodeNum = _req.getParameter("uuid");
+
+		try {
+			bbs.createFolder(boardName, author, msg, key, nodeNum);
+			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/thinks/ShowMatrix.java	Mon Jul 28 14:09:54 2014 +0900
@@ -0,0 +1,86 @@
+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 ShowMatrix 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 final String createAttributePath ;
+	private static final String PARAM_BOARD_NAME = "bname";
+
+	public ShowMatrix(NetworkBulletinBoard _bbs,
+			String _createBoardMessagePath, String _editMessagePath, String _showMatrixPath, String _createAttributePath,
+			ThreadPool thp) {
+		bbs = _bbs;
+		createAttributePath = _createAttributePath;
+		showMatrixPath = _showMatrixPath;
+		createBoardMessagePath = _createBoardMessagePath;
+		editMessagePath = _editMessagePath;
+	}
+
+	public void doGet(HttpServletRequest _req, HttpServletResponse _res) {
+		final String bname = _req.getParameter(PARAM_BOARD_NAME);
+		 String nodeNum = _req.getParameter("uuid");
+		try {
+			printBoard(bname, nodeNum, _res.getWriter());
+		} catch (Exception _e) {
+			_res.setStatus(500);
+		}
+	}
+
+	private void printBoard(String _bname, String nodeNum, PrintWriter _pw) throws Exception {
+		_pw.write("<html><body>\n");
+		_pw.write("<h1>" + " This Borad is Test Board  " + "</h1>\n");
+		_pw.write("<p>Latest renew time : " + bbs.getRenewTime(_bname)
+				+ "</p>\n");
+		;
+
+		_pw.write("<form action='" + createBoardMessagePath + "' method='POST'>\n");
+		_pw.write("<p><input type='hidden' name='author'/> "+ "<input type='hidden' name='bname' value='" + _bname + "'/> <input type='hidden' name='key'/></p>\n");
+		_pw.write("<p>Folder Name<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<input type='hidden' name='uuid' value='"+nodeNum+"'/>");
+		_pw.write("<p><input type='submit' value='submit'/></p>\n");
+		_pw.write("</form>");
+
+		
+		_pw.write("<p><br>add Attribute</p>");
+		_pw.write("<form action='" + createAttributePath + "' method='POST'\n");
+		_pw.write("<p>AUTHOR :<input type='textarea' name='author'/> "+ "<input type='hidden' name='bname' value='" + _bname + "'/> KEY :<input type='textarea' name='key'/></p>\n");
+		_pw.write("<p>attributeName<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<input type='hidden' name='uuid' value='"+nodeNum+"'/>");
+		_pw.write("<p><input type='submit' value='submit'/></p>\n");
+		_pw.write("</form>");
+//やることはgetChildren(Folderを持ってくる)とgetMessage(中身の表示)
+		for (BoardMessage msg : bbs.getFolder(_bname, nodeNum)) {
+			_pw.write("<hr/>");
+			_pw.write("<small><a href=" + showMatrixPath + "?bname=" + _bname
+					+ "&uuid=" +nodeNum+"/"+ msg.getUUID() + ">"+msg.getMessage()+"(folder)"+"</a></small><br>");
+			_pw.write("<small><a href='" + createAttributePath + "?bname=" + _bname
+					+ "&uuid=0" + msg.getUUID() + "'>edit(not s)</a></small>");
+		}
+	/*	for (BoardMessage msg : bbs.getMessages(_bname)) {
+			_pw.write("<hr/>");
+			_pw.write("<p><b>" + "Author : " + msg.getAuthor() + "</b></p>");
+			_pw.write("<small><a href='" + createAttributePath + "?bname=" + _bname
+					+ "&uuid=" + msg.getUUID() + "'>edit</a></small>");
+		}*/
+
+		_pw.write("</body></html>");
+		_pw.flush();
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/thinks/createAttributeMatrix.java	Mon Jul 28 14:09:54 2014 +0900
@@ -0,0 +1,45 @@
+package app.bbs.thinks;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import app.bbs.NetworkBulletinBoard;
+
+public class createAttributeMatrix extends HttpServlet
+{
+	private final NetworkBulletinBoard 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 createAttributeMatrix(NetworkBulletinBoard _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_MESSAGE);
+		String key = _req.getParameter(PARAM_BOARD_EDITKEY);
+		String uuid = _req.getParameter(PARAM_BOARD_MSGID);
+		try{
+			bbs.createAttribute(boardName, uuid, author, msg, key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- a/src/test/java/alice/jungle/showMessageTest.java	Tue Jul 15 18:07:36 2014 +0900
+++ b/src/test/java/alice/jungle/showMessageTest.java	Mon Jul 28 14:09:54 2014 +0900
@@ -1,39 +1,50 @@
 package alice.jungle;
 
-
 import java.io.*;
 import java.net.*;
 
+import alice.jungle.remote.RemoteConfig;
+import app.bbs.codesegment.StartBBSCodeSegment;
+
 public class showMessageTest {
 
-	public static void main(String args[]) {
+	public static void main(String args[]) throws Exception {
 		String host = "localhost";
 		int port = 8080;
 		String path = "/showBoardMessage?bname=" + args[0];
-	    String url = "http://" + host + ":" + port + path;
-	    String str;
-	    System.out.println(url);
-	    try {
-	    	Socket socket = new Socket(host, port);
-		    BufferedReader readSocket = new BufferedReader(new InputStreamReader(socket.getInputStream()));
-		    BufferedWriter writeSocket = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
+		String url = "http://" + host + ":" + port + path;
+		String str;
+		System.out.println(url);
+		RemoteConfig conf = new RemoteConfig(args);
+		StartBBSCodeSegment cs1 = new StartBBSCodeSegment(args, conf.bbsPort);
+		cs1.ods.put("host", "node0");
+		BufferedReader input = new BufferedReader(new InputStreamReader(
+				System.in));
+		Thread.sleep(1000);
 
-	        writeSocket.write("GET " + url +" HTTP/1.1\r\n");
-	        writeSocket.write("Host: " + host + "\n");
-	        writeSocket.write("\n");
-	        writeSocket.flush();
+		do{
+			try {
+				Socket socket = new Socket(host, port);
+				BufferedReader readSocket = new BufferedReader(
+						new InputStreamReader(socket.getInputStream()));
+				BufferedWriter writeSocket = new BufferedWriter(
+						new OutputStreamWriter(socket.getOutputStream()));
 
-	        while ((str = readSocket.readLine()) != null) {
-	          System.out.println(str);
-	        }
+				writeSocket.write("GET " + url + " HTTP/1.1\r\n");
+				writeSocket.write("Host: " + host + "\n");
+				writeSocket.write("\n");
+				writeSocket.flush();
+				while ((str = readSocket.readLine()) != null) {
+					System.out.println(str);
+				}
+				writeSocket.close();
+				readSocket.close();
+				socket.close();
+				System.out.println("please input  connection tree name  or quit");
 
-	        writeSocket.close();
-	        readSocket.close();
-	        socket.close();
-
-	      } catch (Exception ex) {
-	        ex.printStackTrace();
-	      }
+			} catch (Exception ex) {
+				ex.printStackTrace();
+			}
+		}while(input.readLine() != "quit");
 	}
-
 }