# 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("
Author : EditKey :

\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();