# 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("
");
+ _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("