# HG changeset patch # User tatsuki # Date 1413526616 -32400 # Node ID 269bada9eedc314bcbc3be948df5c9a63429d55d # Parent 8788cc341358182a739e9445b44588f8413bba64 add diff -r 8788cc341358 -r 269bada9eedc src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java --- a/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/alice/jungle/datasegment/transformer/NetworkAppendChildAt.java Fri Oct 17 15:16:56 2014 +0900 @@ -9,7 +9,6 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging; import org.msgpack.annotation.Message; @@ -30,9 +29,9 @@ pos = _pos; } - public Either _edit(Logging _e) + public Either _edit(LoggingNode _e) { - Either either = _e.getChildren().addNewChildAt(pos); + Either either = _e.getChildren().addNewChildAt(pos); if(either.isA()){ // error return either; @@ -41,17 +40,17 @@ } @Override - public Either edit(TreeNode _e) { - Logging logNode = wrap(_e); + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); return _edit(logNode); } - public Logging wrap(TreeNode node) { + public LoggingNode wrap(TreeNode node) { return new LoggingNode(node); } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } diff -r 8788cc341358 -r 269bada9eedc src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java --- a/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/alice/jungle/operations/NetworkPutAttributeOperation.java Fri Oct 17 15:16:56 2014 +0900 @@ -10,7 +10,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging; +import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.LoggingNode; @Message public class NetworkPutAttributeOperation implements NodeOperation { diff -r 8788cc341358 -r 269bada9eedc src/main/java/alice/jungle/persistent/PersistentJungleTree.java --- a/src/main/java/alice/jungle/persistent/PersistentJungleTree.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/alice/jungle/persistent/PersistentJungleTree.java Fri Oct 17 15:16:56 2014 +0900 @@ -11,6 +11,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; @@ -67,7 +68,7 @@ } @Override - public JungleTreeEditor getIndexTreeEditor() { + public IndexJungleTreeEditor getIndexTreeEditor() { // TODO Auto-generated method stub return null; } diff -r 8788cc341358 -r 269bada9eedc src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java --- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTree.java Fri Oct 17 15:16:56 2014 +0900 @@ -10,6 +10,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; @@ -70,7 +71,7 @@ } @Override - public JungleTreeEditor getIndexTreeEditor() { + public IndexJungleTreeEditor getIndexTreeEditor() { // TODO Auto-generated method stub return null; } diff -r 8788cc341358 -r 269bada9eedc src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java --- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Fri Oct 17 15:16:56 2014 +0900 @@ -27,7 +27,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode; public class NetworkDefaultJungleTreeEditor implements JungleTreeEditor { @@ -68,7 +68,7 @@ private Either _edit(final NodePath _path,NodeEditor _e) { //LoggingNodeHook hook = new LoggingNodeHook(_e); - Either either = editor.edit(root,_path,_e); + Either either = editor.edit(root,_path,_e); if(either.isA()){ return DefaultEither.newA(either.a()); } diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/NetworkJungleBulletinBoard.java --- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java Fri Oct 17 15:16:56 2014 +0900 @@ -3,8 +3,6 @@ import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Iterator; import java.util.concurrent.atomic.AtomicInteger; @@ -41,7 +39,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Logging; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode; import junit.framework.Assert; public class NetworkJungleBulletinBoard implements NetworkBulletinBoard { @@ -196,8 +194,8 @@ NodeEditor e = new NodeEditor() { ByteBuffer tBuffer2 = ByteBuffer.allocate(16); - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b(); logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); @@ -206,7 +204,7 @@ return DefaultEither.newB(logNode); } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @Override @@ -270,15 +268,15 @@ NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); return DefaultEither.newB(logNode); } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -325,8 +323,8 @@ editor = either.b(); NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); @@ -335,7 +333,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -376,8 +374,8 @@ } JungleTreeEditor editor = tree.getTreeEditor(); NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); System.out.println(new String(node.getAttributes().get("mes").array())); logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); @@ -388,7 +386,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -431,8 +429,8 @@ NodeEditor e = new NodeEditor() { String str; - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); str = "0"; int count = 0; for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) { @@ -444,7 +442,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -484,8 +482,8 @@ JungleTreeEditor editor = tree.getTreeEditor(); NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); // EnableNodeWrapper node = _e.getWrap(); logNode = logNode.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b(); logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b(); @@ -493,7 +491,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -564,8 +562,8 @@ JungleTreeEditor editor = tree.getTreeEditor(); NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); logNode = logNode.getAttributes().delete("mes" + id).b(); logNode = logNode.getAttributes().delete("timestamp" + id).b(); int count = Integer.parseInt(id); @@ -583,7 +581,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -617,8 +615,8 @@ JungleTreeEditor editor = tree.getTreeEditor(); NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - Logging logNode = wrap(node , new DefaultOperationLog()); + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); @@ -627,7 +625,7 @@ } @Override - public Logging wrap(TreeNode node, OperationLog op) { + public LoggingNode wrap(TreeNode node, OperationLog op) { return new LoggingNode(node, op); } @@ -722,6 +720,8 @@ TreeNode node = tree.getRootNode(); DefaultTraverser traverser = new DefaultTraverser(); + // TraversableNodeWrapper traversable = new + // TraversableNodeWrapper(node); DefaultEvaluator evaluator = new DefaultEvaluator(path); Either ret = traverser.traverse(node, evaluator); @@ -734,26 +734,7 @@ return new getAttributeImp(target); } - public TreeNode search(JungleTree tree ,String searchAttribute,String key){ - InterfaceTraverser ifTraverser = tree.getTraverser(); - Iterator> searchNode = ifTraverser.find( - (TreeNode node) -> { - ByteBuffer attribute = node.getAttributes().get(key); - if(attribute != null){ - byte[] byteAttribute = attribute.array(); - String str = new String(byteAttribute); - System.out.println(str); - return str.equals(searchAttribute); - } - return false; - } - ); - - if (!searchNode.hasNext()) - return null; - return searchNode.next().left(); - - } + public boolean compare(TreeNode compareNode, String compareAttribute) { String labName = compareNode.getAttributes().getString("mes"); @@ -770,86 +751,6 @@ return false; } - public String searchJungle(String requestName , String approvalName) { - JungleTree tree = jungle.getTreeByName("人物"); - - - TreeNode searchNode = search(tree , requestName,"mes"); - if (searchNode == null){ - fail(requestName,approvalName,"申請者がデータに無い人物です"); - return "申請者がデータに無い人物です"; - } - - if (!compare(searchNode, "河野研")){ - fail(requestName,approvalName,"河野研以外に所属している人は、この申請をすることが出来ません"); - return "河野研以外に所属している人は、この申請をすることが出来ません"; - } - - searchNode = search(tree , approvalName,"mes"); - if (searchNode == null){ - fail(requestName,approvalName,"承認者がデータに無い人物です"); - return "承認者がデータに無い人物です"; - } - - String position = searchNode.getAttributes().getString("mes1"); - - JungleTree grantTree = jungle.getTreeByName("役職"); - searchNode = search(grantTree , position,"mes"); - - if (!compare(searchNode, "准教授権限") && !compare(searchNode, "教授権限")){ - fail(requestName,approvalName,"権限がありません(この申請の承認は助教授か、教授である必要があります"); - return "権限がありません(この申請の承認は助教授か、教授である必要があります"; - } - - searchNode = search(tree , approvalName,"mes"); - if (searchNode == null){ - fail(requestName,approvalName,"申請者がデータに無い人物です"); - return "申請者がデータに無い人物です"; - } - - if (!compare(searchNode, "上位申請権限")){ - fail(requestName,approvalName,"権限がありません(この申請の承認は上位申請者である必要があります"); - return "権限がありません(この申請の承認は上位申請者である必要があります"; - } - success(requestName,approvalName); - - return "申請が受理されました"; - } - - public void fail(String requestName, String approvalName, String reason){ - JungleTree contextTree = jungle.getTreeByName("申請"); - JungleTreeEditor editor = contextTree.getTreeEditor(); - editor = editor.putAttribute(new DefaultNodePath(),"mes0", ByteBuffer.wrap(("申請者名 = " + requestName).getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath(),"mes1", ByteBuffer.wrap(("申請内容".getBytes()))).b(); - Date date = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - String time = sdf.format(date); - editor = editor.putAttribute(new DefaultNodePath(),"mes2", ByteBuffer.wrap(("承認時間 = " + time).getBytes())).b(); - - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes", ByteBuffer.wrap("否認書".getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes0", ByteBuffer.wrap(("否認者名 = " + approvalName).getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes1", ByteBuffer.wrap(("否認理由 = " + reason).getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes2", ByteBuffer.wrap(("承認時間 = " + time).getBytes())).b(); - editor.success(); - } - - public void success(String requestName, String approvalName){ - JungleTree contextTree = jungle.getTreeByName("申請"); - JungleTreeEditor editor = contextTree.getTreeEditor(); - editor = editor.putAttribute(new DefaultNodePath(),"mes0", ByteBuffer.wrap(("申請者名 = " + requestName).getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath(),"mes1", ByteBuffer.wrap(("申請内容".getBytes()))).b(); - Date date = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - String time = sdf.format(date); - editor = editor.putAttribute(new DefaultNodePath(),"mes2", ByteBuffer.wrap(("承認時間" + time).getBytes())).b(); - - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes", ByteBuffer.wrap("承認書".getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes0", ByteBuffer.wrap(("承認者名 = " + approvalName).getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes1", ByteBuffer.wrap("承認理由 = 権限があってるので許可した".getBytes())).b(); - editor = editor.putAttribute(new DefaultNodePath().add(0),"mes2", ByteBuffer.wrap(("承認時間" + time).getBytes())).b(); - editor.success(); - } - public int getRequestNum() { return requestCounter.get(); } @@ -891,4 +792,10 @@ return str; } + @Override + public String searchJungle(String requestName, String permmitName) { + // TODO Auto-generated method stub + return null; + } + } diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java --- a/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java Fri Oct 17 15:16:56 2014 +0900 @@ -18,15 +18,12 @@ private final NetworkBulletinBoard bbs; private final String createBoardMessagePath; private final String editMessagePath; - private final String showMatrixPath; private static final String PARAM_BOARD_NAME = "bname"; public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs, - String _createBoardMessagePath, String _editMessagePath, String _showMatrixPath, - ThreadPool thp) { + String _createBoardMessagePath, String _editMessagePath,ThreadPool thp) { bbs = _bbs; - showMatrixPath = _showMatrixPath; createBoardMessagePath = _createBoardMessagePath; editMessagePath = _editMessagePath; } @@ -52,7 +49,6 @@ _pw.write("

Author : EditKey :

\n"); _pw.write("

Message

\n"); _pw.write("

\n"); - _pw.write("MatrixMode"+"
"); for (BoardMessage msg : bbs.getMessages(_bname)) {//フォルダの表示 _pw.write("
"); diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java --- a/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java Fri Oct 17 15:16:56 2014 +0900 @@ -6,6 +6,7 @@ import javax.servlet.Servlet; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.handler.HandlerCollection; import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.thread.ThreadPool; @@ -25,14 +26,6 @@ import app.bbs.NetworkJungleBulletinBoard; import app.bbs.RequestNumCheckServlet; import app.bbs.ShowMessageWithTimeStampServlet; -import app.bbs.thinks.CreateNode; -import app.bbs.thinks.EditAttributeServlet; -import app.bbs.thinks.EditNodeName; -import app.bbs.thinks.ShowMatrix; -import app.bbs.thinks.createAttributeMatrix; -import app.bbs.thinks.deleteAttributeServlet; -import app.bbs.thinks.deleteNodeServlet; -import app.bbs.thinks.permission; public class StartBBSCodeSegment extends CodeSegment { @@ -78,48 +71,26 @@ System.out.println("name : "+ name); /* Jetty registration */ String createBoardMessagePath = "/createBoardMessage"; - String createFolderPath = "/createFolder"; String createBoardPath = "/createBoard"; String editMessagePath = "/editMessage"; String showBoardMessagePath = "/showBoardMessage"; - String showMatrixPath = "/showMatrix"; - String createAttributePath = "/createAttribute"; - String editAttributePath = "/editAttribute"; - String deleteAttributePath = "/deleteAttribute"; - String deleteNodePath = "/deleteNode"; - String editNodePath = "/editNode"; - String permissionPath = "/permission"; + + Server serv = new Server(bbsPort); ThreadPool thp = serv.getThreadPool(); Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); - Servlet createFolder = new CreateNode(cassaBBS); Servlet createBoard = new CreateBoardServlet(cassaBBS); - Servlet editNode = new EditNodeName(cassaBBS); - Servlet createAttribute = new createAttributeMatrix(cassaBBS); - Servlet editAttribute = new EditAttributeServlet(cassaBBS); - Servlet deleteAttribute = new deleteAttributeServlet(cassaBBS); - Servlet deleteNode = new deleteNodeServlet(cassaBBS); Servlet editBoardMessage = new EditMessageServlet(cassaBBS); Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath); // Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath); - Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,showMatrixPath, thp); - Servlet matrix = new ShowMatrix(cassaBBS,createFolderPath,editNodePath, showMatrixPath, createAttributePath, editAttributePath,deleteAttributePath,deleteNodePath,thp); - Servlet per = new permission(cassaBBS,permissionPath,thp); + Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath,thp); + ServletHandler context = new ServletHandler(); - context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath); - context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath); - context.addServletWithMapping(new ServletHolder(createFolder),createFolderPath); context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath); - context.addServletWithMapping(new ServletHolder(editNode),editNodePath); - context.addServletWithMapping(new ServletHolder(createAttribute),createAttributePath); + context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath); context.addServletWithMapping(new ServletHolder(index),"/"); - context.addServletWithMapping(new ServletHolder(deleteAttribute),deleteAttributePath); - context.addServletWithMapping(new ServletHolder(deleteNode),deleteNodePath); - context.addServletWithMapping(new ServletHolder(editAttribute),editAttributePath); context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath); - context.addServletWithMapping(new ServletHolder(matrix),showMatrixPath); - context.addServletWithMapping(new ServletHolder(per),permissionPath); /* * For write benchmark */ diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/codesegment/StartmaTrixBBSCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/codesegment/StartmaTrixBBSCodeSegment.java Fri Oct 17 15:16:56 2014 +0900 @@ -0,0 +1,145 @@ +package app.bbs.codesegment; + +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import javax.servlet.Servlet; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.util.thread.ThreadPool; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.CreateBoardMessageServlet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.CreateBoardServlet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.EditMessageServlet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.EditMessageUseGetServlet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.ShowBoardsServlet; + + + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import app.bbs.NetworkBulletinBoard; +import app.bbs.NetworkJungleBulletinBoard; +import app.bbs.RequestNumCheckServlet; +import app.bbs.ShowMessageWithTimeStampServlet; +import app.bbs.thinks.CreateNode; +import app.bbs.thinks.EditAttributeServlet; +import app.bbs.thinks.EditNodeName; +import app.bbs.thinks.NetworkMatrixJungleBulletinBoard; +import app.bbs.thinks.ShowBoardsServletMatrix; +import app.bbs.thinks.ShowMatrix; +import app.bbs.thinks.ShowMessageWithTimeStampServletMatrix; +import app.bbs.thinks.createAttributeMatrix; +import app.bbs.thinks.deleteAttributeServlet; +import app.bbs.thinks.deleteNodeServlet; +import app.bbs.thinks.permission; + +public class StartmaTrixBBSCodeSegment extends CodeSegment { + + int bbsPort = 8080; + Receiver host = ids.create(CommandType.PEEK); + private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$"); + private String[] args; + boolean persistentFlag = false; + + public StartmaTrixBBSCodeSegment(String[] _args, int p) { + args = _args; + bbsPort = p; + host.setKey("host"); + } + + public StartmaTrixBBSCodeSegment() { + args = null; + host.setKey("host"); + } + + @Override + public void run() { + String name = host.asString(); + Matcher matcher = pattern.matcher(name); + matcher.find(); + // String type = matcher.group(1); + for(String arg: args) { + if(arg.equals("-persistent")){ + persistentFlag = true; + } + } + NetworkBulletinBoard cassaBBS = null; + if(persistentFlag) { + System.out.println("log loading..."); + cassaBBS = NetworkMatrixJungleBulletinBoard.NewPersistentJungle(name); + cassaBBS.init(); + } else { + cassaBBS = new NetworkJungleBulletinBoard(name); + cassaBBS.init(); + } + + System.out.println("StartBBSCodeSegment"); + System.out.println("name : "+ name); + /* Jetty registration */ + String createBoardMessagePath = "/createBoardMessage"; + String createFolderPath = "/createFolder"; + String createBoardPath = "/createBoard"; + String editMessagePath = "/editMessage"; + String showBoardMessagePath = "/showBoardMessage"; + String showMatrixPath = "/showMatrix"; + String createAttributePath = "/createAttribute"; + String editAttributePath = "/editAttribute"; + String deleteAttributePath = "/deleteAttribute"; + String deleteNodePath = "/deleteNode"; + String editNodePath = "/editNode"; + String permissionPath = "/permission"; + Server serv = new Server(bbsPort); + ThreadPool thp = serv.getThreadPool(); + Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); + Servlet createFolder = new CreateNode(cassaBBS); + Servlet createBoard = new CreateBoardServlet(cassaBBS); + Servlet editNode = new EditNodeName(cassaBBS); + Servlet createAttribute = new createAttributeMatrix(cassaBBS); + Servlet editAttribute = new EditAttributeServlet(cassaBBS); + Servlet deleteAttribute = new deleteAttributeServlet(cassaBBS); + Servlet deleteNode = new deleteNodeServlet(cassaBBS); + Servlet editBoardMessage = new EditMessageServlet(cassaBBS); + Servlet index = new ShowBoardsServletMatrix(cassaBBS,createBoardPath,showMatrixPath); + // Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath); + Servlet board = new ShowMessageWithTimeStampServletMatrix(cassaBBS,createBoardMessagePath,editMessagePath,showMatrixPath, thp); + Servlet matrix = new ShowMatrix(cassaBBS,createFolderPath,editNodePath, showMatrixPath, createAttributePath, editAttributePath,deleteAttributePath,deleteNodePath,thp); + Servlet per = new permission(cassaBBS,permissionPath,thp); + ServletHandler context = new ServletHandler(); + context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath); + + context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath); + context.addServletWithMapping(new ServletHolder(createFolder),createFolderPath); + context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath); + context.addServletWithMapping(new ServletHolder(editNode),editNodePath); + context.addServletWithMapping(new ServletHolder(createAttribute),createAttributePath); + context.addServletWithMapping(new ServletHolder(index),"/"); + context.addServletWithMapping(new ServletHolder(deleteAttribute),deleteAttributePath); + context.addServletWithMapping(new ServletHolder(deleteNode),deleteNodePath); + context.addServletWithMapping(new ServletHolder(editAttribute),editAttributePath); + context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath); + context.addServletWithMapping(new ServletHolder(matrix),showMatrixPath); + context.addServletWithMapping(new ServletHolder(per),permissionPath); + /* + * For write benchmark + */ + String editMessageUseGetPath = "/editMessageUseGet"; + Servlet editMessageUseGet = new EditMessageUseGetServlet(cassaBBS); + context.addServletWithMapping(new ServletHolder(editMessageUseGet), editMessageUseGetPath); + String requestNumCheckPath = "/requestNum"; + Servlet requestNumCheckServlet = new RequestNumCheckServlet(cassaBBS); + context.addServletWithMapping(new ServletHolder(requestNumCheckServlet), requestNumCheckPath); + + serv.setHandler(context); + try { + serv.start(); + } catch (Exception e) { + e.printStackTrace(); + } + new LogUpdateCodeSegment(); + } + +} diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/thinks/MatrixApp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/thinks/MatrixApp.java Fri Oct 17 15:16:56 2014 +0900 @@ -0,0 +1,20 @@ +package app.bbs.thinks; + +import alice.jungle.remote.RemoteConfig; +import alice.topology.node.TopologyNode; +import app.bbs.codesegment.StartBBSCodeSegment; +import app.bbs.codesegment.StartmaTrixBBSCodeSegment; + +public class MatrixApp { + public static void main(String[] args) throws Exception { + RemoteConfig conf = new RemoteConfig(args); + if (conf.getManagerHostName() == null) { + // String localHostName ="localhost"; + // HostMessage host = new HostMessage(localHostName, conf.localPort); + StartmaTrixBBSCodeSegment cs1 = new StartmaTrixBBSCodeSegment(args, conf.bbsPort); + cs1.ods.put("host", "node0"); + } else { + new TopologyNode(conf, new StartBBSCodeSegment(args, conf.bbsPort)); + } + } +} diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/thinks/NetworkMatrixBulletinBoard.java --- a/src/main/java/app/bbs/thinks/NetworkMatrixBulletinBoard.java Sun Sep 28 17:29:11 2014 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -package app.bbs.thinks; - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Iterator; -import java.util.concurrent.atomic.AtomicInteger; - -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; -import alice.jungle.core.NetworkDefaultJungle; -import alice.jungle.persistent.AliceJournal; -import alice.jungle.persistent.NetworkJournal; -import alice.jungle.persistent.PersistentJournal; -import alice.jungle.transaction.JungleUpdater; -import app.bbs.BulletinBoardJungleManager; -import app.bbs.NetworkBulletinBoard; -import app.bbs.NetworkJungleBulletinBoard; - -public class NetworkMatrixBulletinBoard implements NetworkBulletinBoard { - - private final Jungle jungle; - private final NetworkJournal journal; - private final String LOG_DIR; - private Boolean persistentFlag; - private AtomicInteger requestCounter; - private long renewTime; - - private NetworkMatrixBulletinBoard(String _uuid, NetworkJournal _journal) { - journal = _journal; - jungle = new NetworkDefaultJungle(journal, _uuid, - new DefaultTreeEditor(new DefaultTraverser())); - BulletinBoardJungleManager.setJungle(jungle); - persistentFlag = false; - requestCounter = BulletinBoardJungleManager.getRequestCounter(); - LOG_DIR = "./log"; - renewTime = 0; - } - - public NetworkMatrixBulletinBoard(String _uuid) { - this(_uuid, new AliceJournal()); - jungle.createNewTree("boards"); - } - - public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { - NetworkMatrixBulletinBoard board = new NetworkMatrixBulletinBoard( _uuid, new PersistentJournal()); - board.persistentFlag = true; - return board; - } - - @Override - public void init() { - if (!persistentFlag) { - return; - } - checkAndCreateLogDirectory(); - try { - commitLogRecover(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void checkAndCreateLogDirectory() { - File logFile = new File(LOG_DIR); - if (!logFile.exists()) { - logFile.mkdir(); - return; - } - if (logFile.isFile()) { - logFile.delete(); - logFile.mkdir(); - } - } - - public void commitLogRecover() throws IOException { - File[] logFiles = new File(LOG_DIR).listFiles(); - for (File logFile : logFiles) { - commitLogRecover(logFile); - logFile.delete(); - } - if (jungle.getTreeByName("boards") == null) { - jungle.createNewTree("boards"); - } - } - - private void commitLogRecover(File logFile) throws IOException { - journal.setInputFile(logFile); - ChangeListReader reader = journal.getReader(); - if (reader == null) - return; - for (ChangeList chList : reader) { - String treeName = chList.getTreeName(); - JungleTree tree = jungle.getTreeByName(treeName); - if (tree == null) { - tree = jungle.createNewTree(treeName); - } - JungleTreeEditor editor = tree.getLocalTreeEditor(); - Either either = JungleUpdater.edit(editor, - chList); - editor = either.b(); - if (either.isA()) { - throw new IOException("Failed commit log recovery"); - } - editor.success(); - } - } - - @Override - public Iterable getBoards() { - JungleTree tree = jungle.getTreeByName("boards"); - TreeNode node = tree.getRootNode(); - Children chs = node.getChildren(); - - IterableConverter.Converter converter = new IterableConverter.Converter() { - 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(chs, converter); - } - - @Override - public long getRenewTime(String _boardName) { - return renewTime; - } - - @Override - public void createBoards(String _name, String _author, String _initMessage, - String _editKey) { - // TODO Auto-generated method stub - - } - - @Override - public void createBoardMessage(String _board, String _author, - String _message, String _editKey) { - // TODO Auto-generated method stub - - } - - @Override - public void editMessage(String _board, String _uuid, String _author, - String _message, String _editKey) { - // TODO Auto-generated method stub - - } - - @Override - public String sanitize(String str) { - if (str == null) { - return str; - } - str = str.replaceAll("&", "&"); - str = str.replaceAll("<", "<"); - str = str.replaceAll(">", ">"); - str = str.replaceAll("\"", """); - str = str.replaceAll("'", "'"); - return str; - } - - @Override - public Iterable getMessages(String _boardName) { - // TODO Auto-generated method stub - return null; - } - - @Override - public int getRequestNum() { - return requestCounter.get(); - } - - @Override - public Iterable getFolder(String _boardName, String nodeNum) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void createFolder(String boardName, String author, String msg, - String key, String _nodeNum) { - // TODO Auto-generated method stub - - } - - @Override - public void createAttribute(String boardName, String uuid, String author, - String msg, String key) { - // TODO Auto-generated method stub - - } - - @Override - public getAttributeImp getAttribute(String _bname, String nodeNum) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void editAttribute(String boardName, String path, String id, - String message) { - // TODO Auto-generated method stub - - } - - @Override - public void deleteAttribute(String _board, String _path, String id) { - // TODO Auto-generated method stub - - } - - @Override - public void deleteNode(String _board, String _path, String id) { - // TODO Auto-generated method stub - - } - - @Override - public void editMatrixMessage(String boardName, String path, String author, - String msg, String key) { - // TODO Auto-generated method stub - - } - - - private static class BoardMessageImpl implements BoardMessage { - private final String author; - private final String message; - private final String uuid; - - public BoardMessageImpl(String _author, String _message, String _uuid) { - author = _author; - message = _message; - uuid = _uuid; - } - - public String getAuthor() { - return author; - } - - public String getMessage() { - return message; - } - - public String getUUID() { - return uuid; - } - - } - - public TreeNode search(JungleTree tree ,String searchAttribute,String key){ - InterfaceTraverser ifTraverser = tree.getTraverser(); - Iterator> searchNode = ifTraverser.find( - (TreeNode node) -> { - ByteBuffer attribute = node.getAttributes().get(key); - if(attribute != null){ - byte[] byteAttribute = attribute.array(); - String str = new String(byteAttribute); - System.out.println(str); - return str.equals(searchAttribute); - } - return false; - } - ); - - if (!searchNode.hasNext()) - return null; - return searchNode.next().left(); - - } - - public boolean compare(TreeNode compareNode, String compareAttribute) { - String labName = compareNode.getAttributes().getString("mes"); - if (labName.equals(compareAttribute)) - return true; - - int loopCount = 0; - for (loopCount = 0 ;compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++ ) { - labName = compareNode.getAttributes().getString("mes" + loopCount); - if (labName.equals(compareAttribute)) - return true; - } - - return false; - } - - @Override - public String searchJungle(String requestName , String approvalName) { - JungleTree tree = jungle.getTreeByName("人物"); - - - TreeNode searchNode = search(tree , requestName,"mes"); - if (searchNode == null) - return "申請者がデータに無い人物です"; - - if (!compare(searchNode, "河野研")) - return "河野研以外に所属している人は、この申請をすることが出来ません"; - - - searchNode = search(tree , approvalName,"mes"); - if (searchNode == null) - return "承認者がデータに無い人物です"; - - String position = searchNode.getAttributes().getString("mes1"); - - JungleTree grantTree = jungle.getTreeByName("役職"); - searchNode = search(grantTree , position,"mes"); - - if (!compare(searchNode, "准教授権限") && !compare(searchNode, "教授権限")) - return "権限がありません(この申請の承認は助教授か、教授である必要があります"; - - - searchNode = search(tree , approvalName,"mes"); - if (searchNode == null) - return "申請者がデータに無い人物です"; - - if (!compare(searchNode, "上位申請権限")) - return "権限がありません(この申請の承認は上位申請者である必要があります"; - - - } - -} diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/thinks/NetworkMatrixJungleBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/thinks/NetworkMatrixJungleBulletinBoard.java Fri Oct 17 15:16:56 2014 +0900 @@ -0,0 +1,848 @@ +package app.bbs.thinks; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Iterator; +import java.util.concurrent.atomic.AtomicInteger; + +import fj.data.List; +import fj.data.TreeMap; +import alice.jungle.core.NetworkDefaultJungle; +import alice.jungle.persistent.AliceJournal; +import alice.jungle.persistent.NetworkJournal; +import alice.jungle.persistent.PersistentJournal; +import alice.jungle.transaction.JungleUpdater; +import app.bbs.BulletinBoardJungleManager; +import app.bbs.NetworkBulletinBoard; +import app.bbs.thinks.getAttributeImp; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultOperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultEvaluator; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode; +import junit.framework.Assert; + +public class NetworkMatrixJungleBulletinBoard implements NetworkBulletinBoard { + private final Jungle jungle; + private final NetworkJournal journal; + private final String LOG_DIR; + private Boolean persistentFlag; + private AtomicInteger requestCounter; + private long renewTime; + + private NetworkMatrixJungleBulletinBoard(String _uuid, NetworkJournal _journal) { + journal = _journal; + jungle = new NetworkDefaultJungle(journal, _uuid, + new DefaultTreeEditor(new DefaultTraverser())); + BulletinBoardJungleManager.setJungle(jungle); + persistentFlag = false; + requestCounter = BulletinBoardJungleManager.getRequestCounter(); + LOG_DIR = "./log"; + renewTime = 0; + } + + public NetworkMatrixJungleBulletinBoard(String _uuid) { + this(_uuid, new AliceJournal()); + jungle.createNewTree("boards"); + } + + public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { + NetworkMatrixJungleBulletinBoard board = new NetworkMatrixJungleBulletinBoard( + _uuid, new PersistentJournal()); + board.persistentFlag = true; + return board; + } + + public void init() { + if (!persistentFlag) { + return; + } + checkAndCreateLogDirectory(); + try { + commitLogRecover(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void checkAndCreateLogDirectory() { + File logFile = new File(LOG_DIR); + if (!logFile.exists()) { + logFile.mkdir(); + return; + } + if (logFile.isFile()) { + logFile.delete(); + logFile.mkdir(); + } + } + + public void commitLogRecover() throws IOException { + File[] logFiles = new File(LOG_DIR).listFiles(); + for (File logFile : logFiles) { + commitLogRecover(logFile); + logFile.delete(); + } + if (jungle.getTreeByName("boards") == null) { + jungle.createNewTree("boards"); + } + } + + private void commitLogRecover(File logFile) throws IOException { + journal.setInputFile(logFile); + ChangeListReader reader = journal.getReader(); + if (reader == null) + return; + for (ChangeList chList : reader) { + String treeName = chList.getTreeName(); + JungleTree tree = jungle.getTreeByName(treeName); + if (tree == null) { + tree = jungle.createNewTree(treeName); + } + JungleTreeEditor editor = tree.getLocalTreeEditor(); + Either either = JungleUpdater.edit(editor, + chList); + editor = either.b(); + if (either.isA()) { + throw new IOException("Failed commit log recovery"); + } + editor.success(); + } + } + + public Iterable getBoards() { + JungleTree tree = jungle.getTreeByName("boards"); + TreeNode node = tree.getRootNode(); + Children chs = node.getChildren(); + + IterableConverter.Converter converter = new IterableConverter.Converter() { + 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(chs, converter); + } + + public long getRenewTime(String _boardName) { + return renewTime; + } + + public void createBoards(final String _name, final String _author, final String _initMessage, final String _editKey) { + requestCounter.incrementAndGet(); + if (null == jungle.createNewTree(_name)) { + throw new IllegalStateException(); + } + + JungleTree tree = jungle.getTreeByName("boards"); + JungleTreeEditor editor = tree.getTreeEditor(); + DefaultNodePath root = new DefaultNodePath(); + Either either = editor.addNewChildAt(root, 0); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + either = editor.putAttribute(root.add(0), "name", + ByteBuffer.wrap(_name.getBytes())); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + final long timestamp = System.currentTimeMillis(); + ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + either = editor.putAttribute(root.add(0), "timestamp", tBuffer); + if (either.isA()) { + throw new IllegalStateException(); + } + either = either.b().success(); + if (either.isA()) { + throw new IllegalStateException(); + } + + tree = jungle.getTreeByName(_name); + editor = tree.getTreeEditor(); + either = editor.addNewChildAt(root, 0); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + NodeEditor e = new NodeEditor() { + ByteBuffer tBuffer2 = ByteBuffer.allocate(16); + + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_initMessage.getBytes())).b(); + logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); + tBuffer2.putLong(timestamp); + logNode = logNode.getAttributes().put("timestamp", tBuffer2).b(); + return DefaultEither.newB(logNode); + } + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + + either = editor.edit(root.add(0), e); + if (either.isA()) { + throw new IllegalStateException(); + } + either.b().success(); + + } + + public void createFolder(final String _board, final String _author, final String _message, final String _editKey, String _nodeNum) { + JungleTree tree = jungle.getTreeByName(_board); + if (tree == null) { + throw new IllegalStateException(); + } + + DefaultNodePath path = new DefaultNodePath(); + try { + for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { + if (!_nodeNum.substring(count, count + 1).equals("/")) + path = path.add(Integer.parseInt(_nodeNum.substring(count, + count + 1))); + } + } catch (Exception _e) { + } + requestCounter.incrementAndGet(); + Either 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 traversable = new + // TraversableNodeWrapper(node); + DefaultEvaluator evaluator = new DefaultEvaluator(path); + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + path = path.add(size); + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + + } + + public void createBoardMessage(final String _board, final String _author, final String _message, final String _editKey) { + requestCounter.incrementAndGet(); + JungleTree tree = jungle.getTreeByName(_board); + if (tree == null) { + throw new IllegalStateException(); + } + + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + path = path.add(size); + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + + } + + public void editMessage(String _board, String _nodeNum,final String _author, final String _message, final String _editKey) { + requestCounter.incrementAndGet(); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(_board); + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + System.out.println(new String(node.getAttributes().get("mes").array())); + logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); + System.out.println(new String(node.getAttributes().get("mes").array())); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + renewTime = timestamp; + } + + public void createAttribute(String _board, String _uuid, final String _author, final String _message, final String _editKey) { + requestCounter.incrementAndGet(); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(_board); + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + str = "0"; + int count = 0; + for (; logNode.getAttributes().get("mes" + String.valueOf(count)) != null; count++) { + } + str = String.valueOf(count); + logNode = logNode.getAttributes().put("mes" + str,ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp" + str, tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + } + + public void editAttribute(String boardName, String _path, final String id, final String _message) { + requestCounter.incrementAndGet(); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(boardName); + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + // EnableNodeWrapper node = _e.getWrap(); + logNode = logNode.getAttributes().put("mes" + id,ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + } + + public void deleteNode(String _board, String _path, String _id) { + requestCounter.incrementAndGet(); + int id = Integer.parseInt(_id); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(_board); + Either either = null; + DefaultNodePath path = new DefaultNodePath(); + do { + try { + for (int count = 0; _path.substring(count, count + 1) != null; count++) { + if (!_path.substring(count, count + 1).equals("/")) + path = path.add(Integer.parseInt(_path.substring(count,count + 1))); + } + } catch (Exception _e) { + } + + JungleTreeEditor editor = tree.getTreeEditor(); + + either = editor.deleteChildAt(path, id); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + + } + + public void deleteAttribute(String _board, String _path, final String id) { + requestCounter.incrementAndGet(); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(_board); + Either 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 edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + logNode = logNode.getAttributes().delete("mes" + id).b(); + logNode = logNode.getAttributes().delete("timestamp" + id).b(); + int count = Integer.parseInt(id); + for (; logNode.getAttributes().get("mes" + String.valueOf(count + 1)) != null;) { + logNode = logNode.getAttributes().put("mes" + count,node.getAttributes().get("mes"+ String.valueOf(count + 1))).b(); + logNode = logNode.getAttributes().put("timestamp" + count, tBuffer).b(); + count++; + } + if (count != Integer.parseInt(id)) { + logNode = logNode.getAttributes().delete("timestamp" + count).b(); + logNode = logNode.getAttributes().delete("mes" + count).b(); + } + + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + } + + public void editMatrixMessage(String _board, String _uuid, + final String _author, final String _message, final String _editKey) { + requestCounter.incrementAndGet(); + final long timestamp = System.currentTimeMillis(); + final ByteBuffer tBuffer = ByteBuffer.allocate(16); + tBuffer.putLong(timestamp); + JungleTree tree = jungle.getTreeByName(_board); + Either either = null; + do { + DefaultNodePath path = new DefaultNodePath(); + path = path.add(Integer.parseInt(_uuid)); + + JungleTreeEditor editor = tree.getTreeEditor(); + NodeEditor e = new NodeEditor() { + public Either edit(TreeNode node) { + LoggingNode logNode = wrap(node , new DefaultOperationLog()); + logNode = logNode.getAttributes().put("author", ByteBuffer.wrap(_author.getBytes())).b(); + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("key", ByteBuffer.wrap(_editKey.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public LoggingNode wrap(TreeNode node, OperationLog op) { + return new LoggingNode(node, op); + } + + @Override + public TreeMap>>> getIndex() { + // TODO Auto-generated method stub + return null; + } + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + renewTime = timestamp; + } + + public Iterable getMessages(String _boardName) { + requestCounter.incrementAndGet(); + JungleTree tree = jungle.getTreeByName(_boardName); + TreeNode node = tree.getRootNode(); + Children chs = node.getChildren(); + final AtomicInteger counter = new AtomicInteger(0); + IterableConverter.Converter converter = new IterableConverter.Converter() { + 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(chs, converter); + } + + public Iterable getFolder(String _boardName, String _nodeNum) { + + DefaultNodePath path = new DefaultNodePath(); + try { + for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { + if (!_nodeNum.substring(count, count + 1).equals("/")) + path = path.add(Integer.parseInt(_nodeNum.substring(count,count + 1))); + } + } catch (Exception _e) { + } + requestCounter.incrementAndGet(); + JungleTree tree = jungle.getTreeByName(_boardName); + TreeNode node = tree.getRootNode(); + + DefaultTraverser traverser = new DefaultTraverser(); + // TraversableNodeWrapper traversable = new + // TraversableNodeWrapper(node); + DefaultEvaluator evaluator = new DefaultEvaluator(path); + Either 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 converter = new IterableConverter.Converter() { + public BoardMessage conv(TreeNode _b) { + String uuid = Integer.toString(counter.get()); + String message = new String(_b.getAttributes().get("mes") + .array()); + counter.incrementAndGet(); + return new BoardMessageImpl(null, message, uuid); + } + }; + return new IterableConverter(chs, converter); + } + + public getAttributeImp getAttribute(String _boardName, String _nodeNum) { + + DefaultNodePath path = new DefaultNodePath(); + try { + for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { + if (!_nodeNum.substring(count, count + 1).equals("/")) + path = path.add(Integer.parseInt(_nodeNum.substring(count, + count + 1))); + } + } catch (Exception _e) { + } + requestCounter.incrementAndGet(); + JungleTree tree = jungle.getTreeByName(_boardName); + TreeNode node = tree.getRootNode(); + + DefaultTraverser traverser = new DefaultTraverser(); + // TraversableNodeWrapper traversable = new + // TraversableNodeWrapper(node); + DefaultEvaluator evaluator = new DefaultEvaluator(path); + Either ret = traverser.traverse(node, + evaluator); + if (ret.isA()) { + Assert.fail(); + } + + Traversal traversal = ret.b(); + TreeNode target = traversal.destination(); + return new getAttributeImp(target); + } + + public TreeNode search(JungleTree tree ,String searchAttribute,String key){ + // + InterfaceTraverser ifTraverser = tree.getTraverser(); + Iterator> searchNode = ifTraverser.find( + (TreeNode node) -> { + ByteBuffer attribute = node.getAttributes().get(key); + if(attribute != null){ + byte[] byteAttribute = attribute.array(); + String str = new String(byteAttribute); + System.out.println(str); + return str.equals(searchAttribute); + } + return false; + } + ,key,searchAttribute); + + if (!searchNode.hasNext()) + return null; + return searchNode.next().left(); + + } + + public boolean compare(TreeNode compareNode, String compareAttribute) { + String labName = compareNode.getAttributes().getString("mes"); + if (labName.equals(compareAttribute)) + return true; + + int loopCount = 0; + for (loopCount = 0 ;compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++ ) { + labName = compareNode.getAttributes().getString("mes" + loopCount); + if (labName.equals(compareAttribute)) + return true; + } + + return false; + } + public String searchJungle(String requestName , String approvalName) { + JungleTree tree = jungle.getTreeByName("人物"); + + + TreeNode searchNode = search(tree , "河野研","mes"); + + if (searchNode == null) + return "申請者がデータに無い人物です"; + + if (!compare(searchNode, "河野研")) + return "河野研以外に所属している人は、この申請をすることが出来ません"; + + + searchNode = search(tree , approvalName,"mes"); + if (searchNode == null) + return "承認者がデータに無い人物です"; + + if (!compare(searchNode, "上位申請権限")) + return "権限がありません(この申請の承認は上位申請者である必要があります"; + + String position = searchNode.getAttributes().getString("mes1"); + + JungleTree grantTree = jungle.getTreeByName("役職"); + searchNode = search(grantTree , position,"mes"); + + if (!compare(searchNode, "准教授権限") || !!compare(searchNode, "教授権限")) + return "権限がありません(この申請の承認は助教授か、教授である必要があります"; + + return "申請が受理されました"; + } + + + public int getRequestNum() { + return requestCounter.get(); + } + + private static class BoardMessageImpl implements BoardMessage { + private final String author; + private final String message; + private final String uuid; + + public BoardMessageImpl(String _author, String _message, String _uuid) { + author = _author; + message = _message; + uuid = _uuid; + } + + public String getAuthor() { + return author; + } + + public String getMessage() { + return message; + } + + public String getUUID() { + return uuid; + } + + } + + public String sanitize(String str) { + if (str == null) { + return str; + } + str = str.replaceAll("&", "&"); + str = str.replaceAll("<", "<"); + str = str.replaceAll(">", ">"); + str = str.replaceAll("\"", """); + str = str.replaceAll("'", "'"); + return str; + } + +} diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/thinks/ShowBoardsServletMatrix.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/thinks/ShowBoardsServletMatrix.java Fri Oct 17 15:16:56 2014 +0900 @@ -0,0 +1,58 @@ +package app.bbs.thinks; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BulletinBoard; + +public class ShowBoardsServletMatrix extends HttpServlet +{ + /** + * + */ + private static final long serialVersionUID = 1L; + private final BulletinBoard bbs; + private final String createBoardPath; + private final String showBoardMessagePath; + + public ShowBoardsServletMatrix(BulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath) + { + bbs = _bbs; + createBoardPath = _createBoardPath; + showBoardMessagePath = _showBoardMessagePath; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + try{ + _res.setCharacterEncoding("UTF-8"); + printBoard(_res.getWriter()); + }catch(Exception _e){ + _res.setStatus(500); + } + + } + + private void printBoard(PrintWriter _pw) throws Exception + { + _pw.write("\n"); + _pw.write("

BBS

\n"); + _pw.write("
Create new board.

"); + _pw.write("

BoardName :

\n"); + _pw.write("

Author : EditKey :

\n"); + _pw.write("

Message

\n"); + _pw.write("


\n"); + + _pw.write("

list of boards

"); + for(String board : bbs.getBoards()){ + _pw.write("

"+ bbs.sanitize(board) + "

"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 8788cc341358 -r 269bada9eedc src/main/java/app/bbs/thinks/ShowMatrix.java --- a/src/main/java/app/bbs/thinks/ShowMatrix.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/main/java/app/bbs/thinks/ShowMatrix.java Fri Oct 17 15:16:56 2014 +0900 @@ -62,7 +62,9 @@ if (nodeName == null) nodeName = "rootNode"; - + if (path == null) + path = ""; + _pw.write("

" + bbs.sanitize(nodeName) + " Path = " + path + "

\n"); _pw.write("Author : EditKey :

\n"); + _pw.write("

Message

\n"); + _pw.write("

\n"); + _pw.write("MatrixMode"+"
"); + + for (BoardMessage msg : bbs.getMessages(_bname)) {//フォルダの表示 + _pw.write("
"); + _pw.write("

Author " + bbs.sanitize(msg.getAuthor()) + "

"); + _pw.write(""+ bbs.sanitize(msg.getMessage()) +"
"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 8788cc341358 -r 269bada9eedc src/test/java/alice/jungle/log/example/FindMatrixTest.java --- a/src/test/java/alice/jungle/log/example/FindMatrixTest.java Sun Sep 28 17:29:11 2014 +0900 +++ b/src/test/java/alice/jungle/log/example/FindMatrixTest.java Fri Oct 17 15:16:56 2014 +0900 @@ -60,7 +60,7 @@ } return false; } - ); + ,"mes","比嘉健太"); TreeNode node = searchNode.next().left(); byte[] nodeAttibute = node.getAttributes().get("mes").array();