# HG changeset patch # User tatsuki # Date 1486044359 -32400 # Node ID 766f7668521f99ce1bfc6374d9874b6b94403393 # Parent 6c584862fe93cee619e514b203d1d31af9e04a51 commit diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/App.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/App.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; -import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletHandler; -import org.eclipse.jetty.servlet.ServletHolder; - -import javax.servlet.Servlet; - - -/** - * Hello world! - */ -public class App { - - - public static void main(String[] args) throws Exception { - System.out.println("main"); - Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor( - new DefaultTraverser())); - new App().startBBS(args, jungle); - } - - - public void startBBS(String[] args, Jungle jungle) throws Exception { - BrowsingBulletinBoard cassaBBS = new JungleBrowsingBulletinBoard(jungle); - String createBoardMessagePath = "/createBoardMessage"; - String createBoardPath = "/createBoard"; - String editMessagePath = "/editMessage"; - String showBoardMessagePath = "/showBoardMessage"; - String createChildPath = "/createChildMessage"; - String findNodeMessagePath = "/findNode"; - Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); - Servlet createBoard = new CreateBoardServlet(cassaBBS); - Servlet createChild = new CreateChildServlet(cassaBBS); - Servlet editBoardMessage = new EditMessageServlet(cassaBBS); - Servlet index = new ShowBoardsServlet(cassaBBS, createBoardPath, showBoardMessagePath, findNodeMessagePath); - Servlet find = new FindNodeServlet(cassaBBS, showBoardMessagePath); - Servlet board = new ShowBoardMessageServlet(cassaBBS, createBoardMessagePath, createChildPath, editMessagePath, showBoardMessagePath); - Server serv = new Server(8000); - ServletHandler context = new ServletHandler(); - context.addServletWithMapping(new ServletHolder(find), findNodeMessagePath); - context.addServletWithMapping(new ServletHolder(createBoardMessage), createBoardMessagePath); - context.addServletWithMapping(new ServletHolder(createBoard), createBoardPath); - context.addServletWithMapping(new ServletHolder(createChild), createChildPath); - context.addServletWithMapping(new ServletHolder(editBoardMessage), editMessagePath); - context.addServletWithMapping(new ServletHolder(index), "/"); - context.addServletWithMapping(new ServletHolder(board), showBoardMessagePath); - serv.setHandler(context); - serv.start(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BoardMessage.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BoardMessage.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -public interface BoardMessage -{ - public String getUUID(); - public String getAuthor(); - public String getMessage(); -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BrowsingBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BrowsingBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import java.util.Iterator; - -public interface BrowsingBulletinBoard -{ - Iterable getBoards(); - void createBoards(String name); - void createBoardMessage(String bname, String key, String attribute, String pathStr); - void createChild(String bname,String nodeName, String pathStr); - void editMessage(String bname, String key, String attribute, String pathStr); - String sanitize(String str); - GetAttributeImp getAttribute(String bname, String nodePath); - Iterator getChildren(String bname, String nodePath); - Iterator findNode(String bname, String key, String value); - String getNodePath(String bname, TreeNode node); - boolean childMove(String bname, String path, String childNum, String move); -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class CreateBoardMessageServlet extends HttpServlet -{ - private final BrowsingBulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_NODE_ATTRIBUTE_KEY = "key"; - private static final String PARAM_NODE_ATTRIBUTE= "attribute"; - private static final String PARAM_NODE_PATH = "path"; - - private static final long serialVersionUID = 1L; - - public CreateBoardMessageServlet(BrowsingBulletinBoard _bbs) - { - bbs = _bbs; - } - - @Override - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = _req.getParameter(PARAM_BOARD_NAME); - String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); - String attribute = _req.getParameter(PARAM_NODE_ATTRIBUTE); - String path = _req.getParameter(PARAM_NODE_PATH); - - try{ - bbs.createBoardMessage(boardName,key,attribute,path); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import org.apache.commons.lang.StringEscapeUtils; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class CreateBoardServlet extends HttpServlet -{ - private final BrowsingBulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final long serialVersionUID = 1L; - - public CreateBoardServlet(BrowsingBulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); - try{ - bbs.createBoards(boardName); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateChildServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateChildServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import org.apache.commons.lang.StringEscapeUtils; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class CreateChildServlet extends HttpServlet -{ - private final BrowsingBulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_NODE_PATH = "path"; - private static final String PARAM_NODE_NAME = "nodeName"; - - private static final long serialVersionUID = 1L; - - public CreateChildServlet(BrowsingBulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); - String path = _req.getParameter(PARAM_NODE_PATH); - String nodeName = _req.getParameter(PARAM_NODE_NAME); - try{ - PrintWriter pw = _res.getWriter(); - if (!nodeName.equals("")) { - bbs.createChild(boardName, nodeName, path); - pw.write("successfully written"); - } else { - pw.write("faild"); - } - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/EditMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/EditMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class EditMessageServlet extends HttpServlet -{ - private final BrowsingBulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_NODE_ATTRIBUTE_KEY = "key"; - private static final String PARAM_NODE_PATH = "path"; - private static final String PARAM_NODE_ATTRIBUTE = "attribute"; - - private static final long serialVersionUID = 1L; - - public EditMessageServlet(BrowsingBulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter(PARAM_BOARD_NAME); - String path = _req.getParameter(PARAM_NODE_PATH); - String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); - System.out.println("write"); - - try{ - PrintWriter pw = _res.getWriter(); - pw.write("

edit message

"); - pw.write("
" + - "" + - "" + - "\n"); - pw.write("

attribute

\n"); - pw.write("

\n"); - pw.write(""); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter(PARAM_BOARD_NAME); - String path = _req.getParameter(PARAM_NODE_PATH); - String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); - String attribute = _req.getParameter(PARAM_NODE_ATTRIBUTE); - - try{ - bbs.editMessage(bname, key, attribute, path); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/FindNodeservlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/FindNodeservlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; -import java.util.Iterator; - -public class FindNodeServlet extends HttpServlet -{ - private final BrowsingBulletinBoard bbs; - private final String showBoardMessagePath ; - private static final String PARAM_BOARD_NAME = "bname"; - - private static final long serialVersionUID = 1L; - - public FindNodeServlet(BrowsingBulletinBoard _bbs, String _showBoardMessagePath) - { - showBoardMessagePath = _showBoardMessagePath; - bbs = _bbs; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter(PARAM_BOARD_NAME); - System.out.println("write"); - - try{ - PrintWriter pw = _res.getWriter(); - pw.write("

find Node

"); - pw.write("" + - "\n"); - pw.write("

key

\n"); - pw.write("

value

\n"); - pw.write("

\n"); - pw.write(""); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter("bname"); - String key = _req.getParameter("key"); - String value = _req.getParameter("value"); - - try{ - Iterator iterator = bbs.findNode(bname, key, value); - PrintWriter pw = _res.getWriter(); - pw.write("

result

\n"); - while (iterator.hasNext()) { - TreeNode node = iterator.next(); - String childName = node.getAttributes().getString("NodeName"); - String path = bbs.getNodePath(bname, node).replace("<","").replace(">",""); - pw.write("

" +childName + " : path = <" + path + ">

"); - } - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/GetAttributeImp.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/GetAttributeImp.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - - -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; - -import java.util.Iterator; - -public class GetAttributeImp { - private final TreeNode node; - - public GetAttributeImp(TreeNode _node) { - node = _node; - } - - public String getMessage(String key) { - return node.getAttributes().getString(key); - } - - public Iterator getKeys() { - return node.getAttributes().getKeys(); - } - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/IterableConverter.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/IterableConverter.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import java.util.Iterator; - -public class IterableConverter implements Iterable -{ - private final Iterable iterable; - private final Converter converter; - - public IterableConverter(Iterable _iterable,Converter _converter) - { - iterable = _iterable; - converter = _converter; - } - - public Iterator iterator() - { - return new IteratorConverter(iterable.iterator(),converter); - } - - private static final class IteratorConverter implements Iterator - { - private final Iterator iterator; - private final Converter converter; - - public IteratorConverter(Iterator _iterator,Converter _converter) - { - iterator = _iterator; - converter = _converter; - } - - public boolean hasNext() - { - return iterator.hasNext(); - } - - public A next() - { - return converter.conv(iterator.next()); - } - - public void remove() - { - iterator.remove(); - } - } - - public static interface Converter - { - public A conv(B _b); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - - -import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; -import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath; -import jp.ac.u_ryukyu.ie.cr.jungle.store.NulIterator; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren; -import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; -import java.nio.ByteBuffer; -import java.util.Iterator; - -public class JungleBrowsingBulletinBoard implements - BrowsingBulletinBoard { - private final Jungle jungle; - - public JungleBrowsingBulletinBoard() { - jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor( - new DefaultTraverser())); - jungle.createNewTree("boards"); - } - - public JungleBrowsingBulletinBoard(Jungle jungle) { - if (jungle.getTreeByName("boards") == null) - jungle.createNewTree("boards"); - this.jungle = jungle; - } - - 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"); - return new String(e.array()); - } - }; - - return new IterableConverter(chs, converter); - } - - public void createBoards(final String _name) { - createBoards(_name, new DefaultTreeNode()); - } - public void createBoards(final String _name, TreeNode rootNode) { - if (null == jungle.createNewTree(_name, rootNode)) { - 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(); - Either result = editor.success(); - if (result.isA()) { - throw new IllegalStateException(); - } - - tree = jungle.getTreeByName(_name); - editor = tree.getTreeEditor(); - either = editor.putAttribute(root, "NodeName", ByteBuffer.wrap("root".getBytes())); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - editor.success(); - } - - public void createBoardMessage(final String boardName, final String key, - final String attribute, final String pathStr) { - if (key.equals("") | attribute.equals("")) - return ; - NodePath path = createNodePath(pathStr); - JungleTree tree = jungle.getTreeByName(boardName); - if (tree == null) { - throw new IllegalStateException(); - } - - JungleTreeEditor editor; - do { - editor = tree.getTreeEditor(); - Either either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes())); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - } while (editor.success().isA()); - } - - @Override - public void createChild(String bname, String nodeName, String pathStr) { - NodePath path = createNodePath(pathStr); - JungleTree tree = jungle.getTreeByName(bname); - if (tree == null) { - throw new IllegalStateException(); - } - Either getNodeEither = tree.getNodeOfPath(path); - if (getNodeEither.isA()) - return ; - TreeNode currentNode = getNodeEither.b(); - int childCount = currentNode.getChildren().size(); - - JungleTreeEditor editor; - do { - editor = tree.getTreeEditor(); - Either either = editor.addNewChildAt(path, childCount); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - - either = editor.putAttribute(path.add(childCount),"NodeName",ByteBuffer.wrap(nodeName.getBytes())); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - - } while (editor.success().isA()); - } - - public void editMessage(String bname, String key, final String attribute, - final String pathStr) { - NodePath path = createNodePath(pathStr); - - JungleTreeEditor editor = null; - - do { - JungleTree tree = jungle.getTreeByName(bname); - editor = tree.getTreeEditor(); - - Either either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes())); - - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - } while (editor.success().isA()); - } - - 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; - } - - public GetAttributeImp getAttribute(String _bname, String nodePath) { - - DefaultNodePath path = createNodePath(nodePath); - JungleTree tree = jungle.getTreeByName(_bname); - Either either = tree.getNodeOfPath(path); - if (either.isA()) - return new GetAttributeImp(new DefaultTreeNode()); - TreeNode currentNode = either.b(); - return new GetAttributeImp(currentNode); - } - - @Override - public Iterator getChildren(String bname, String nodePath) { - DefaultNodePath path = createNodePath(nodePath); - JungleTree tree = jungle.getTreeByName(bname); - Either either = tree.getNodeOfPath(path); - if (either.isA()) - return new NulIterator(); - TreeNode currentNode = either.b(); - TreeNodeChildren children = currentNode.getChildren(); - return children.iterator(); - } - - @Override - public Iterator findNode(String bname, String key, String value) { - JungleTree tree = jungle.getTreeByName(bname); - InterfaceTraverser traverser = tree.getTraverser(true); - return traverser.find((TreeNode node) -> { - return true; - },key,value); - } - - @Override - public String getNodePath(String bname, TreeNode node) { - JungleTree tree = jungle.getTreeByName(bname); - NodePath path = tree.getNodePath(node); - return path.toString(); - } - - @Override - public boolean childMove(String bname, String pathString, String childNumString, String move) { - int childNum = Integer.parseInt(childNumString); - JungleTree tree = jungle.getTreeByName(bname); - DefaultNodePath path = createNodePath(pathString); - JungleTreeEditor editor = tree.getTreeEditor(); - editor = editor.moveChild(path,childNum,move).b(); - return editor.success().isB(); - } - - private DefaultNodePath createNodePath(String nodePath) { - DefaultNodePath path = new DefaultNodePath(); - String[] nums = nodePath.split(","); - for (String num : nums) { - if (num.equals("-1")) - continue; - path = path.add(Integer.parseInt(num)); - } - return path; - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - - -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeAttributes; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; -import java.util.Iterator; - -public class ShowBoardMessageServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 1L; - private final BrowsingBulletinBoard bbs; - private final String createBoardMessagePath; - private final String createChildPath; - private final String showBoardMessagePath; - private final String editMessagePath; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_NODE_PATH = "path"; - private static final String PARAM_CHILDNUM = "childNum"; - private static final String MOVE = "move"; - - public ShowBoardMessageServlet(BrowsingBulletinBoard _bbs, String _createBoardMessagePath, String _createChildMessagePath, String _editMessagePath, String _showBoardMessagePath) { - bbs = _bbs; - createBoardMessagePath = _createBoardMessagePath; - showBoardMessagePath = _showBoardMessagePath; - createChildPath = _createChildMessagePath; - editMessagePath = _editMessagePath; - } - - public void doGet(HttpServletRequest _req, HttpServletResponse _res) { - String bname = _req.getParameter(PARAM_BOARD_NAME); - String path = _req.getParameter(PARAM_NODE_PATH); - String childNum = _req.getParameter(PARAM_CHILDNUM); - boolean moveSuccess = true; - if (childNum != null) { - String move = _req.getParameter(MOVE); - moveSuccess = bbs.childMove(bname, path, childNum, move); - } - try { - if (moveSuccess) - printBoard(bname, path, _res.getWriter()); - else { - PrintWriter pw = _res.getWriter(); - pw.write(""); - pw.flush(); - } - } catch (Exception _e) { - _res.setStatus(500); - } - - } - - private void printBoard(String bname, String path, PrintWriter _pw) throws Exception { - _pw.write("\n"); - _pw.write("

TreeName = " + bbs.sanitize(bname) + "
Node Path = " + path + "

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

add new Child

\n"); - _pw.write("

\n"); - _pw.write("

ChildName

\n"); - _pw.write("

\n"); - _pw.write("

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

Children

\n"); - Iterator children = bbs.getChildren(bname, path); - for (int childCount = 0; children.hasNext(); childCount++) { - TreeNode child = children.next(); - TreeNodeAttributes attribute = child.getAttributes(); - String childName = attribute.getString("NodeName"); - _pw.write("
"); - } - - - _pw.write("

put attribute

\n"); - _pw.write("

\n"); - _pw.write("

Key

\n"); - _pw.write("

attribute

\n"); - _pw.write("

\n"); - _pw.write("

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

Attribute

\n"); - GetAttributeImp attribute = bbs.getAttribute(bname, path); - Iterator keys = attribute.getKeys(); - for (; keys.hasNext(); ) { - String key = keys.next(); - String mesage = attribute.getMessage(key); - _pw.write("

" + key + " = " + mesage + "

"); - } - - _pw.write(""); - _pw.flush(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardsServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardsServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.browsing; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class ShowBoardsServlet extends HttpServlet -{ - /** - * - */ - private static final long serialVersionUID = 1L; - private final BrowsingBulletinBoard bbs; - private final String createBoardPath; - private final String showBoardMessagePath; - private final String findNodePath; - public ShowBoardsServlet(BrowsingBulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath, String _findNodePath) - { - bbs = _bbs; - findNodePath = _findNodePath; - 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("


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

list of boards

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

"+ bbs.sanitize(board) + " " + - ""+ "find" - + "

"); - } - - _pw.write(""); - _pw.flush(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/App.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/App.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import me.prettyprint.hector.api.HConsistencyLevel; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.servlet.ServletHandler; -import org.eclipse.jetty.servlet.ServletHolder; - -import javax.servlet.Servlet; - - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) throws Exception - { - BulletinBoard cassaBBS = null; - if(args.length == 0){ - cassaBBS = new JungleBulletinBoard(); - }else{ - HConsistencyLevel cLevel = HConsistencyLevel.QUORUM; - int rep_factor = 1; - int i=0; - while(i getBoards(); - public void createBoards(String _name, String _author, String _initMessage, String _editKey); - public void createBoardMessage(String _board, String _author, String _message, String _editKey); - public void editMessage(String _board, String _uuid, String _author, String _message, String _editKey); - public String sanitize(String str); - GetAttributeImp getAttribute(String _bname, String _nodeNum, String revisionStr); -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CassandraBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CassandraBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel; -import me.prettyprint.cassandra.serializers.StringSerializer; -import me.prettyprint.cassandra.serializers.UUIDSerializer; -import me.prettyprint.cassandra.service.template.SuperCfResult; -import me.prettyprint.cassandra.service.template.SuperCfUpdater; -import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate; -import me.prettyprint.cassandra.utils.TimeUUIDUtils; -import me.prettyprint.hector.api.Cluster; -import me.prettyprint.hector.api.HConsistencyLevel; -import me.prettyprint.hector.api.Keyspace; -import me.prettyprint.hector.api.beans.HSuperColumn; -import me.prettyprint.hector.api.beans.OrderedSuperRows; -import me.prettyprint.hector.api.beans.SuperRow; -import me.prettyprint.hector.api.beans.SuperSlice; -import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition; -import me.prettyprint.hector.api.ddl.ColumnType; -import me.prettyprint.hector.api.ddl.ComparatorType; -import me.prettyprint.hector.api.ddl.KeyspaceDefinition; -import me.prettyprint.hector.api.factory.HFactory; -import me.prettyprint.hector.api.query.QueryResult; -import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; -import me.prettyprint.hector.api.query.SuperSliceQuery; -import org.apache.cassandra.locator.SimpleStrategy; - -import java.util.*; - -public class CassandraBulletinBoard implements BulletinBoard -{ - private final String address; - private final String clusterName; - private final Cluster cluster; - private final String keyspace; - private final ConfigurableConsistencyLevel configurableConsistencyLevel = new ConfigurableConsistencyLevel(); - - private static final String COLUMN_FAMILY_BOARD = "boards"; - private final int REP_FACTOR; - - public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel, int rep_factor ) - { - address = _address; - clusterName = _clusterName; - keyspace = _keyspaceName; - cluster = HFactory.getOrCreateCluster(clusterName,address); - Map clmap = new HashMap(); - clmap.put(COLUMN_FAMILY_BOARD, cLevel); - configurableConsistencyLevel.setReadCfConsistencyLevels(clmap); - configurableConsistencyLevel.setWriteCfConsistencyLevels(clmap); - REP_FACTOR = rep_factor; - initialize(); - } - - public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel) - { - this(_clusterName, _address, _keyspaceName, cLevel, 1); - } - - - - private void initialize() - { - if(cluster.describeKeyspace(keyspace) == null){ - KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace, - SimpleStrategy.class.getName(),REP_FACTOR,Collections. emptyList()); - cluster.addKeyspace(keyspaceDefinition,false); - ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE); - columnFamilyDefinition.setColumnType(ColumnType.SUPER); - cluster.addColumnFamily(columnFamilyDefinition); - } - } - - public Iterable getBoards() - { - Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); - RangeSuperSlicesQuery query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(), - UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get()); - query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0); - - QueryResult> result = query.execute(); - OrderedSuperRows rows = result.get(); - List> list = rows.getList(); - - IterableConverter.Converter> converter - = new IterableConverter.Converter>(){ - public String conv(SuperRow _b) { - return _b.getKey(); - } - }; - - return new IterableConverter>(list,converter); - } - - private static final String COLUMN_MESSAGE_AUTHOR = "author"; - private static final String COLUMN_MESSAGE_BODY = "message"; - private static final String COLUMN_MESSAGE_EDIT_KEY = "edit"; - - public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey) - { - Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); - ThriftSuperCfTemplate template = - new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), - UUIDSerializer.get(),StringSerializer.get()); - - SuperCfUpdater updater = template.createUpdater(_name,_time); - updater.setString(COLUMN_MESSAGE_AUTHOR,_author); - updater.setString(COLUMN_MESSAGE_BODY,_message); - updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey); - - template.update(updater); - } - - public void createBoards(String _name,String _author,String _initMessage,String _editKey) - { - UUID time = TimeUUIDUtils.getTimeUUID(0); - createBoardMessage(time,_name,_author,_initMessage,_editKey); - } - - public Iterable getMessages(String _boardName) - { - Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); - SuperSliceQuery query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get()); - - UUID start = TimeUUIDUtils.getTimeUUID(0); - query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100); - - QueryResult> result = query.execute(); - SuperSlice ss = result.get(); - List> list = ss.getSuperColumns(); - - IterableConverter.Converter> converter = - new IterableConverter.Converter>(){ - public BoardMessage conv(HSuperColumn _b){ - UUID uuid = _b.getName(); - String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue(); - String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue(); - BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString()); - return bm; - } - }; - - - return new IterableConverter>(list,converter); - } - - private static class BoardMessageImpl implements BoardMessage - { - private final String author; - private final String message; - private final String uuid; - - public BoardMessageImpl(String _author,String _message,String _uuid) - { - author = _author; - message = _message; - uuid = _uuid; - } - - public String getAuthor() - { - return author; - } - - public String getMessage() - { - return message; - } - - public String getUUID() - { - return uuid; - } - } - - public void createBoardMessage(String _board, String _author, String _message,String _editKey) - { - UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); - createBoardMessage(time,_board,_author,_message,_editKey); - } - - public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey) - { - Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); - UUID time = UUID.fromString(_uuid); - ThriftSuperCfTemplate template = - new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), - UUIDSerializer.get(),StringSerializer.get()); - - SuperCfResult result = template.querySuperColumn(_board,time); - String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY); - if(!editKey.equals(editKey)){ - return; - } - - SuperCfUpdater updater = template.createUpdater(_board,time); - updater.setString(COLUMN_MESSAGE_AUTHOR,_author); - updater.setString(COLUMN_MESSAGE_BODY,_message); - updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey); - - template.update(updater); - } - - 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; - } - - public GetAttributeImp getAttribute(String _bname, String _nodeNum, String revisionStr) { - return null; // 未実装 使うときに実装する - } - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CreateBoardMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CreateBoardMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class CreateBoardMessageServlet extends HttpServlet -{ - private final BulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_BOARD_AUTHOR = "author"; - private static final String PARAM_BOARD_MESSAGE= "msg"; - private static final String PARAM_BOARD_EDITKEY = "key"; - - private static final long serialVersionUID = 1L; - - public CreateBoardMessageServlet(BulletinBoard _bbs) - { - bbs = _bbs; - } - - @Override - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = _req.getParameter(PARAM_BOARD_NAME); - String author = _req.getParameter(PARAM_BOARD_AUTHOR); - String msg = _req.getParameter(PARAM_BOARD_MESSAGE); - String key = _req.getParameter(PARAM_BOARD_EDITKEY); - - try{ - bbs.createBoardMessage(boardName,author,msg,key); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CreateBoardServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CreateBoardServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import org.apache.commons.lang.StringEscapeUtils; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class CreateBoardServlet extends HttpServlet -{ - private final BulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_BOARD_AUTHOR = "author"; - private static final String PARAM_BOARD_INITMESSAGE= "msg"; - private static final String PARAM_BOARD_EDITKEY = "key"; - - private static final long serialVersionUID = 1L; - - public CreateBoardServlet(BulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); - String author = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_AUTHOR)); - String msg = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_INITMESSAGE)); - String key = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_EDITKEY)); - - try{ - bbs.createBoards(boardName,author,msg,key); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/EditMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/EditMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class EditMessageServlet extends HttpServlet -{ - private final BulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_BOARD_MSGID = "uuid"; - private static final String PARAM_BOARD_AUTHOR = "author"; - private static final String PARAM_BOARD_MESSAGE= "msg"; - private static final String PARAM_BOARD_EDITKEY = "key"; - - private static final long serialVersionUID = 1L; - - public EditMessageServlet(BulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter(PARAM_BOARD_NAME); - String uuid = _req.getParameter(PARAM_BOARD_MSGID); - System.out.println("write"); - - try{ - PrintWriter pw = _res.getWriter(); - pw.write("

edit message

"); - pw.write("
Author : " + - "" + - "\n"); - pw.write("

Message

\n"); - pw.write("

\n"); - pw.write(""); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } - - public void doPost(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = _req.getParameter(PARAM_BOARD_NAME); - String author = _req.getParameter(PARAM_BOARD_AUTHOR); - String msg = _req.getParameter(PARAM_BOARD_MESSAGE); - String key = _req.getParameter(PARAM_BOARD_EDITKEY); - String uuid = _req.getParameter(PARAM_BOARD_MSGID); - - try{ - bbs.editMessage(boardName, uuid, author, msg, key); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/EditMessageUseGetServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/EditMessageUseGetServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class EditMessageUseGetServlet extends HttpServlet{ - private final BulletinBoard bbs; - private static final String PARAM_BOARD_NAME = "bname"; - private static final String PARAM_BOARD_MSGID = "uuid"; - private static final String PARAM_BOARD_AUTHOR = "author"; - private static final String PARAM_BOARD_MESSAGE= "msg"; - private static final String PARAM_BOARD_EDITKEY = "key"; - - private static final long serialVersionUID = 1L; - - public EditMessageUseGetServlet(BulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - String boardName = _req.getParameter(PARAM_BOARD_NAME); - String author = _req.getParameter(PARAM_BOARD_AUTHOR); - String msg = _req.getParameter(PARAM_BOARD_MESSAGE); - String key = _req.getParameter(PARAM_BOARD_EDITKEY); - String uuid = _req.getParameter(PARAM_BOARD_MSGID); - - try{ - bbs.editMessage(boardName, uuid, author, msg, key); - PrintWriter pw = _res.getWriter(); - pw.write("successfully written"); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/GetAttributeImp.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/GetAttributeImp.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - - -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; - -import java.util.Iterator; - -public class GetAttributeImp { - private final TreeNode node; - - public GetAttributeImp(TreeNode _node) { - node = _node; - } - - public String getMessage(String key) { - return node.getAttributes().getString(key); - } - - public Iterator getKeys() { - return node.getAttributes().getKeys(); - } - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/HectorSample.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/HectorSample.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import me.prettyprint.cassandra.serializers.StringSerializer; -import me.prettyprint.cassandra.serializers.UUIDSerializer; -import me.prettyprint.cassandra.service.template.SuperCfUpdater; -import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate; -import me.prettyprint.cassandra.utils.TimeUUIDUtils; -import me.prettyprint.hector.api.Cluster; -import me.prettyprint.hector.api.Keyspace; -import me.prettyprint.hector.api.beans.*; -import me.prettyprint.hector.api.factory.HFactory; -import me.prettyprint.hector.api.query.QueryResult; -import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; -import me.prettyprint.hector.api.query.SuperSliceQuery; - -import java.util.List; -import java.util.UUID; - -public class HectorSample -{ - public static void main(String _args[]) - { - Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160"); - - Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster); - /* - ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE); - newCF.setColumnType(ColumnType.SUPER); - myCluster.addColumnFamily(newCF); - */ - - ThriftSuperCfTemplate template = - new ThriftSuperCfTemplate(ksp,"boards",StringSerializer.get(), - UUIDSerializer.get(),StringSerializer.get()); - UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); - SuperCfUpdater updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0)); - updater.setString("name","peter"); - updater.setString("message",time.toString()); - - template.update(updater); - - UUID start = TimeUUIDUtils.getTimeUUID(0); - - SuperSliceQuery sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get()); - sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100); - - QueryResult> results = sq.execute(); - - SuperSlice ss = results.get(); - List> list = ss.getSuperColumns(); - for(HSuperColumn sc : list){ - HColumn sub = sc.getSubColumnByName("name"); - System.out.println(sub.getValue()); - sub = sc.getSubColumnByName("message"); - System.out.println(sub.getValue()); - } - - RangeSuperSlicesQuery rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(), - UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get()); - rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc"); - - QueryResult> rsqResult = rsq.execute(); - OrderedSuperRows rows = rsqResult.get(); - for(SuperRow row : rows.getList()){ - System.out.println(row.getKey()); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/IterableConverter.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/IterableConverter.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import java.util.Iterator; - -public class IterableConverter implements Iterable -{ - private final Iterable iterable; - private final Converter converter; - - public IterableConverter(Iterable _iterable,Converter _converter) - { - iterable = _iterable; - converter = _converter; - } - - public Iterator iterator() - { - return new IteratorConverter(iterable.iterator(),converter); - } - - private static final class IteratorConverter implements Iterator - { - private final Iterator iterator; - private final Converter converter; - - public IteratorConverter(Iterator _iterator,Converter _converter) - { - iterator = _iterator; - converter = _converter; - } - - public boolean hasNext() - { - return iterator.hasNext(); - } - - public A next() - { - return converter.conv(iterator.next()); - } - - public void remove() - { - iterator.remove(); - } - } - - public static interface Converter - { - public A conv(B _b); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/JungleBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/JungleBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - - -import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; -import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; - -import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicInteger; - -public class JungleBulletinBoard implements - BulletinBoard { - private final Jungle jungle; - - public JungleBulletinBoard() { - jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor( - new DefaultTraverser())); - jungle.createNewTree("boards"); - } - - 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"); - return new String(e.array()); - } - }; - - return new IterableConverter(chs, converter); - } - - public void createBoards(final String _name, final String _author, - final String _initMessage, final String _editKey) { - 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(); - Either result = editor.success(); - if (result.isA()) { - throw new IllegalStateException(); - } - - tree = jungle.getTreeByName(_name); - editor = tree.getTreeEditor(); - editor = editor.putAttribute(root,"author", ByteBuffer.wrap(_author.getBytes())).b(); - editor = editor.putAttribute(root,"key", ByteBuffer.wrap(_editKey.getBytes())).b(); - either = editor.putAttribute(root,"mes", ByteBuffer.wrap(_initMessage.getBytes())); - - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - editor.success(); - } - - public void createBoardMessage(final String _board, final String _author, - final String _message, final String _editKey) { - JungleTree tree = jungle.getTreeByName(_board); - if (tree == null) { - throw new IllegalStateException(); - } - - JungleTreeEditor editor; - do { - TreeNode node = tree.getRootNode(); - int size = node.getChildren().size(); - DefaultNodePath path = new DefaultNodePath(); - - editor = tree.getTreeEditor(); - Either either = editor.addNewChildAt(path, - size); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - editor = editor.putAttribute(path.add(size),"author", ByteBuffer.wrap(_author.getBytes())).b(); - editor = editor.putAttribute(path.add(size),"key", ByteBuffer.wrap(_editKey.getBytes())).b(); - either = editor.putAttribute(path.add(size),"mes", ByteBuffer.wrap(_message.getBytes())); - - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - }while (editor.success().isA()); - } - - public void editMessage(String _board, String _uuid, final String _author, - final String _message, final String _editKey) { - JungleTreeEditor editor = null; - do { - DefaultNodePath path = new DefaultNodePath(); - path = path.add(Integer.parseInt(_uuid)); - - JungleTree tree = jungle.getTreeByName(_board); - editor = tree.getTreeEditor(); - - editor = editor.putAttribute(path,"author", ByteBuffer.wrap(_author.getBytes())).b(); - editor = editor.putAttribute(path,"key", ByteBuffer.wrap(_editKey.getBytes())).b(); - Either either = editor.putAttribute(path,"mes", ByteBuffer.wrap(_message.getBytes())); - - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - }while (editor.success().isA()); - } - - public Iterable getMessages(String _boardName) { - 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); - } - - 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; - } - - public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) { - Long revision = Long.parseLong(revisionStr); - DefaultNodePath path = createNodePath(nodePath); - JungleTree tree = jungle.getTreeByName(_bname); - JungleTree oldTree = tree.getOldTree(revision).b(); - Either either = tree.getNodeOfPath(path); - if (either.isA()) - return new GetAttributeImp(new DefaultTreeNode()); - TreeNode node = either.b(); - return new GetAttributeImp(node); - } - - private DefaultNodePath createNodePath(String nodePath) { - DefaultNodePath path = new DefaultNodePath(); - try { - for (int count = 0; nodePath.substring(count, count + 1) != null; count++) { - if (!nodePath.substring(count, count + 1).equals("/")) - path = path.add(Integer.parseInt(nodePath.substring(count, count + 1))); - } - } catch (Exception _e) { - } - return path; - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/ShowBoardMessageServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/ShowBoardMessageServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; -import java.util.Iterator; - -public class ShowBoardMessageServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 1L; - private final BulletinBoard bbs; - private final String createBoardMessagePath; - - private static final String PARAM_BOARD_NAME = "bname"; - - public ShowBoardMessageServlet(BulletinBoard _bbs, String _createBoardMessagePath, String _editMessagePath) { - bbs = _bbs; - createBoardMessagePath = _createBoardMessagePath; - } - - 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("

" + bbs.sanitize(_bname) + "

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

\n"); - _pw.write("

Message

\n"); - _pw.write("

\n"); - GetAttributeImp attribute = bbs.getAttribute(_bname, "[-1]", "-1"); - Iterator keys = attribute.getKeys(); - - do { - String key = keys.next(); - String mesage = attribute.getMessage(key); - _pw.write("

" + key + " = " + mesage + "

\n"); - } while (keys.hasNext()); - - _pw.write(""); - _pw.flush(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/ShowBoardsServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/ShowBoardsServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.local; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - -public class ShowBoardsServlet extends HttpServlet -{ - /** - * - */ - private static final long serialVersionUID = 1L; - private final BulletinBoard bbs; - private final String createBoardPath; - private final String showBoardMessagePath; - - public ShowBoardsServlet(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("
"); - } - - _pw.write(""); - _pw.flush(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/App.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/App.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,75 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import me.prettyprint.hector.api.HConsistencyLevel; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; + +import javax.servlet.Servlet; + + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) throws Exception + { + BulletinBoard cassaBBS = null; + if(args.length == 0){ + cassaBBS = new JungleBulletinBoard(); + }else{ + HConsistencyLevel cLevel = HConsistencyLevel.QUORUM; + int rep_factor = 1; + int i=0; + while(i getBoards(); + public void createBoards(String _name, String _author, String _initMessage, String _editKey); + public void createBoardMessage(String _board, String _author, String _message, String _editKey); + public void editMessage(String _board, String _uuid, String _author, String _message, String _editKey); + public String sanitize(String str); + GetAttributeImp getAttribute(String _bname, String _nodeNum, String revisionStr); +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CassandraBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CassandraBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,219 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import me.prettyprint.cassandra.model.ConfigurableConsistencyLevel; +import me.prettyprint.cassandra.serializers.StringSerializer; +import me.prettyprint.cassandra.serializers.UUIDSerializer; +import me.prettyprint.cassandra.service.template.SuperCfResult; +import me.prettyprint.cassandra.service.template.SuperCfUpdater; +import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate; +import me.prettyprint.cassandra.utils.TimeUUIDUtils; +import me.prettyprint.hector.api.Cluster; +import me.prettyprint.hector.api.HConsistencyLevel; +import me.prettyprint.hector.api.Keyspace; +import me.prettyprint.hector.api.beans.HSuperColumn; +import me.prettyprint.hector.api.beans.OrderedSuperRows; +import me.prettyprint.hector.api.beans.SuperRow; +import me.prettyprint.hector.api.beans.SuperSlice; +import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition; +import me.prettyprint.hector.api.ddl.ColumnType; +import me.prettyprint.hector.api.ddl.ComparatorType; +import me.prettyprint.hector.api.ddl.KeyspaceDefinition; +import me.prettyprint.hector.api.factory.HFactory; +import me.prettyprint.hector.api.query.QueryResult; +import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; +import me.prettyprint.hector.api.query.SuperSliceQuery; +import org.apache.cassandra.locator.SimpleStrategy; + +import java.util.*; + +public class CassandraBulletinBoard implements BulletinBoard +{ + private final String address; + private final String clusterName; + private final Cluster cluster; + private final String keyspace; + private final ConfigurableConsistencyLevel configurableConsistencyLevel = new ConfigurableConsistencyLevel(); + + private static final String COLUMN_FAMILY_BOARD = "boards"; + private final int REP_FACTOR; + + public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel, int rep_factor ) + { + address = _address; + clusterName = _clusterName; + keyspace = _keyspaceName; + cluster = HFactory.getOrCreateCluster(clusterName,address); + Map clmap = new HashMap(); + clmap.put(COLUMN_FAMILY_BOARD, cLevel); + configurableConsistencyLevel.setReadCfConsistencyLevels(clmap); + configurableConsistencyLevel.setWriteCfConsistencyLevels(clmap); + REP_FACTOR = rep_factor; + initialize(); + } + + public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel) + { + this(_clusterName, _address, _keyspaceName, cLevel, 1); + } + + + + private void initialize() + { + if(cluster.describeKeyspace(keyspace) == null){ + KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace, + SimpleStrategy.class.getName(),REP_FACTOR,Collections. emptyList()); + cluster.addKeyspace(keyspaceDefinition,false); + ColumnFamilyDefinition columnFamilyDefinition = HFactory.createColumnFamilyDefinition(keyspace,COLUMN_FAMILY_BOARD,ComparatorType.UUIDTYPE); + columnFamilyDefinition.setColumnType(ColumnType.SUPER); + cluster.addColumnFamily(columnFamilyDefinition); + } + } + + public Iterable getBoards() + { + Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); + RangeSuperSlicesQuery query = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(), + UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get()); + query.setColumnFamily(COLUMN_FAMILY_BOARD).setKeys(null,null).setRange(null,null,false,0); + + QueryResult> result = query.execute(); + OrderedSuperRows rows = result.get(); + List> list = rows.getList(); + + IterableConverter.Converter> converter + = new IterableConverter.Converter>(){ + public String conv(SuperRow _b) { + return _b.getKey(); + } + }; + + return new IterableConverter>(list,converter); + } + + private static final String COLUMN_MESSAGE_AUTHOR = "author"; + private static final String COLUMN_MESSAGE_BODY = "message"; + private static final String COLUMN_MESSAGE_EDIT_KEY = "edit"; + + public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey) + { + Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); + ThriftSuperCfTemplate template = + new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), + UUIDSerializer.get(),StringSerializer.get()); + + SuperCfUpdater updater = template.createUpdater(_name,_time); + updater.setString(COLUMN_MESSAGE_AUTHOR,_author); + updater.setString(COLUMN_MESSAGE_BODY,_message); + updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey); + + template.update(updater); + } + + public void createBoards(String _name,String _author,String _initMessage,String _editKey) + { + UUID time = TimeUUIDUtils.getTimeUUID(0); + createBoardMessage(time,_name,_author,_initMessage,_editKey); + } + + public Iterable getMessages(String _boardName) + { + Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); + SuperSliceQuery query = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get()); + + UUID start = TimeUUIDUtils.getTimeUUID(0); + query.setKey(_boardName).setColumnFamily(COLUMN_FAMILY_BOARD).setRange(start,null,false,100); + + QueryResult> result = query.execute(); + SuperSlice ss = result.get(); + List> list = ss.getSuperColumns(); + + IterableConverter.Converter> converter = + new IterableConverter.Converter>(){ + public BoardMessage conv(HSuperColumn _b){ + UUID uuid = _b.getName(); + String author = _b.getSubColumnByName(COLUMN_MESSAGE_AUTHOR).getValue(); + String message = _b.getSubColumnByName(COLUMN_MESSAGE_BODY).getValue(); + BoardMessageImpl bm = new BoardMessageImpl(author,message,uuid.toString()); + return bm; + } + }; + + + return new IterableConverter>(list,converter); + } + + private static class BoardMessageImpl implements BoardMessage + { + private final String author; + private final String message; + private final String uuid; + + public BoardMessageImpl(String _author,String _message,String _uuid) + { + author = _author; + message = _message; + uuid = _uuid; + } + + public String getAuthor() + { + return author; + } + + public String getMessage() + { + return message; + } + + public String getUUID() + { + return uuid; + } + } + + public void createBoardMessage(String _board, String _author, String _message,String _editKey) + { + UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); + createBoardMessage(time,_board,_author,_message,_editKey); + } + + public void editMessage(String _board,String _uuid,String _author,String _message,String _editKey) + { + Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); + UUID time = UUID.fromString(_uuid); + ThriftSuperCfTemplate template = + new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), + UUIDSerializer.get(),StringSerializer.get()); + + SuperCfResult result = template.querySuperColumn(_board,time); + String editKey = result.getString(COLUMN_MESSAGE_EDIT_KEY); + if(!editKey.equals(editKey)){ + return; + } + + SuperCfUpdater updater = template.createUpdater(_board,time); + updater.setString(COLUMN_MESSAGE_AUTHOR,_author); + updater.setString(COLUMN_MESSAGE_BODY,_message); + updater.setString(COLUMN_MESSAGE_EDIT_KEY,_editKey); + + template.update(updater); + } + + 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; + } + + public GetAttributeImp getAttribute(String _bname, String _nodeNum, String revisionStr) { + return null; // 未実装 使うときに実装する + } + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CreateBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CreateBoardMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,39 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class CreateBoardMessageServlet extends HttpServlet +{ + private final BulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_BOARD_AUTHOR = "author"; + private static final String PARAM_BOARD_MESSAGE= "msg"; + private static final String PARAM_BOARD_EDITKEY = "key"; + + private static final long serialVersionUID = 1L; + + public CreateBoardMessageServlet(BulletinBoard _bbs) + { + bbs = _bbs; + } + + @Override + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = _req.getParameter(PARAM_BOARD_NAME); + String author = _req.getParameter(PARAM_BOARD_AUTHOR); + String msg = _req.getParameter(PARAM_BOARD_MESSAGE); + String key = _req.getParameter(PARAM_BOARD_EDITKEY); + + try{ + bbs.createBoardMessage(boardName,author,msg,key); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CreateBoardServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/CreateBoardServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,40 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import org.apache.commons.lang.StringEscapeUtils; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class CreateBoardServlet extends HttpServlet +{ + private final BulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_BOARD_AUTHOR = "author"; + private static final String PARAM_BOARD_INITMESSAGE= "msg"; + private static final String PARAM_BOARD_EDITKEY = "key"; + + private static final long serialVersionUID = 1L; + + public CreateBoardServlet(BulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); + String author = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_AUTHOR)); + String msg = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_INITMESSAGE)); + String key = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_EDITKEY)); + + try{ + bbs.createBoards(boardName,author,msg,key); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/EditMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/EditMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,63 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class EditMessageServlet extends HttpServlet +{ + private final BulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_BOARD_MSGID = "uuid"; + private static final String PARAM_BOARD_AUTHOR = "author"; + private static final String PARAM_BOARD_MESSAGE= "msg"; + private static final String PARAM_BOARD_EDITKEY = "key"; + + private static final long serialVersionUID = 1L; + + public EditMessageServlet(BulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + String bname = _req.getParameter(PARAM_BOARD_NAME); + String uuid = _req.getParameter(PARAM_BOARD_MSGID); + System.out.println("write"); + + try{ + PrintWriter pw = _res.getWriter(); + pw.write("

edit message

"); + pw.write("Author : " + + "" + + "\n"); + pw.write("

Message

\n"); + pw.write("

\n"); + pw.write(""); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = _req.getParameter(PARAM_BOARD_NAME); + String author = _req.getParameter(PARAM_BOARD_AUTHOR); + String msg = _req.getParameter(PARAM_BOARD_MESSAGE); + String key = _req.getParameter(PARAM_BOARD_EDITKEY); + String uuid = _req.getParameter(PARAM_BOARD_MSGID); + + try{ + bbs.editMessage(boardName, uuid, author, msg, key); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/EditMessageUseGetServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/EditMessageUseGetServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,40 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class EditMessageUseGetServlet extends HttpServlet{ + private final BulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_BOARD_MSGID = "uuid"; + private static final String PARAM_BOARD_AUTHOR = "author"; + private static final String PARAM_BOARD_MESSAGE= "msg"; + private static final String PARAM_BOARD_EDITKEY = "key"; + + private static final long serialVersionUID = 1L; + + public EditMessageUseGetServlet(BulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = _req.getParameter(PARAM_BOARD_NAME); + String author = _req.getParameter(PARAM_BOARD_AUTHOR); + String msg = _req.getParameter(PARAM_BOARD_MESSAGE); + String key = _req.getParameter(PARAM_BOARD_EDITKEY); + String uuid = _req.getParameter(PARAM_BOARD_MSGID); + + try{ + bbs.editMessage(boardName, uuid, author, msg, key); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/FindNodeServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/FindNodeServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,69 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + + +import jp.ac.u_ryukyu.ie.cr.bbs.local.browsing.BrowsingBulletinBoard; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Iterator; + +public class FindNodeServlet extends HttpServlet +{ + private final BrowsingBulletinBoard bbs; + private final String showBoardMessagePath ; + private static final String PARAM_BOARD_NAME = "bname"; + + private static final long serialVersionUID = 1L; + + public FindNodeServlet(BrowsingBulletinBoard _bbs, String _showBoardMessagePath) + { + showBoardMessagePath = _showBoardMessagePath; + bbs = _bbs; + } + + public void doGet(HttpServletRequest _req, HttpServletResponse _res) + { + String bname = _req.getParameter(PARAM_BOARD_NAME); + System.out.println("write"); + + try{ + PrintWriter pw = _res.getWriter(); + pw.write("

find Node

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

key

\n"); + pw.write("

value

\n"); + pw.write("

\n"); + pw.write(""); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String bname = _req.getParameter("bname"); + String key = _req.getParameter("key"); + String value = _req.getParameter("value"); + + try{ + Iterator iterator = bbs.findNode(bname, key, value); + PrintWriter pw = _res.getWriter(); + pw.write("

result

\n"); + while (iterator.hasNext()) { + TreeNode node = iterator.next(); + String childName = node.getAttributes().getString("NodeName"); + String path = bbs.getNodePath(bname, node).replace("<","").replace(">",""); + pw.write("

" +childName + " : path = <" + path + ">

"); + } + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/GetAttributeImp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/GetAttributeImp.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,23 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + + +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; + +import java.util.Iterator; + +public class GetAttributeImp { + private final TreeNode node; + + public GetAttributeImp(TreeNode _node) { + node = _node; + } + + public String getMessage(String key) { + return node.getAttributes().getString(key); + } + + public Iterator getKeys() { + return node.getAttributes().getKeys(); + } + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/HectorSample.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/HectorSample.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,68 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import me.prettyprint.cassandra.serializers.StringSerializer; +import me.prettyprint.cassandra.serializers.UUIDSerializer; +import me.prettyprint.cassandra.service.template.SuperCfUpdater; +import me.prettyprint.cassandra.service.template.ThriftSuperCfTemplate; +import me.prettyprint.cassandra.utils.TimeUUIDUtils; +import me.prettyprint.hector.api.Cluster; +import me.prettyprint.hector.api.Keyspace; +import me.prettyprint.hector.api.beans.*; +import me.prettyprint.hector.api.factory.HFactory; +import me.prettyprint.hector.api.query.QueryResult; +import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; +import me.prettyprint.hector.api.query.SuperSliceQuery; + +import java.util.List; +import java.util.UUID; + +public class HectorSample +{ + public static void main(String _args[]) + { + Cluster myCluster = HFactory.getOrCreateCluster("test-cluster","localhost:9160"); + + Keyspace ksp = HFactory.createKeyspace("cassaBBS",myCluster); + /* + ColumnFamilyDefinition newCF = HFactory.createColumnFamilyDefinition("DEMO","ccc",ComparatorType.UUIDTYPE); + newCF.setColumnType(ColumnType.SUPER); + myCluster.addColumnFamily(newCF); + */ + + ThriftSuperCfTemplate template = + new ThriftSuperCfTemplate(ksp,"boards",StringSerializer.get(), + UUIDSerializer.get(),StringSerializer.get()); + UUID time = TimeUUIDUtils.getUniqueTimeUUIDinMillis(); + SuperCfUpdater updater = template.createUpdater("board1",TimeUUIDUtils.getTimeUUID(0)); + updater.setString("name","peter"); + updater.setString("message",time.toString()); + + template.update(updater); + + UUID start = TimeUUIDUtils.getTimeUUID(0); + + SuperSliceQuery sq = HFactory.createSuperSliceQuery(ksp, StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get(), StringSerializer.get()); + sq.setKey("board1").setColumnFamily("ccc").setRange(start,null,false,100); + + QueryResult> results = sq.execute(); + + SuperSlice ss = results.get(); + List> list = ss.getSuperColumns(); + for(HSuperColumn sc : list){ + HColumn sub = sc.getSubColumnByName("name"); + System.out.println(sub.getValue()); + sub = sc.getSubColumnByName("message"); + System.out.println(sub.getValue()); + } + + RangeSuperSlicesQuery rsq = HFactory.createRangeSuperSlicesQuery(ksp,StringSerializer.get(), + UUIDSerializer.get(),StringSerializer.get(),StringSerializer.get()); + rsq.setKeys(null,null).setRange(null,null,false,0).setColumnFamily("ccc"); + + QueryResult> rsqResult = rsq.execute(); + OrderedSuperRows rows = rsqResult.get(); + for(SuperRow row : rows.getList()){ + System.out.println(row.getKey()); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/IterableConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/IterableConverter.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,52 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import java.util.Iterator; + +public class IterableConverter implements Iterable +{ + private final Iterable iterable; + private final Converter converter; + + public IterableConverter(Iterable _iterable,Converter _converter) + { + iterable = _iterable; + converter = _converter; + } + + public Iterator iterator() + { + return new IteratorConverter(iterable.iterator(),converter); + } + + private static final class IteratorConverter implements Iterator + { + private final Iterator iterator; + private final Converter converter; + + public IteratorConverter(Iterator _iterator,Converter _converter) + { + iterator = _iterator; + converter = _converter; + } + + public boolean hasNext() + { + return iterator.hasNext(); + } + + public A next() + { + return converter.conv(iterator.next()); + } + + public void remove() + { + iterator.remove(); + } + } + + public static interface Converter + { + public A conv(B _b); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/JungleBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/JungleBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,208 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + + +import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; + +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicInteger; + +public class JungleBulletinBoard implements + BulletinBoard { + private final Jungle jungle; + + public JungleBulletinBoard() { + jungle = new DefaultJungle(null, "hoge"); + jungle.createNewTree("boards"); + } + + 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"); + return new String(e.array()); + } + }; + + return new IterableConverter(chs, converter); + } + + public void createBoards(final String _name, final String _author, + final String _initMessage, final String _editKey) { + if (null == jungle.createNewTree(_name)) { + throw new IllegalStateException(); + } + JungleTree tree = jungle.getTreeByName("boards"); + JungleTreeEditor editor = tree.getJungleTreeEditor(); + 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(); + Either result = editor.success(); + if (result.isA()) { + throw new IllegalStateException(); + } + + tree = jungle.getTreeByName(_name); + editor = tree.getJungleTreeEditor(); + editor = editor.putAttribute(root,"author", ByteBuffer.wrap(_author.getBytes())).b(); + editor = editor.putAttribute(root,"key", ByteBuffer.wrap(_editKey.getBytes())).b(); + either = editor.putAttribute(root,"mes", ByteBuffer.wrap(_initMessage.getBytes())); + + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + editor.success(); + } + + public void createBoardMessage(final String _board, final String _author, + final String _message, final String _editKey) { + JungleTree tree = jungle.getTreeByName(_board); + if (tree == null) { + throw new IllegalStateException(); + } + + JungleTreeEditor editor; + do { + TreeNode node = tree.getRootNode(); + int size = node.getChildren().size(); + DefaultNodePath path = new DefaultNodePath(); + + editor = tree.getJungleTreeEditor(); + Either either = editor.addNewChildAt(path, + size); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + editor = editor.putAttribute(path.add(size),"author", ByteBuffer.wrap(_author.getBytes())).b(); + editor = editor.putAttribute(path.add(size),"key", ByteBuffer.wrap(_editKey.getBytes())).b(); + either = editor.putAttribute(path.add(size),"mes", ByteBuffer.wrap(_message.getBytes())); + + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + }while (editor.success().isA()); + } + + public void editMessage(String _board, String _uuid, final String _author, + final String _message, final String _editKey) { + JungleTreeEditor editor = null; + do { + DefaultNodePath path = new DefaultNodePath(); + path = path.add(Integer.parseInt(_uuid)); + + JungleTree tree = jungle.getTreeByName(_board); + editor = tree.getJungleTreeEditor(); + + editor = editor.putAttribute(path,"author", ByteBuffer.wrap(_author.getBytes())).b(); + editor = editor.putAttribute(path,"key", ByteBuffer.wrap(_editKey.getBytes())).b(); + Either either = editor.putAttribute(path,"mes", ByteBuffer.wrap(_message.getBytes())); + + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + }while (editor.success().isA()); + } + + public Iterable getMessages(String _boardName) { + 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); + } + + 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; + } + + public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) { + Long revision = Long.parseLong(revisionStr); + DefaultNodePath path = createNodePath(nodePath); + JungleTree tree = jungle.getTreeByName(_bname); + JungleTree oldTree = tree.getOldTree(revision).b(); + Either either = tree.getNodeOfPath(path); + if (either.isA()) + return new GetAttributeImp(new DefaultTreeNode()); + TreeNode node = either.b(); + return new GetAttributeImp(node); + } + + private DefaultNodePath createNodePath(String nodePath) { + DefaultNodePath path = new DefaultNodePath(); + String[] nums = nodePath.split(","); + for (String num : nums) { + if (num.equals("-1")) + continue; + path = path.add(Integer.parseInt(num)); + } + return path; + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/ShowBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/ShowBoardMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,56 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Iterator; + +public class ShowBoardMessageServlet extends HttpServlet { + /** + * + */ + private static final long serialVersionUID = 1L; + private final BulletinBoard bbs; + private final String createBoardMessagePath; + + private static final String PARAM_BOARD_NAME = "bname"; + + public ShowBoardMessageServlet(BulletinBoard _bbs, String _createBoardMessagePath, String _editMessagePath) { + bbs = _bbs; + createBoardMessagePath = _createBoardMessagePath; + } + + 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("

" + bbs.sanitize(_bname) + "

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

\n"); + _pw.write("

Message

\n"); + _pw.write("

\n"); + GetAttributeImp attribute = bbs.getAttribute(_bname, "-1,0", "-1"); + + Iterator keys = attribute.getKeys(); + + do { + String key = keys.next(); + String mesage = attribute.getMessage(key); + _pw.write("

" + key + " = " + mesage + "

\n"); + } while (keys.hasNext()); + + _pw.write(""); + _pw.flush(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/ShowBoardsServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/bbs/ShowBoardsServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,55 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.bbs; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class ShowBoardsServlet extends HttpServlet +{ + /** + * + */ + private static final long serialVersionUID = 1L; + private final BulletinBoard bbs; + private final String createBoardPath; + private final String showBoardMessagePath; + + public ShowBoardsServlet(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("
"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/App.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/App.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,52 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.servlet.ServletHolder; + +import javax.servlet.Servlet; + + +/** + * Hello world! + */ +public class App { + + + public static void main(String[] args) throws Exception { + System.out.println("main"); + Jungle jungle = new DefaultJungle(null, "hoge"); + new App().startBBS(args, jungle); + } + + + public void startBBS(String[] args, Jungle jungle) throws Exception { + BrowsingBulletinBoard cassaBBS = new JungleBrowsingBulletinBoard(jungle); + String createBoardMessagePath = "/createBoardMessage"; + String createBoardPath = "/createBoard"; + String editMessagePath = "/editMessage"; + String showBoardMessagePath = "/showBoardMessage"; + String createChildPath = "/createChildMessage"; + String findNodeMessagePath = "/findNode"; + Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); + Servlet createBoard = new CreateBoardServlet(cassaBBS); + Servlet createChild = new CreateChildServlet(cassaBBS); + Servlet editBoardMessage = new EditMessageServlet(cassaBBS); + Servlet index = new ShowBoardsServlet(cassaBBS, createBoardPath, showBoardMessagePath, findNodeMessagePath); + Servlet find = new FindNodeServlet(cassaBBS, showBoardMessagePath); + Servlet board = new ShowBoardMessageServlet(cassaBBS, createBoardMessagePath, createChildPath, editMessagePath, showBoardMessagePath); + Server serv = new Server(8000); + ServletHandler context = new ServletHandler(); + context.addServletWithMapping(new ServletHolder(find), findNodeMessagePath); + context.addServletWithMapping(new ServletHolder(createBoardMessage), createBoardMessagePath); + context.addServletWithMapping(new ServletHolder(createBoard), createBoardPath); + context.addServletWithMapping(new ServletHolder(createChild), createChildPath); + context.addServletWithMapping(new ServletHolder(editBoardMessage), editMessagePath); + context.addServletWithMapping(new ServletHolder(index), "/"); + context.addServletWithMapping(new ServletHolder(board), showBoardMessagePath); + serv.setHandler(context); + serv.start(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/BoardMessage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/BoardMessage.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,8 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +public interface BoardMessage +{ + public String getUUID(); + public String getAuthor(); + public String getMessage(); +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/BrowsingBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/BrowsingBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,21 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + + +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; + +import java.util.Iterator; + +public interface BrowsingBulletinBoard +{ + Iterable getBoards(); + void createBoards(String name); + void createBoardMessage(String bname, String key, String attribute, String pathStr); + void createChild(String bname,String nodeName, String pathStr); + void editMessage(String bname, String key, String attribute, String pathStr); + String sanitize(String str); + GetAttributeImp getAttribute(String bname, String nodePath); + Iterator getChildren(String bname, String nodePath); + Iterator findNode(String bname, String key, String value); + String getNodePath(String bname, TreeNode node); + boolean childMove(String bname, String path, String childNum, String move); +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateBoardMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,39 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class CreateBoardMessageServlet extends HttpServlet +{ + private final BrowsingBulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_NODE_ATTRIBUTE_KEY = "key"; + private static final String PARAM_NODE_ATTRIBUTE= "attribute"; + private static final String PARAM_NODE_PATH = "path"; + + private static final long serialVersionUID = 1L; + + public CreateBoardMessageServlet(BrowsingBulletinBoard _bbs) + { + bbs = _bbs; + } + + @Override + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = _req.getParameter(PARAM_BOARD_NAME); + String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); + String attribute = _req.getParameter(PARAM_NODE_ATTRIBUTE); + String path = _req.getParameter(PARAM_NODE_PATH); + + try{ + bbs.createBoardMessage(boardName,key,attribute,path); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateBoardServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateBoardServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,32 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import org.apache.commons.lang.StringEscapeUtils; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class CreateBoardServlet extends HttpServlet +{ + private final BrowsingBulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final long serialVersionUID = 1L; + + public CreateBoardServlet(BrowsingBulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); + try{ + bbs.createBoards(boardName); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateChildServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/CreateChildServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,41 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import org.apache.commons.lang.StringEscapeUtils; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class CreateChildServlet extends HttpServlet +{ + private final BrowsingBulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_NODE_PATH = "path"; + private static final String PARAM_NODE_NAME = "nodeName"; + + private static final long serialVersionUID = 1L; + + public CreateChildServlet(BrowsingBulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String boardName = StringEscapeUtils.unescapeHtml(_req.getParameter(PARAM_BOARD_NAME)); + String path = _req.getParameter(PARAM_NODE_PATH); + String nodeName = _req.getParameter(PARAM_NODE_NAME); + try{ + PrintWriter pw = _res.getWriter(); + if (!nodeName.equals("")) { + bbs.createChild(boardName, nodeName, path); + pw.write("successfully written"); + } else { + pw.write("faild"); + } + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/EditMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/EditMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,63 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class EditMessageServlet extends HttpServlet +{ + private final BrowsingBulletinBoard bbs; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_NODE_ATTRIBUTE_KEY = "key"; + private static final String PARAM_NODE_PATH = "path"; + private static final String PARAM_NODE_ATTRIBUTE = "attribute"; + + private static final long serialVersionUID = 1L; + + public EditMessageServlet(BrowsingBulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + String bname = _req.getParameter(PARAM_BOARD_NAME); + String path = _req.getParameter(PARAM_NODE_PATH); + String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); + System.out.println("write"); + + try{ + PrintWriter pw = _res.getWriter(); + pw.write("

edit message

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

attribute

\n"); + pw.write("

\n"); + pw.write(""); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } + + public void doPost(HttpServletRequest _req,HttpServletResponse _res) + { + String bname = _req.getParameter(PARAM_BOARD_NAME); + String path = _req.getParameter(PARAM_NODE_PATH); + String key = _req.getParameter(PARAM_NODE_ATTRIBUTE_KEY); + String attribute = _req.getParameter(PARAM_NODE_ATTRIBUTE); + + try{ + bbs.editMessage(bname, key, attribute, path); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/GetAttributeImp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/GetAttributeImp.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,23 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + + +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; + +import java.util.Iterator; + +public class GetAttributeImp { + private final TreeNode node; + + public GetAttributeImp(TreeNode _node) { + node = _node; + } + + public String getMessage(String key) { + return node.getAttributes().getString(key); + } + + public Iterator getKeys() { + return node.getAttributes().getKeys(); + } + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/IterableConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/IterableConverter.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,52 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import java.util.Iterator; + +public class IterableConverter implements Iterable +{ + private final Iterable iterable; + private final Converter converter; + + public IterableConverter(Iterable _iterable,Converter _converter) + { + iterable = _iterable; + converter = _converter; + } + + public Iterator iterator() + { + return new IteratorConverter(iterable.iterator(),converter); + } + + private static final class IteratorConverter implements Iterator + { + private final Iterator iterator; + private final Converter converter; + + public IteratorConverter(Iterator _iterator,Converter _converter) + { + iterator = _iterator; + converter = _converter; + } + + public boolean hasNext() + { + return iterator.hasNext(); + } + + public A next() + { + return converter.conv(iterator.next()); + } + + public void remove() + { + iterator.remove(); + } + } + + public static interface Converter + { + public A conv(B _b); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/JungleBrowsingBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/JungleBrowsingBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,230 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + + +import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.jungle.query.traverser.InterfaceTraverser; +import jp.ac.u_ryukyu.ie.cr.jungle.store.NulIterator; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeChildren; +import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +public class JungleBrowsingBulletinBoard implements + BrowsingBulletinBoard { + private final Jungle jungle; + + public JungleBrowsingBulletinBoard() { + jungle = new DefaultJungle(null, "hoge"); + jungle.createNewTree("boards"); + } + + public JungleBrowsingBulletinBoard(Jungle jungle) { + if (jungle.getTreeByName("boards") == null) + jungle.createNewTree("boards"); + this.jungle = jungle; + } + + 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"); + return new String(e.array()); + } + }; + + return new IterableConverter(chs, converter); + } + + public void createBoards(final String _name) { + createBoards(_name, new DefaultTreeNode()); + } + public void createBoards(final String _name, TreeNode rootNode) { + if (null == jungle.createNewTree(_name, rootNode)) { + throw new IllegalStateException(); + } + JungleTree tree = jungle.getTreeByName("boards"); + JungleTreeEditor editor = tree.getJungleTreeEditor(); + 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(); + Either result = editor.success(); + if (result.isA()) { + throw new IllegalStateException(); + } + + tree = jungle.getTreeByName(_name); + editor = tree.getJungleTreeEditor(); + either = editor.putAttribute(root, "NodeName", ByteBuffer.wrap("root".getBytes())); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + editor.success(); + } + + public void createBoardMessage(final String boardName, final String key, + final String attribute, final String pathStr) { + if (key.equals("") | attribute.equals("")) + return ; + NodePath path = createNodePath(pathStr); + JungleTree tree = jungle.getTreeByName(boardName); + if (tree == null) { + throw new IllegalStateException(); + } + + JungleTreeEditor editor; + do { + editor = tree.getJungleTreeEditor(); + Either either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes())); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + } while (editor.success().isA()); + } + + @Override + public void createChild(String bname, String nodeName, String pathStr) { + NodePath path = createNodePath(pathStr); + JungleTree tree = jungle.getTreeByName(bname); + if (tree == null) { + throw new IllegalStateException(); + } + Either getNodeEither = tree.getNodeOfPath(path); + if (getNodeEither.isA()) + return ; + TreeNode currentNode = getNodeEither.b(); + int childCount = currentNode.getChildren().size(); + + JungleTreeEditor editor; + do { + editor = tree.getJungleTreeEditor(); + Either either = editor.addNewChildAt(path, childCount); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + either = editor.putAttribute(path.add(childCount),"NodeName",ByteBuffer.wrap(nodeName.getBytes())); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + } while (editor.success().isA()); + } + + public void editMessage(String bname, String key, final String attribute, + final String pathStr) { + NodePath path = createNodePath(pathStr); + + JungleTreeEditor editor = null; + + do { + JungleTree tree = jungle.getTreeByName(bname); + editor = tree.getJungleTreeEditor(); + + Either either = editor.putAttribute(path, key, ByteBuffer.wrap(attribute.getBytes())); + + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + } while (editor.success().isA()); + } + + 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; + } + + public GetAttributeImp getAttribute(String _bname, String nodePath) { + + DefaultNodePath path = createNodePath(nodePath); + JungleTree tree = jungle.getTreeByName(_bname); + Either either = tree.getNodeOfPath(path); + if (either.isA()) + return new GetAttributeImp(new DefaultTreeNode()); + TreeNode currentNode = either.b(); + return new GetAttributeImp(currentNode); + } + + @Override + public Iterator getChildren(String bname, String nodePath) { + DefaultNodePath path = createNodePath(nodePath); + JungleTree tree = jungle.getTreeByName(bname); + Either either = tree.getNodeOfPath(path); + if (either.isA()) + return new NulIterator(); + TreeNode currentNode = either.b(); + TreeNodeChildren children = currentNode.getChildren(); + return children.iterator(); + } + + @Override + public Iterator findNode(String bname, String key, String value) { + JungleTree tree = jungle.getTreeByName(bname); + InterfaceTraverser traverser = tree.getTraverser(true); + return traverser.find((TreeNode node) -> { + return true; + },key,value); + } + + @Override + public String getNodePath(String bname, TreeNode node) { + JungleTree tree = jungle.getTreeByName(bname); + NodePath path = tree.getNodePath(node); + return path.toString(); + } + + @Override + public boolean childMove(String bname, String pathString, String childNumString, String move) { + int childNum = Integer.parseInt(childNumString); + JungleTree tree = jungle.getTreeByName(bname); + DefaultNodePath path = createNodePath(pathString); + JungleTreeEditor editor = tree.getJungleTreeEditor(); + editor = editor.moveChild(path,childNum,move).b(); + return editor.success().isB(); + } + + private DefaultNodePath createNodePath(String nodePath) { + DefaultNodePath path = new DefaultNodePath(); + String[] nums = nodePath.split(","); + for (String num : nums) { + if (num.equals("-1")) + continue; + path = path.add(Integer.parseInt(num)); + } + return path; + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/ShowBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/ShowBoardMessageServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,104 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + + +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeAttributes; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Iterator; + +public class ShowBoardMessageServlet extends HttpServlet { + /** + * + */ + private static final long serialVersionUID = 1L; + private final BrowsingBulletinBoard bbs; + private final String createBoardMessagePath; + private final String createChildPath; + private final String showBoardMessagePath; + private final String editMessagePath; + private static final String PARAM_BOARD_NAME = "bname"; + private static final String PARAM_NODE_PATH = "path"; + private static final String PARAM_CHILDNUM = "childNum"; + private static final String MOVE = "move"; + + public ShowBoardMessageServlet(BrowsingBulletinBoard _bbs, String _createBoardMessagePath, String _createChildMessagePath, String _editMessagePath, String _showBoardMessagePath) { + bbs = _bbs; + createBoardMessagePath = _createBoardMessagePath; + showBoardMessagePath = _showBoardMessagePath; + createChildPath = _createChildMessagePath; + editMessagePath = _editMessagePath; + } + + public void doGet(HttpServletRequest _req, HttpServletResponse _res) { + String bname = _req.getParameter(PARAM_BOARD_NAME); + String path = _req.getParameter(PARAM_NODE_PATH); + String childNum = _req.getParameter(PARAM_CHILDNUM); + boolean moveSuccess = true; + if (childNum != null) { + String move = _req.getParameter(MOVE); + moveSuccess = bbs.childMove(bname, path, childNum, move); + } + try { + if (moveSuccess) + printBoard(bname, path, _res.getWriter()); + else { + PrintWriter pw = _res.getWriter(); + pw.write(""); + pw.flush(); + } + } catch (Exception _e) { + _res.setStatus(500); + } + + } + + private void printBoard(String bname, String path, PrintWriter _pw) throws Exception { + _pw.write("\n"); + _pw.write("

TreeName = " + bbs.sanitize(bname) + "
Node Path = " + path + "

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

add new Child

\n"); + _pw.write("

\n"); + _pw.write("

ChildName

\n"); + _pw.write("

\n"); + _pw.write("

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

Children

\n"); + Iterator children = bbs.getChildren(bname, path); + for (int childCount = 0; children.hasNext(); childCount++) { + TreeNode child = children.next(); + TreeNodeAttributes attribute = child.getAttributes(); + String childName = attribute.getString("NodeName"); + _pw.write("
"); + } + + + _pw.write("

put attribute

\n"); + _pw.write("

\n"); + _pw.write("

Key

\n"); + _pw.write("

attribute

\n"); + _pw.write("

\n"); + _pw.write("

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

Attribute

\n"); + GetAttributeImp attribute = bbs.getAttribute(bname, path); + Iterator keys = attribute.getKeys(); + for (; keys.hasNext(); ) { + String key = keys.next(); + String mesage = attribute.getMessage(key); + _pw.write("

" + key + " = " + mesage + "

"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/ShowBoardsServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/browsing/ShowBoardsServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,56 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.local.browsing; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +public class ShowBoardsServlet extends HttpServlet +{ + /** + * + */ + private static final long serialVersionUID = 1L; + private final BrowsingBulletinBoard bbs; + private final String createBoardPath; + private final String showBoardMessagePath; + private final String findNodePath; + public ShowBoardsServlet(BrowsingBulletinBoard _bbs, String _createBoardPath,String _showBoardMessagePath, String _findNodePath) + { + bbs = _bbs; + findNodePath = _findNodePath; + 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("


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

list of boards

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

"+ bbs.sanitize(board) + " " + + ""+ "find" + + "

"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/BoardRenewTime.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/BoardRenewTime.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - -public interface BoardRenewTime { - - public String getboardName(); - public Long getRenewTime(); - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/BulletinBoardJungleManager.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/BulletinBoardJungleManager.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - - -import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; -import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; - -import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicInteger; - -public class BulletinBoardJungleManager { - private static BulletinBoardJungleManager instance = new BulletinBoardJungleManager(); - private Jungle jungle; - private static AtomicInteger requestCounter = new AtomicInteger(0); - - private BulletinBoardJungleManager() { - jungle = new DefaultJungle(null,"default",new DefaultTreeEditor(new DefaultTraverser())); - } - - public static int requestGetAndIncrement() { - return requestCounter.getAndIncrement(); - } - - public static int requestIncrementAndGet() { - return requestCounter.incrementAndGet(); - } - - public static BulletinBoardJungleManager getInstantce() { - return instance; - } - - public static void setJungle(Jungle _j) { - instance.jungle = _j; - } - public static AtomicInteger getRequestCounter() { - return requestCounter; - } - - public static Jungle getJungle() { - return instance.jungle; - } - - public static JungleTree createNewTree(String name) { - return instance.jungle.createNewTree(name); - } - - public static Either update(NetworkTreeOperationLog netLog) { - String treeName = netLog.getTreeName(); - Jungle jungle = BulletinBoardJungleManager.getJungle(); - if (jungle.getTreeByName(treeName) == null) { - if(null == jungle.createNewTree(treeName)){ - throw new IllegalStateException(); - } - } - Either either = null; - JungleTree tree = jungle.getTreeByName(treeName); - - long timestamp = System.currentTimeMillis(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - DefaultNodePath root = new DefaultNodePath(); - tBuffer.putLong(timestamp); - do { - JungleTreeEditor editor = tree.getLocalTreeEditor(); - /* - * Merge. - */ - int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); - either = JungleUpdater.edit(editor, netLog, pos); - if(either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.putAttribute(root, "renewtime", tBuffer); - if(either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - }while(either.isA()); - requestIncrementAndGet(); - return either; - } - - private static int calculatePosition(TreeNode node, long newNodeTimeStamp) { - int count = 0; - long childTimeStamp = 0; - for(TreeNode n : node.getChildren()) { - ByteBuffer timestamp = n.getAttributes().get("timestamp"); - if(timestamp == null) { - return count; - } - childTimeStamp = timestamp.getLong(0); - if (newNodeTimeStamp < childTimeStamp) { - break; - } - count++; - } - return count; - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/DistributeApp.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/DistributeApp.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - -import alice.topology.node.TopologyNode; -import jp.ac.u_ryukyu.ie.cr.bbs.network.codesegment.StartBBSCodeSegment; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.remote.RemoteConfig; - -public class DistributeApp { - public static void main(String[] args) throws Exception { - RemoteConfig conf = new RemoteConfig(args); - System.out.println("test"); - if (conf.getManagerHostName() == null) { - StartBBSCodeSegment cs1 = new StartBBSCodeSegment(args, conf.bbsPort); - cs1.ods.put("host", "node0"); - } else { - new TopologyNode(conf, new StartBBSCodeSegment(args, conf.bbsPort)); - } - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - - -import jp.ac.u_ryukyu.ie.cr.bbs.local.BulletinBoard; - -public interface NetworkBulletinBoard extends BulletinBoard { - public void init(); - public int getRequestNum(); - public long getRenewTime(String boardName); - public void createFolder(String boardName, String author, String msg, String key, String _nodeNum); - public void createAttribute(String boardName, String uuid, String author, String msg, String key); - public void editAttribute(String boardName, String path, String id, String message); - public void deleteAttribute(String _board, String _path, String id); - public void deleteNode(String _board, String _path, String id); - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,684 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - - -import jp.ac.u_ryukyu.ie.cr.bbs.local.BoardMessage; -import jp.ac.u_ryukyu.ie.cr.bbs.local.GetAttributeImp; -import jp.ac.u_ryukyu.ie.cr.bbs.local.IterableConverter; -import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList; -import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.DefaultOperationLog; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.LoggingNode; -import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.logger.OperationLog; -import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditor; -import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal; -import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.core.NetworkDefaultJungle; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.AliceJournal; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.NetworkJournal; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal; -import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; -import junit.framework.Assert; - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicInteger; - -public class NetworkJungleBulletinBoard implements NetworkBulletinBoard { - protected final Jungle jungle; - private final NetworkJournal journal; - private final String LOG_DIR; - private Boolean persistentFlag; - private AtomicInteger requestCounter; - private long renewTime; - - private NetworkJungleBulletinBoard(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 NetworkJungleBulletinBoard(String _uuid) { - this(_uuid, new AliceJournal()); - jungle.createNewTree("boards"); - } - - public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { - NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(_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); - } - }; - - 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 _path) { - JungleTree tree = jungle.getTreeByName(_board); - if (tree == null) { - throw new IllegalStateException(); - } - - DefaultNodePath path = new DefaultNodePath(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - - 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(); - 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); - } - - }; - 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); - } - }; - 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 _path, 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(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - do { - - 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); - } - }; - 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 _path, 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(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - - do { - 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); - } - }; - either = editor.edit(path, e); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - } while (either.isA()); - } - - public void editAttribute(String _bname, 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(_bname); - Either either = null; - DefaultNodePath path = new DefaultNodePath(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - - do { - JungleTreeEditor editor = tree.getTreeEditor(); - NodeEditor e = new NodeEditor() { - public Either edit(TreeNode node) { - LoggingNode logNode = wrap(node, new DefaultOperationLog()); - logNode = logNode.getAttributes().put("mes" + id, ByteBuffer.wrap(_message.getBytes())).b(); - logNode = logNode.getAttributes().put("timestamp" + id, tBuffer).b(); - return DefaultEither.newB(logNode); - } - - @Override - public LoggingNode wrap(TreeNode node, OperationLog op) { - return new LoggingNode(node, op); - } - }; - either = editor.edit(path, e); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - } while (either.isA()); - } - - public void deleteNode(String _board, String _path, String _id) { - 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(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - - do { - 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(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - - do { - 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); - } - }; - 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); - } - }; - either = editor.edit(path, e); - if (either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - } while (either.isA()); - renewTime = timestamp; - } - - public Iterable getFolder(String _boardName, String _nodeNum) { - DefaultNodePath path = new DefaultNodePath(); - System.out.println(_nodeNum.substring(0, 1)); - String[] nums = _nodeNum.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - JungleTree tree = jungle.getTreeByName(_boardName); - TreeNode node = tree.getRootNode(); - requestCounter.incrementAndGet(); - - DefaultTraverser traverser = new DefaultTraverser(); - 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 boolean compare(TreeNode compareNode, String compareAttribute) { - String labName = compareNode.getAttributes().getString("mes"); - if (labName.equals(compareAttribute)) - return true; - - for (int loopCount = 0; compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++) { - labName = compareNode.getAttributes().getString("mes" + loopCount); - if (labName.equals(compareAttribute)) - return true; - } - - return false; - } - - 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; - } - - public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) { - Long revision = Long.parseLong(revisionStr); - DefaultNodePath path = createNodePath(nodePath); - JungleTree tree = jungle.getTreeByName(_bname); - JungleTree oldTree = tree.getOldTree(revision).b(); - Either either = tree.getNodeOfPath(path); - if (either.isA()) - return new GetAttributeImp(new DefaultTreeNode()); - TreeNode node = either.b(); - return new GetAttributeImp(node); - } - - private DefaultNodePath createNodePath(String nodePath) { - DefaultNodePath path = new DefaultNodePath(); - try { - for (int count = 0; nodePath.substring(count, count + 1) != null; count++) { - if (!nodePath.substring(count, count + 1).equals("/")) - path = path.add(Integer.parseInt(nodePath.substring(count, count + 1))); - } - } catch (Exception _e) { - } - return path; - } - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/RequestNumCheckServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/RequestNumCheckServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; - - -public class RequestNumCheckServlet extends HttpServlet -{ - private final NetworkBulletinBoard bbs; - private static final long serialVersionUID = 1L; - - public RequestNumCheckServlet(NetworkBulletinBoard _bbs) - { - bbs = _bbs; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - int num = bbs.getRequestNum(); - - try{ - PrintWriter pw = _res.getWriter(); - pw.write(Integer.toString(num)); - pw.flush(); - }catch(Exception _e){ - _res.setStatus(500); - } - - - } - -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/ShowMessageWithTimeStampServlet.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/ShowMessageWithTimeStampServlet.java Sat Nov 19 22:31:25 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -package jp.ac.u_ryukyu.ie.cr.bbs.network; - -import jp.ac.u_ryukyu.ie.cr.bbs.local.GetAttributeImp; -import org.eclipse.jetty.util.thread.ThreadPool; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.PrintWriter; -import java.util.Iterator; - -public class ShowMessageWithTimeStampServlet extends HttpServlet { - /** - * - */ - private static final long serialVersionUID = 1L; - private final jp.ac.u_ryukyu.ie.cr.bbs.network.NetworkBulletinBoard bbs; - private final String createBoardMessagePath; - - private static final String PARAM_BOARD_NAME = "bname"; - private final String editMessagePath; - - public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs, - String _createBoardMessagePath, String _editMessagePath, ThreadPool thp) { - bbs = _bbs; - createBoardMessagePath = _createBoardMessagePath; - editMessagePath = _editMessagePath; - } - - public void doGet(HttpServletRequest _req, HttpServletResponse _res) { - final String bname = (_req.getParameter(PARAM_BOARD_NAME)); - try { - _res.setCharacterEncoding("UTF-8"); - printBoard(bname, _res.getWriter()); - } catch (Exception _e) { - _res.setStatus(500); - } - } - - private void printBoard(String _bname, PrintWriter _pw) throws Exception { - _pw.write("\n"); - _pw.write("

" + bbs.sanitize(_bname) + "

\n"); - _pw.write("

Latest renew time : " + bbs.getRenewTime(_bname) - + "

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

\n"); - _pw.write("

Message

\n"); - _pw.write("

\n"); - - GetAttributeImp attribute = bbs.getAttribute(_bname, "[-1]","1"); - Iterator keys = attribute.getKeys(); - - while (keys.hasNext()) { - String key = keys.next(); - String mesage = attribute.getMessage(key); - _pw.write("

" + key + " = " + mesage + "

\n"); - } - _pw.write("

edit" + "

"); - _pw.write(""); - _pw.flush(); - } -} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/BoardRenewTime.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/BoardRenewTime.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,8 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + +public interface BoardRenewTime { + + public String getboardName(); + public Long getRenewTime(); + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/BulletinBoardJungleManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/BulletinBoardJungleManager.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,108 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + + +import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; + +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicInteger; + +public class BulletinBoardJungleManager { + private static BulletinBoardJungleManager instance = new BulletinBoardJungleManager(); + private Jungle jungle; + private static AtomicInteger requestCounter = new AtomicInteger(0); + + private BulletinBoardJungleManager() { + jungle = new DefaultJungle(null,"default"); + } + + public static int requestGetAndIncrement() { + return requestCounter.getAndIncrement(); + } + + public static int requestIncrementAndGet() { + return requestCounter.incrementAndGet(); + } + + public static BulletinBoardJungleManager getInstantce() { + return instance; + } + + public static void setJungle(Jungle _j) { + instance.jungle = _j; + } + public static AtomicInteger getRequestCounter() { + return requestCounter; + } + + public static Jungle getJungle() { + return instance.jungle; + } + + public static JungleTree createNewTree(String name) { + return instance.jungle.createNewTree(name); + } + + public static Either update(NetworkTreeOperationLog netLog) { + String treeName = netLog.getTreeName(); + Jungle jungle = BulletinBoardJungleManager.getJungle(); + if (jungle.getTreeByName(treeName) == null) { + if(null == jungle.createNewTree(treeName)){ + throw new IllegalStateException(); + } + } + Either either = null; + JungleTree tree = jungle.getTreeByName(treeName); + + long timestamp = System.currentTimeMillis(); + ByteBuffer tBuffer = ByteBuffer.allocate(16); + NodePath root = new DefaultNodePath(); + tBuffer.putLong(timestamp); + do { + JungleTreeEditor editor = tree.getJungleTreeEditor(); + /* + * Merge. + */ + int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); + either = JungleUpdater.edit(editor, netLog, pos); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.putAttribute(root, "renewtime", tBuffer); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + }while(either.isA()); + requestIncrementAndGet(); + return either; + } + + private static int calculatePosition(TreeNode node, long newNodeTimeStamp) { + int count = 0; + long childTimeStamp = 0; + for(TreeNode n : node.getChildren()) { + ByteBuffer timestamp = n.getAttributes().get("timestamp"); + if(timestamp == null) { + return count; + } + childTimeStamp = timestamp.getLong(0); + if (newNodeTimeStamp < childTimeStamp) { + break; + } + count++; + } + return count; + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/DistributeApp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/DistributeApp.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,18 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + +import alice.topology.node.TopologyNode; +import jp.ac.u_ryukyu.ie.cr.bbs.network.codesegment.StartBBSCodeSegment; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.remote.RemoteConfig; + +public class DistributeApp { + public static void main(String[] args) throws Exception { + RemoteConfig conf = new RemoteConfig(args); + System.out.println("test"); + if (conf.getManagerHostName() == null) { + StartBBSCodeSegment cs1 = new StartBBSCodeSegment(args, conf.bbsPort); + cs1.ods.put("host", "node0"); + } else { + new TopologyNode(conf, new StartBBSCodeSegment(args, conf.bbsPort)); + } + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,16 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + + +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.BulletinBoard; + +public interface NetworkBulletinBoard extends BulletinBoard { + public void init(); + public int getRequestNum(); + public long getRenewTime(String boardName); + public void createFolder(String boardName, String author, String msg, String key, String _nodeNum); + public void createAttribute(String boardName, String uuid, String author, String msg, String key); + public void editAttribute(String boardName, String path, String id, String message); + public void deleteAttribute(String _board, String _path, String id); + public void deleteNode(String _board, String _path, String id); + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkJungleBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkJungleBulletinBoard.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,751 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + + +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.BoardMessage; +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.GetAttributeImp; +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.IterableConverter; +import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList; +import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader; +import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.LoggingNode; +import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.OperationLog; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath; +import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Default.DefaultTreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; +import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultEvaluator; +import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.jungle.traverser.Traversal; +import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; +import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.core.NetworkDefaultJungle; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.AliceJournal; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.NetworkJournal; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; +import junit.framework.Assert; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicInteger; + +public class NetworkJungleBulletinBoard implements NetworkBulletinBoard { + protected final Jungle jungle; + private final NetworkJournal journal; + private final String LOG_DIR; + private Boolean persistentFlag; + private AtomicInteger requestCounter; + private long renewTime; + + private NetworkJungleBulletinBoard(String _uuid, NetworkJournal _journal) { + journal = _journal; + jungle = new NetworkDefaultJungle(journal, _uuid); + BulletinBoardJungleManager.setJungle(jungle); + persistentFlag = false; + requestCounter = BulletinBoardJungleManager.getRequestCounter(); + LOG_DIR = "./log"; + renewTime = 0; + } + + public NetworkJungleBulletinBoard(String _uuid) { + this(_uuid, new AliceJournal()); + jungle.createNewTree("boards"); + } + + public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { + NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(_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.getLocalJungleTreeEditor(); + 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.getJungleTreeEditor(); + NodePath 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.getJungleTreeEditor(); + either = editor.addNewChildAt(root, 0); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + NodeEditor e = new NodeEditor() { + ByteBuffer tBuffer2 = ByteBuffer.allocate(16); + + Either _edit(LoggingNode logNode) { + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + + 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 _path) { + JungleTree tree = jungle.getTreeByName(_board); + if (tree == null) { + throw new IllegalStateException(); + } + + DefaultNodePath path = new DefaultNodePath(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + + 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(); + 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.getJungleTreeEditor(); + either = editor.addNewChildAt(path, size); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + NodeEditor e = new NodeEditor() { + + Either _edit(LoggingNode logNode) { + logNode = logNode.getAttributes().put("mes", ByteBuffer.wrap(_message.getBytes())).b(); + logNode = logNode.getAttributes().put("timestamp", tBuffer).b(); + return DefaultEither.newB(logNode); + } + + @Override + public Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + 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.getJungleTreeEditor(); + either = editor.addNewChildAt(path, size); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + + NodeEditor e = new NodeEditor() { + Either _edit(LoggingNode logNode) { + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + }; + 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 _path, 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(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + do { + + JungleTreeEditor editor = tree.getJungleTreeEditor(); + NodeEditor e = new NodeEditor() { + Either _edit(LoggingNode logNode) { + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + 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 _path, 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(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + + do { + JungleTreeEditor editor = tree.getJungleTreeEditor(); + NodeEditor e = new NodeEditor() { + String str; + + Either _edit(LoggingNode logNode) { 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + } + + public void editAttribute(String _bname, 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(_bname); + Either either = null; + DefaultNodePath path = new DefaultNodePath(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + + do { + JungleTreeEditor editor = tree.getJungleTreeEditor(); + NodeEditor e = new NodeEditor() { + Either _edit(LoggingNode logNode) { + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + 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(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + + do { + JungleTreeEditor editor = tree.getJungleTreeEditor(); + + 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(); + String[] nums = _path.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + + do { + JungleTreeEditor editor = tree.getJungleTreeEditor(); + NodeEditor e = new NodeEditor() { + Either _edit(LoggingNode logNode) { + TreeNode node = logNode.getWrap(); + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + 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.getJungleTreeEditor(); + NodeEditor e = new NodeEditor() { + Either _edit(LoggingNode logNode) { + 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 Either edit(TreeNode _e) { + LoggingNode logNode = wrap(_e); + return _edit(logNode); + } + + private LoggingNode wrap(TreeNode node) { + return new LoggingNode(node); + } + + @Override + public LoggingNode wrap(TreeNode newRoot, TreeNode editedNode, OperationLog operationLog) { + return new LoggingNode(newRoot, editedNode, operationLog); + } + + }; + either = editor.edit(path, e); + if (either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + } while (either.isA()); + renewTime = timestamp; + } + + public Iterable getFolder(String _boardName, String _nodeNum) { + DefaultNodePath path = new DefaultNodePath(); + System.out.println(_nodeNum.substring(0, 1)); + String[] nums = _nodeNum.split(","); + for (String num : nums) { + if (!num.equals("-1")) + path = path.add(Integer.parseInt(num)); + } + JungleTree tree = jungle.getTreeByName(_boardName); + TreeNode node = tree.getRootNode(); + requestCounter.incrementAndGet(); + + DefaultTraverser traverser = new DefaultTraverser(); + 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 boolean compare(TreeNode compareNode, String compareAttribute) { + String labName = compareNode.getAttributes().getString("mes"); + if (labName.equals(compareAttribute)) + return true; + + for (int loopCount = 0; compareNode.getAttributes().getString("mes" + loopCount) != null; loopCount++) { + labName = compareNode.getAttributes().getString("mes" + loopCount); + if (labName.equals(compareAttribute)) + return true; + } + + return false; + } + + 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; + } + + public GetAttributeImp getAttribute(String _bname, String nodePath, String revisionStr) { + DefaultNodePath path = createNodePath(nodePath); + JungleTree tree = jungle.getTreeByName(_bname); + Either either = tree.getNodeOfPath(path); + if (either.isA()) + return new GetAttributeImp(new DefaultTreeNode()); + TreeNode node = either.b(); + return new GetAttributeImp(node); + } + + private DefaultNodePath createNodePath(String nodePath) { + DefaultNodePath path = new DefaultNodePath(); + String[] nums = nodePath.split(","); + for (String num : nums) { + if (num.equals("-1")) + continue; + path = path.add(Integer.parseInt(num)); + } + return path; + } + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/RequestNumCheckServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/RequestNumCheckServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,35 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + + +public class RequestNumCheckServlet extends HttpServlet +{ + private final NetworkBulletinBoard bbs; + private static final long serialVersionUID = 1L; + + public RequestNumCheckServlet(NetworkBulletinBoard _bbs) + { + bbs = _bbs; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + int num = bbs.getRequestNum(); + + try{ + PrintWriter pw = _res.getWriter(); + pw.write(Integer.toString(num)); + pw.flush(); + }catch(Exception _e){ + _res.setStatus(500); + } + + + } + +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/ShowMessageWithTimeStampServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/ShowMessageWithTimeStampServlet.java Thu Feb 02 23:05:59 2017 +0900 @@ -0,0 +1,64 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; + +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.GetAttributeImp; +import org.eclipse.jetty.util.thread.ThreadPool; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; +import java.util.Iterator; + +public class ShowMessageWithTimeStampServlet extends HttpServlet { + /** + * + */ + private static final long serialVersionUID = 1L; + private final NetworkBulletinBoard bbs; + private final String createBoardMessagePath; + + private static final String PARAM_BOARD_NAME = "bname"; + private final String editMessagePath; + + public ShowMessageWithTimeStampServlet(NetworkBulletinBoard _bbs, + String _createBoardMessagePath, String _editMessagePath, ThreadPool thp) { + bbs = _bbs; + createBoardMessagePath = _createBoardMessagePath; + editMessagePath = _editMessagePath; + } + + public void doGet(HttpServletRequest _req, HttpServletResponse _res) { + final String bname = (_req.getParameter(PARAM_BOARD_NAME)); + try { + _res.setCharacterEncoding("UTF-8"); + printBoard(bname, _res.getWriter()); + } catch (Exception _e) { + _res.setStatus(500); + } + } + + private void printBoard(String _bname, PrintWriter _pw) throws Exception { + _pw.write("\n"); + _pw.write("

" + bbs.sanitize(_bname) + "

\n"); + _pw.write("

Latest renew time : " + bbs.getRenewTime(_bname) + + "

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

\n"); + _pw.write("

Message

\n"); + _pw.write("

\n"); + + GetAttributeImp attribute = bbs.getAttribute(_bname, "[-1]","1"); + Iterator keys = attribute.getKeys(); + + while (keys.hasNext()) { + String key = keys.next(); + String mesage = attribute.getMessage(key); + _pw.write("

" + key + " = " + mesage + "

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

edit" + "

"); + _pw.write(""); + _pw.flush(); + } +} diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java Sat Nov 19 22:31:25 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java Thu Feb 02 23:05:59 2017 +0900 @@ -3,10 +3,10 @@ import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; -import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.bbs.network.BulletinBoardJungleManager; +import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.BulletinBoardJungleManager; +import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog; import java.util.List; diff -r 6c584862fe93 -r 766f7668521f src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/StartBBSCodeSegment.java --- a/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/StartBBSCodeSegment.java Sat Nov 19 22:31:25 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/StartBBSCodeSegment.java Thu Feb 02 23:05:59 2017 +0900 @@ -3,10 +3,10 @@ import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; -import jp.ac.u_ryukyu.ie.cr.bbs.local.*; -import jp.ac.u_ryukyu.ie.cr.bbs.network.NetworkBulletinBoard; -import jp.ac.u_ryukyu.ie.cr.bbs.network.NetworkJungleBulletinBoard; -import jp.ac.u_ryukyu.ie.cr.bbs.network.RequestNumCheckServlet; +import jp.ac.u_ryukyu.ie.cr.bbs.local.bbs.EditMessageUseGetServlet; +import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.NetworkBulletinBoard; +import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.NetworkJungleBulletinBoard; +import jp.ac.u_ryukyu.ie.cr.bbs.network.bbs.RequestNumCheckServlet; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletHolder;

" + childName + "" + " " + + "" + "▲" + "" + " " + + "" + "▼" + "" + + "

"+ bbs.sanitize(board) + "

"+ bbs.sanitize(board) + "

" + childName + "" + " " + - "" + "▲" + "" + " " + - "" + "▼" + "" + - "