# HG changeset patch
# User Nobuyasu Oshiro
# Date 1390866465 -32400
# Node ID 29734d7d6521c5b955f58426a087a1e7fb6f8a3d
# Parent 0340a3321e6c32dbe65cd6faa66f046600cb7bf4
Added ShowMessageWithTimeStampServlet
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/BoardRenewTime.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/BoardRenewTime.java Tue Jan 28 08:47:45 2014 +0900
@@ -0,0 +1,8 @@
+package app.bbs;
+
+public interface BoardRenewTime {
+
+ public String getboardName();
+ public Long getRenewTime();
+
+}
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/BulletinBoardJungleManager.java
--- a/src/main/java/app/bbs/BulletinBoardJungleManager.java Tue Jan 28 06:25:47 2014 +0900
+++ b/src/main/java/app/bbs/BulletinBoardJungleManager.java Tue Jan 28 08:47:45 2014 +0900
@@ -1,6 +1,9 @@
package app.bbs;
import java.nio.ByteBuffer;
+import java.util.Date;
+
+import javax.naming.directory.Attribute;
import alice.jungle.operations.NetworkTreeOperationLog;
import alice.jungle.transaction.JungleUpdater;
@@ -8,7 +11,10 @@
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.core.Attributes;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
+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.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
@@ -46,8 +52,11 @@
throw new IllegalStateException();
}
}
+
+
Either either = null;
JungleTree tree = jungle.getTreeByName(treeName);
+
do {
JungleTreeEditor editor = tree.getLocalTreeEditor();
/*
@@ -62,9 +71,27 @@
editor = either.b();
either = editor.success();
}while(either.isA());
+
+ renewBoardTimeStamp(tree);
return either;
}
+ private static void renewBoardTimeStamp(JungleTree tree) {
+ JungleTreeEditor editor = tree.getLocalTreeEditor();
+ DefaultNodePath root = new DefaultNodePath();
+ long timestamp = new Date().getTime();
+ ByteBuffer tBuffer = ByteBuffer.allocate(16);
+ tBuffer.putLong(timestamp);
+
+ Either either = null;
+ do {
+ either = editor.putAttribute(root, "renewtime", tBuffer);
+ editor = either.b();
+ either = editor.success();
+ }while(either.isA());
+
+ }
+
private static int calculatePosition(Node node, long newNodeTimeStamp) {
int count = 0;
long childTimeStamp = 0;
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/NetworkBulletinBoard.java
--- a/src/main/java/app/bbs/NetworkBulletinBoard.java Tue Jan 28 06:25:47 2014 +0900
+++ b/src/main/java/app/bbs/NetworkBulletinBoard.java Tue Jan 28 08:47:45 2014 +0900
@@ -6,5 +6,6 @@
public interface NetworkBulletinBoard extends BulletinBoard {
public void init();
public int getRequestNum();
+ public long getRenewTime(String boardName);
}
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/NetworkJungleBulletinBoard.java
--- a/src/main/java/app/bbs/NetworkJungleBulletinBoard.java Tue Jan 28 06:25:47 2014 +0900
+++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java Tue Jan 28 08:47:45 2014 +0900
@@ -129,6 +129,19 @@
return new IterableConverter(chs,converter);
}
+
+ public long getRenewTime(String _boardName) {
+ JungleTree tree = jungle.getTreeByName(_boardName);
+ ByteBuffer b = tree.getRootNode().getAttributes().get("renewtime");
+ long timestamp;
+ if (b == null) {
+ timestamp = 0;
+ } else {
+ timestamp = b.getLong(0);
+ }
+ return timestamp;
+ }
+
public void createBoards(final String _name,final String _author,final String _initMessage,final String _editKey)
{
@@ -153,16 +166,17 @@
editor = either.b();
final long timestamp = new Date().getTime();
ByteBuffer tBuffer = ByteBuffer.allocate(16);
- either = editor.putAttribute(root.add(0),"timestamp", tBuffer.putLong(timestamp));
+ tBuffer.putLong(timestamp);
+ either = editor.putAttribute(root.add(0),"timestamp", tBuffer);
if(either.isA()){
throw new IllegalStateException();
}
- editor = either.b();
- Either result = editor.success();
- if(result.isA()){
+ either = either.b().success();
+ if(either.isA()){
throw new IllegalStateException();
}
+
tree = jungle.getTreeByName(_name);
editor = tree.getTreeEditor();
either = editor.addNewChildAt(root,0);
@@ -177,7 +191,8 @@
_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b();
_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
ByteBuffer tBuffer2 = ByteBuffer.allocate(16);
- _e = _e.getAttributes().put("timestamp",tBuffer2.putLong(timestamp)).b();
+ tBuffer2.putLong(timestamp);
+ _e = _e.getAttributes().put("timestamp",tBuffer2).b();
return DefaultEither.newB(_e);
}
};
@@ -186,8 +201,12 @@
if(either.isA()){
throw new IllegalStateException();
}
- editor = either.b();
- editor.success();
+ either.b().success();
+
+ editor = tree.getLocalTreeEditor();
+ either = editor.putAttribute(root, "renewtime", tBuffer);
+ either.b().success();
+
}
public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey)
@@ -199,6 +218,9 @@
}
Either either;
+ final long timestamp = new Date().getTime();
+ final ByteBuffer tBuffer = ByteBuffer.allocate(16);
+ tBuffer.putLong(timestamp);
do{
Node node = tree.getRootNode();
int size = node.getChildren().size();
@@ -210,14 +232,13 @@
throw new IllegalStateException();
}
editor = either.b();
- final long timestamp = new Date().getTime();
+
NodeEditor e = new NodeEditor(){
public > Either edit(T _e){
_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
- ByteBuffer tBuffer = ByteBuffer.allocate(16);
- _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+ _e = _e.getAttributes().put("timestamp",tBuffer).b();
return DefaultEither.newB(_e);
}
};
@@ -228,41 +249,60 @@
}
editor = either.b();
either = editor.success();
+ }while(either.isA());
+ /*
+ * Record latest renew time
+ */
+ DefaultNodePath root = new DefaultNodePath();
+ do {
+ JungleTreeEditor editor = tree.getLocalTreeEditor();
+ either = editor.putAttribute(root, "renewtime", tBuffer);
+ either = either.b().success();
}while(either.isA());
+
+
}
public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey)
{
requestCounter.incrementAndGet();
final long timestamp = new Date().getTime();
- for(;;) {
+ 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));
-
- JungleTree tree = jungle.getTreeByName(_board);
+
JungleTreeEditor editor = tree.getTreeEditor();
NodeEditor e = new NodeEditor(){
public > Either edit(T _e){
_e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b();
_e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b();
_e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b();
- ByteBuffer tBuffer = ByteBuffer.allocate(16);
- _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b();
+ _e = _e.getAttributes().put("timestamp",tBuffer).b();
return DefaultEither.newB(_e);
}
};
-
- Either either = editor.edit(path,e);
+ either = editor.edit(path,e);
if(either.isA()){
throw new IllegalStateException();
}
editor = either.b();
either = editor.success();
- if(!either.isA()) {
- return;
- }
- }
+ }while(either.isA());
+ /*
+ * Record latest renew time
+ */
+ DefaultNodePath root = new DefaultNodePath();
+ do {
+ JungleTreeEditor editor = tree.getLocalTreeEditor();
+ either = editor.putAttribute(root, "renewtime", tBuffer);
+ either = either.b().success();
+ }while(either.isA());
+
}
@@ -289,6 +329,7 @@
return requestCounter.get();
}
+
private static class BoardMessageImpl implements BoardMessage
{
private final String author;
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/app/bbs/ShowMessageWithTimeStampServlet.java Tue Jan 28 08:47:45 2014 +0900
@@ -0,0 +1,63 @@
+package app.bbs;
+
+import java.io.PrintWriter;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.BoardMessage;
+
+public class ShowMessageWithTimeStampServlet extends HttpServlet
+{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private final NetworkBulletinBoard bbs;
+ private final String createBoardMessagePath;
+ private final String editMessagePath;
+
+ private static final String PARAM_BOARD_NAME = "bname";
+
+ public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath)
+ {
+ bbs = _bbs;
+ createBoardMessagePath = _createBoardMessagePath;
+ editMessagePath = _editMessagePath;
+ }
+
+ public void doGet(HttpServletRequest _req,HttpServletResponse _res)
+ {
+ String bname = _req.getParameter(PARAM_BOARD_NAME);
+
+ try{
+ printBoard(bname,_res.getWriter());
+ }catch(Exception _e){
+ _res.setStatus(500);
+ }
+
+ }
+
+ private void printBoard(String _bname,PrintWriter _pw) throws Exception
+ {
+ _pw.write("\n");
+ _pw.write(""+_bname+"
\n");
+ _pw.write("Latest renew time : "+bbs.getRenewTime(_bname)+"
\n");;
+
+ _pw.write("
\n");
+ _pw.write("Message
\n");
+ _pw.write("\n");
+
+ for(BoardMessage msg : bbs.getMessages(_bname)){
+ _pw.write("
");
+ _pw.write(""+msg.getAuthor()+"
");
+ _pw.write(""+msg.getMessage()+"
");
+ _pw.write("edit");
+ }
+
+ _pw.write("");
+ _pw.flush();
+ }
+}
diff -r 0340a3321e6c -r 29734d7d6521 src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java
--- a/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java Tue Jan 28 06:25:47 2014 +0900
+++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java Tue Jan 28 08:47:45 2014 +0900
@@ -9,7 +9,6 @@
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.ShowBoardMessageServlet;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.bbs.ShowBoardsServlet;
import org.mortbay.jetty.Server;
@@ -22,6 +21,7 @@
import app.bbs.NetworkBulletinBoard;
import app.bbs.NetworkJungleBulletinBoard;
import app.bbs.RequestNumCheckServlet;
+import app.bbs.ShowMessageWithTimeStampServlet;
public class StartBBSCodeSegment extends CodeSegment {
@@ -75,7 +75,8 @@
Servlet createBoard = new CreateBoardServlet(cassaBBS);
Servlet editBoardMessage = new EditMessageServlet(cassaBBS);
Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath);
- Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
+// Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath);
+ Servlet board = new ShowMessageWithTimeStampServlet(cassaBBS,createBoardMessagePath,editMessagePath);
Server serv = new Server(bbsPort);
ServletHandler context = new ServletHandler();