changeset 1:b036c87f1e5c

app
author tatsuki
date Fri, 24 Oct 2014 09:45:52 +0900
parents faedeec97605
children 92e3416c3f76
files build.gradle src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/ReadXmlHandler.java src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/SaxSample.java src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/xmlReader.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/CreateNode.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/EditAttributeServlet.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/EditNodeName.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JungleBulletinBoard.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/MatrixApp.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ReadXml.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowBoardsServletMatrix.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowMatrix.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowMessageWithTimeStampServletMatrix.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/XmlBulletinBoard.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/createAttributeMatrix.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/deleteAttributeServlet.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/deleteNodeServlet.java src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/getAttributeImp.java
diffstat 18 files changed, 1408 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build.gradle	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,36 @@
+apply plugin: "java"
+apply plugin: "eclipse"
+
+sourceCompatibility = 1.8
+targetCompatibility = 1.8
+[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
+version = '1.0'
+
+repositories {
+  mavenCentral()
+}
+
+dependencies {
+    compile "org.eclipse.jetty:jetty-server:9.1.1.v20140108"
+    compile "org.eclipse.jetty:jetty-servlet:9.1.1.v20140108"
+        compile "org.eclipse.jetty:jetty-servlets:9.1.1.v20140108"
+    testCompile "junit:junit:4.7"
+}
+
+
+jar {
+  manifest {
+    attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
+  }
+  from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
+  archiveName = 'jungle-core.jar'
+}
+
+uploadArchives {
+  repositories {
+    flatDir {
+      dirs '.'
+    }
+  }
+}
+
--- a/src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/ReadXmlHandler.java	Fri Oct 24 07:29:40 2014 +0900
+++ b/src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/ReadXmlHandler.java	Fri Oct 24 09:45:52 2014 +0900
@@ -17,7 +17,7 @@
 
 import fj.test.reflect.Name;
 
-class ReadXmlHandler extends DefaultHandler {
+public class ReadXmlHandler extends DefaultHandler {
 	private JungleTree tree;
 	private JungleTreeEditor editor;
 	private NodePath path;
--- a/src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/SaxSample.java	Fri Oct 24 07:29:40 2014 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-package ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader;
-
-import java.io.*;
-
-import javax.xml.parsers.*;
-
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-
-class SaxSample {
-	public static void main(String args[]) {
-		try {
-			/*
-			 * パーサのFactoryを作成 名前からしてFactoryパターンで,Singletonだと思う.
-			 */
-			SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
-			/* パーサを取得 */
-			SAXParser saxParser = saxParserFactory.newSAXParser();
-			Jungle jungle = new DefaultJungle(null, "hoge",new DefaultTreeEditor(new DefaultTraverser()));
-			JungleTree tree = jungle.createNewTree("XMLTEST");
-			/* イベントハンドラを作成 */
-			ReadXmlHandler readXmlHandler = new ReadXmlHandler(tree);
-			saxParser.parse(new FileInputStream("/Users/e115731/workspace/aaa/xml/Person.xml"), readXmlHandler);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/ac/jp/u_ryukyu/cr/ie/tatsuki/xmlReader/xmlReader.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,26 @@
+package ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader;
+
+import java.io.*;
+
+import javax.xml.parsers.*;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+
+class xmlReader {
+	public static void main(String args[]) {
+		try {
+			SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+			SAXParser saxParser = saxParserFactory.newSAXParser();
+			Jungle jungle = new DefaultJungle(null, "hoge",new DefaultTreeEditor(new DefaultTraverser()));
+			JungleTree tree = jungle.createNewTree("XMLTEST");
+			ReadXmlHandler readXmlHandler = new ReadXmlHandler(tree);
+			saxParser.parse(new FileInputStream("/Users/e115731/workspace/aaa/xml/Person.xml"), readXmlHandler);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/CreateNode.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,37 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CreateNode extends HttpServlet {
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_AUTHOR = "author";
+	private static final String PARAM_NODE_NAME = "name";
+	private static final String PARAM_BOARD_EDITKEY = "key";
+	private static final String PARAM_BOARD_PATH = "path";
+	private static final long serialVersionUID = 1L;
+
+	public CreateNode(XmlBulletinBoard _bbs) {
+		bbs = _bbs;
+	}
+
+	public void doPost(HttpServletRequest _req, HttpServletResponse _res) {
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String author = (_req.getParameter(PARAM_BOARD_AUTHOR));//not use
+		String nodeName = (_req.getParameter(PARAM_NODE_NAME));
+		String key = (_req.getParameter(PARAM_BOARD_EDITKEY));//not use
+		String nodeNum = (_req.getParameter(PARAM_BOARD_PATH));
+
+		try {
+			bbs.createFolder(boardName, author, nodeName, 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/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/EditAttributeServlet.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,65 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class EditAttributeServlet extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_NODE_PATH = "path";
+	private static final String PARAM_BOARD_MESSAGE= "msg";
+	//private static final String PARAM_BOARD_EDITKEY = "key";
+	private static final String PARAM_NODE_ID = "id";
+	private static final long serialVersionUID = 1L;
+	
+	public EditAttributeServlet(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		
+		
+		try{
+			_res.setCharacterEncoding("UTF-8");
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>edit message</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p><input type='hidden' name='path' value='"+path+"'/>" +
+					"<input type='hidden' name='id' value='"+id+"'/>" +
+					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
+			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String msg = (_req.getParameter(PARAM_BOARD_MESSAGE));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		
+		try{
+			bbs.editAttribute(boardName, path,id, msg);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/EditNodeName.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,66 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+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 EditNodeName extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_NODE_PATH = "path";
+	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 EditNodeName(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		
+		
+		try{
+			_res.setCharacterEncoding("UTF-8");
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>edit message</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p><input type='hidden' name='author'/>" +
+					"<input type='hidden' name='key' value='"+path+"'/>" +
+					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
+			pw.write("<p>Message<br/> <input type='textarea' name='msg'/> </p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String author = (_req.getParameter(PARAM_BOARD_AUTHOR));
+		String msg = (_req.getParameter(PARAM_BOARD_MESSAGE));
+		String key = (_req.getParameter(PARAM_BOARD_EDITKEY));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		
+		try{
+			bbs.editMessage(boardName, path, author, msg, key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JungleBulletinBoard.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,610 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Iterator;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.ReadXmlHandler;
+import fj.data.List;
+import fj.data.TreeMap;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
+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 JungleBulletinBoard implements XmlBulletinBoard {
+
+	private final Jungle jungle;
+
+
+	public JungleBulletinBoard() {
+		jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
+		jungle.createNewTree("boards");
+	}
+
+
+
+	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 void createBoards(final String _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()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+
+		either = editor.putAttribute(root.add(0), "name",ByteBuffer.wrap(_name.getBytes()));
+		if (either.isA()) {
+			throw new IllegalStateException();
+		}
+		editor = either.b();
+		either = either.b().success();
+		if (either.isA()) {
+			throw new IllegalStateException();
+		}
+
+	}
+
+	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) {
+		}
+		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);
+				}
+			};
+			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) {
+		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);
+				}
+
+			};
+			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) {
+		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);
+				}
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+	}
+
+	public void createAttribute(String _board, String _uuid, final String _author, final String _message, final String _editKey) {
+		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);
+				}
+			};
+			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) {
+		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);
+				}
+
+			};
+			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) {
+		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) {
+		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);
+				}
+			};
+			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) {
+		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);
+				}
+
+
+			};
+			either = editor.edit(path, e);
+			if (either.isA()) {
+				throw new IllegalStateException();
+			}
+			editor = either.b();
+			either = editor.success();
+		} while (either.isA());
+	}
+
+	public Iterable<BoardMessage> getMessages(String _boardName) {
+		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) {
+		}
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		TreeNode node = tree.getRootNode();
+
+		DefaultTraverser traverser = new DefaultTraverser();
+		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("element").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) {
+		}
+		JungleTree tree = jungle.getTreeByName(_boardName);
+		TreeNode node = tree.getRootNode();
+
+		DefaultTraverser traverser = new DefaultTraverser();
+		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);
+	}
+
+	
+
+	private static class BoardMessageImpl implements BoardMessage {
+		private final String author;
+		private final String message;
+		private final String uuid;
+
+		public BoardMessageImpl(String _author, String _message, String _uuid) {
+			author = _author;
+			message = _message;
+			uuid = _uuid;
+		}
+
+		public String getAuthor() {
+			return author;
+		}
+
+		public String getMessage() {
+			return message;
+		}
+
+		public String getUUID() {
+			return uuid;
+		}
+
+	}
+	
+	public void readXml(String xmlPath){
+		try {
+			SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
+			SAXParser saxParser = saxParserFactory.newSAXParser();
+			createBoards("XMLTEST");
+			JungleTree tree = jungle.getTreeByName("XMLTEST");
+			ReadXmlHandler readXmlHandler = new ReadXmlHandler(tree);
+			saxParser.parse(new FileInputStream("/Users/e115731/workspace/aaa/xml/Person.xml"), readXmlHandler);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	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 void createBoards(String _name, String _author, String _initMessage,
+			String _editKey) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/MatrixApp.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,82 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import javax.servlet.Servlet;
+
+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 org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.util.thread.ThreadPool;
+
+
+
+
+
+
+public class MatrixApp{
+
+ 
+    public static void main(String args[]) {
+        XmlBulletinBoard BBS = new  JungleBulletinBoard();
+
+        /* 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";
+        Server serv = new Server(8080);
+        ThreadPool thp = serv.getThreadPool();
+        Servlet createBoardMessage = new CreateBoardMessageServlet(BBS);
+        Servlet createFolder = new CreateNode(BBS);
+        Servlet createBoard = new ReadXml(BBS);
+        Servlet editNode = new EditNodeName(BBS);
+        Servlet createAttribute = new createAttributeMatrix(BBS);
+        Servlet editAttribute = new EditAttributeServlet(BBS);
+        Servlet deleteAttribute = new deleteAttributeServlet(BBS);
+        Servlet deleteNode = new deleteNodeServlet(BBS);
+        Servlet editBoardMessage = new EditMessageServlet(BBS);
+        Servlet index = new ShowBoardsServletMatrix(BBS,createBoardPath,showMatrixPath);
+        //    	Servlet board = new ShowBoardMessageServlet(BBS,createBoardMessagePath,editMessagePath);
+        Servlet board = new ShowMessageWithTimeStampServletMatrix(BBS,createBoardMessagePath,editMessagePath,showMatrixPath);
+        Servlet matrix = new ShowMatrix(BBS,createFolderPath,editNodePath, showMatrixPath, createAttributePath, editAttributePath,deleteAttributePath,deleteNodePath,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);
+        /* 
+         * For write benchmark 
+         */
+        String editMessageUseGetPath = "/editMessageUseGet";
+        Servlet editMessageUseGet = new EditMessageUseGetServlet(BBS);
+        context.addServletWithMapping(new ServletHolder(editMessageUseGet), editMessageUseGetPath);
+
+        serv.setHandler(context);
+        try {
+            serv.start();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ReadXml.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,34 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class ReadXml extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "xmlPath";
+	
+	private static final long serialVersionUID = 1L;
+	
+	public ReadXml(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String xmlPath = _req.getParameter(PARAM_BOARD_NAME);
+		
+		try{
+			bbs.readXml(xmlPath);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully writtena");
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowBoardsServletMatrix.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,56 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+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 XmlBulletinBoard bbs;
+	private final String createBoardPath;
+	private final String showBoardMessagePath;
+
+	public ShowBoardsServletMatrix(XmlBulletinBoard _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>XmlPath : <input type='text' name='xmlPath'/></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();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowMatrix.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,115 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+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 jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
+
+public class ShowMatrix extends HttpServlet {
+	/**
+	 * edit Node Path is rename editNodePath
+	 **/
+	private static final long serialVersionUID = 1L;
+	private final XmlBulletinBoard bbs;
+	private final String createBoardMessagePath;
+	private final String editNodePath;
+	private final String showMatrixPath;
+	private final String createAttributePath;
+	private final String editAttributePath;
+	private final String deleteAttributePath;
+	private final String deleteNodePath;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_NODE_PATH = "uuid";
+	private static final String PARAM_NODE_NAME = "nodeName";
+
+	public ShowMatrix(XmlBulletinBoard _bbs,
+			String _createBoardMessagePath, String _editNodePath,
+			String _showMatrixPath, String _createAttributePath,
+			String _editAttributePath, String _deleteAttributePath,
+			String _deleteNodePath, ThreadPool thp) {
+		bbs = _bbs;
+		deleteAttributePath = _deleteAttributePath;
+		deleteNodePath = _deleteNodePath;
+		createAttributePath = _createAttributePath;
+		editAttributePath = _editAttributePath;
+		showMatrixPath = _showMatrixPath;
+		createBoardMessagePath = _createBoardMessagePath;
+		editNodePath = _editNodePath;
+	}
+
+	public void doGet(HttpServletRequest _req, HttpServletResponse _res) {
+
+		final String bname = _req.getParameter(PARAM_BOARD_NAME);
+		String path = _req.getParameter(PARAM_NODE_PATH);
+		String nodeName = _req.getParameter(PARAM_NODE_NAME);
+		try {
+			_res.setCharacterEncoding("UTF-8");
+			printBoard(bname, path, nodeName, _res.getWriter());
+		} catch (Exception _e) {
+			_res.setStatus(500);
+		}
+	}
+
+	private void printBoard(String _bname, String path, String nodeName,
+			PrintWriter _pw) throws Exception {
+		_pw.write("<html><body>\n");
+
+		if (nodeName == null)
+			nodeName = "rootNode";
+		if (path == null)
+			path = "0";
+		
+		_pw.write("<h1>" + bbs.sanitize(nodeName) + " Path = " + path + "</h1>\n");
+
+		_pw.write("<form action='" + createBoardMessagePath+ "' method='POST'>\n");
+		_pw.write("<p><input type='hidden' name='bname' value='" + bbs.sanitize(_bname)+ "'/> </p>\n");
+		_pw.write("<p>Folder Name<br/> <input type='textarea' name='name'/> </p>\n");
+		_pw.write("<input type='hidden' name='path' value='" + path + "'/>");
+		_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><input type='hidden' name='bname' value='" + bbs.sanitize(_bname)
+				+ "'</p>\n");
+		_pw.write("<p>attributeName<br/> <input type='textarea' name='msg'/> </p>\n");
+		_pw.write("<input type='hidden' name='path' value='" + path + "'/>");
+		_pw.write("<p><input type='submit' value='submit'/></p>\n");
+		_pw.write("</form>");
+		_pw.write("<hr/>");
+		_pw.write("<p>Folder</p>");
+
+		for (BoardMessage msg : bbs.getFolder(_bname, path)) {
+			_pw.write("<small><a href=" + showMatrixPath + "?bname=" + bbs.sanitize(_bname)
+					+ "&uuid=" + path + "/" + msg.getUUID() + "&nodeName="
+					+ bbs.sanitize(msg.getMessage()) + ">" + bbs.sanitize(msg.getMessage())
+					+ "</a></small>");
+			_pw.write("   ");
+			_pw.write("<small><a href='" + editNodePath + "?bname=" + bbs.sanitize(_bname)
+					+ "&path=" + path + "/" + msg.getUUID()
+					+ "'>edit</a></small>");
+			_pw.write("   ");
+			_pw.write("<small><a href='" + deleteNodePath + "?bname=" + bbs.sanitize(_bname)
+					+ "&path=" + path + "&id=" + msg.getUUID()
+					+ "'>delete</a><br><br></small>");
+		}
+
+		_pw.write("<br><hr/><p>Value</p>");
+		getAttributeImp attribute = (bbs.getAttribute(_bname, path));
+
+			_pw.write("<a href='" + editAttributePath + "?bname=" + bbs.sanitize(_bname)
+					+ "&path=" + path + "&id=" + "'>"
+					+ bbs.sanitize(attribute.getMessage()) + "</a>");
+			_pw.write("<a href='" + deleteAttributePath + "?bname=" + bbs.sanitize(_bname)
+					+ "&path=" + path + "&id=" + "'>" + "   delete"
+					+ "</a></p>");
+		
+		_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/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/ShowMessageWithTimeStampServletMatrix.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,68 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+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.BoardMessage;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
+
+public class ShowMessageWithTimeStampServletMatrix extends HttpServlet {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	private final XmlBulletinBoard bbs;
+	private final String createBoardMessagePath;
+	private final String editMessagePath;
+	private final String showMatrixPath;
+
+	private static final String PARAM_BOARD_NAME = "bname";
+
+	public ShowMessageWithTimeStampServletMatrix(XmlBulletinBoard _bbs,
+			String _createBoardMessagePath, String _editMessagePath, String _showMatrixPath) {
+		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("<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();
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/XmlBulletinBoard.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,18 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard;
+
+
+public interface XmlBulletinBoard extends BulletinBoard {
+	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);
+	public getAttributeImp getAttribute(String _bname, String nodeNum);
+	public void editAttribute(String boardName, String path, String id, String message);
+	public void deleteAttribute(String _board, String _path , String id);
+	public void deleteNode(String _board, String _path, String id);
+	public void editMatrixMessage(String boardName, String path, String author,String msg, String key);
+	public void readXml(String xmlPath);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/createAttributeMatrix.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,45 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+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 createAttributeMatrix extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_NODE_PATH = "path";
+	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(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String author = (_req.getParameter(PARAM_BOARD_AUTHOR));//not use
+		String msg = (_req.getParameter(PARAM_BOARD_MESSAGE));
+		String key = (_req.getParameter(PARAM_BOARD_EDITKEY)); // not use
+		String uuid = (_req.getParameter(PARAM_NODE_PATH)); 
+		try{
+			bbs.createAttribute(boardName, uuid, author, msg, key);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/deleteAttributeServlet.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,63 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+public class deleteAttributeServlet extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_NODE_PATH = "path";
+	//private static final String PARAM_BOARD_MESSAGE= "msg";
+	//private static final String PARAM_BOARD_EDITKEY = "key";
+	private static final String PARAM_NODE_ID = "id";
+	private static final long serialVersionUID = 1L;
+	
+	public deleteAttributeServlet(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		
+		
+		try{
+			_res.setCharacterEncoding("UTF-8");
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>delete Attribute ?</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p><input type='hidden' name='path' value='"+path+"'/>" +
+					"<input type='hidden' name='id' value='"+id+"'/>" +
+					"<input type='hidden' name='bname' value='"+bname+"'</p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_NODE_PATH));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		
+		try{
+			bbs.deleteAttribute(boardName, path,id);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/deleteNodeServlet.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,58 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class deleteNodeServlet extends HttpServlet
+{
+	private final XmlBulletinBoard bbs;
+	private static final String PARAM_BOARD_NAME = "bname";
+	private static final String PARAM_BOARD_PATH = "path";
+	private static final String PARAM_NODE_ID = "id";
+
+	private static final long serialVersionUID = 1L;
+	
+	public deleteNodeServlet(XmlBulletinBoard _bbs)
+	{
+		bbs = _bbs;
+	}
+	
+	public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String bname = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_BOARD_PATH ));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		
+		try{
+			_res.setCharacterEncoding("UTF-8");
+			PrintWriter pw = _res.getWriter();
+			pw.write("<html><body><h1>delete message ?</h1>");
+			pw.write("<form method='POST'\n");
+			pw.write("<p><input type='hidden' name='path' value='" + path + "'/>" +
+					"<input type='hidden' name='id' value='" + id +"'/>" +
+					"<input type='hidden' name='bname' value='" + bname + "'</p>\n");
+			pw.write("<p><input type='submit' value='submit'/></p>\n");
+			pw.write("</body></html>");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+
+	public void doPost(HttpServletRequest _req,HttpServletResponse _res)
+	{
+		String boardName = (_req.getParameter(PARAM_BOARD_NAME));
+		String path = (_req.getParameter(PARAM_BOARD_PATH));
+		String id = (_req.getParameter(PARAM_NODE_ID));
+		try{
+			bbs.deleteNode(boardName, path, id);
+			PrintWriter pw = _res.getWriter();
+			pw.write("successfully written");
+			pw.flush();
+		}catch(Exception _e){
+			_res.setStatus(500);
+		}
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/getAttributeImp.java	Fri Oct 24 09:45:52 2014 +0900
@@ -0,0 +1,28 @@
+package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+
+
+
+
+public class getAttributeImp
+{
+	private final TreeNode node;
+	
+	public getAttributeImp(TreeNode _node)
+	{
+		node = _node;
+	}
+
+	public String getUUID(int num) {
+		// TODO Auto-generated method stub
+		return String.valueOf(num);
+	}
+
+	public String getMessage() {
+		// TODO Auto-generated method stub
+		return node.getAttributes().getString("text");
+	}
+	
+}
+