# HG changeset patch # User tatsuki # Date 1467110755 -32400 # Node ID 5acde010c6dbc9537cb8d90b23a5eefd0582a62a # Parent f3d30646c863f5cc2b86f1fd910ef0bb12cca914 add jungle browsing system diff -r f3d30646c863 -r 5acde010c6db build.gradle --- a/build.gradle Mon Jun 27 05:25:48 2016 +0900 +++ b/build.gradle Tue Jun 28 19:45:55 2016 +0900 @@ -6,38 +6,39 @@ version = '1.0' repositories { - mavenCentral() + mavenCentral() maven { url "http://eaio.com/maven2" } - maven { url "http://repo.maven.apache.org/maven2" } + maven { url "http://repo.maven.apache.org/maven2" } } dependencies { - compile "commons-collections:commons-collections:3.2.1" + compile fileTree(dir: 'lib', include: '*.jar') + compile "commons-collections:commons-collections:3.2.1" compile "org.apache.maven.surefire:surefire-junit4:2.13" compile "com.google.guava:guava:12.0" - compile group: 'org.eclipse.jetty', name: 'jetty-server', version:'9.1.1.v20140108' - compile group: 'org.eclipse.jetty', name: 'jetty-servlet', version:'9.2.1.v20140609' + compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.1.1.v20140108' + compile group: 'org.eclipse.jetty', name: 'jetty-servlet', version: '9.2.1.v20140609' testCompile group: 'junit', name: 'junit', version: '4.11' compile group: 'junit', name: 'junit', version: '4.11' - compile group: 'org.hectorclient', name: 'hector-core', version:'1.1-2' - compile(group: 'org.apache.cassandra', name: 'cassandra-all', version:'1.2.1') { - exclude(module: 'slf4j-log4j12') + compile group: 'org.hectorclient', name: 'hector-core', version: '1.1-2' + compile(group: 'org.apache.cassandra', name: 'cassandra-all', version: '1.2.1') { + exclude(module: 'slf4j-log4j12') exclude(module: 'log4j') } - jar { - manifest { - attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version + jar { + manifest { + attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version + } + from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } + archiveName = 'jungle-core.jar' } - from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } - archiveName = 'jungle-core.jar' - } - uploadArchives { - repositories { - flatDir { - dirs '.' - } + uploadArchives { + repositories { + flatDir { + dirs '.' + } + } } - } } diff -r f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/App.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/App.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,54 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.browsing; + +import org.mortbay.jetty.Connector; +import org.mortbay.jetty.Server; +import org.mortbay.jetty.nio.SelectChannelConnector; +import org.mortbay.jetty.servlet.ServletHandler; +import org.mortbay.jetty.servlet.ServletHolder; +import org.mortbay.thread.QueuedThreadPool; + +import javax.servlet.Servlet; + + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) throws Exception + { + BrowsingBulletinBoard cassaBBS = new JungleBrowsingBulletinBoard(); + + String createBoardMessagePath = "/createBoardMessage"; + String createBoardPath = "/createBoard"; + String editMessagePath = "/editMessage"; + String showBoardMessagePath = "/showBoardMessage"; + String createChildPath = "/createChildMessage"; + + 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); + Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,createChildPath,editMessagePath,showBoardMessagePath); + +// Server serv = new Server(8080); + Server serv = new Server(); + SelectChannelConnector connector = new SelectChannelConnector(); + connector.setPort(8080); + connector.setThreadPool(new QueuedThreadPool(1000)); + serv.setConnectors(new Connector[] { connector }); + + ServletHandler context = new ServletHandler(); + 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.addHandler(context); + serv.start(); + } +} diff -r f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BoardMessage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BoardMessage.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,8 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.browsing; + +public interface BoardMessage +{ + public String getUUID(); + public String getAuthor(); + public String getMessage(); +} diff -r f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BrowsingBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/BrowsingBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,16 @@ +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); +} diff -r f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardMessageServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,39 @@ +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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateBoardServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,32 @@ +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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateChildServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/CreateChildServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,38 @@ +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{ + bbs.createChild(boardName,nodeName,path); + PrintWriter pw = _res.getWriter(); + pw.write("successfully written"); + }catch(Exception _e){ + _res.setStatus(500); + } + } +} diff -r f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/EditMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/EditMessageServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,63 @@ +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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/GetAttributeImp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/GetAttributeImp.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,23 @@ +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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/IterableConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/IterableConverter.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,52 @@ +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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/JungleBrowsingBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,197 @@ +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.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 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) { + 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(); + 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(); + } + + 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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardMessageServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,90 @@ +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"; + + 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); + try { + printBoard(bname, path, _res.getWriter()); + } 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 f3d30646c863 -r 5acde010c6db src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardsServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/browsing/ShowBoardsServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,53 @@ +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; + + public ShowBoardsServlet(BrowsingBulletinBoard _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("


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

list of boards

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

"+ bbs.sanitize(board) + "

"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/App.java Tue Jun 28 19:45:55 2016 +0900 @@ -45,7 +45,7 @@ System.out.println("Replication factor "+rep_factor); cassaBBS = new CassandraBulletinBoard("test-cluster","localhost:9160","cassaBBS2", cLevel, rep_factor); } - + String createBoardMessagePath = "/createBoardMessage"; String createBoardPath = "/createBoard"; String editMessagePath = "/editMessage"; diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/CassandraBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 @@ -37,7 +37,7 @@ 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 ) + public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel, int rep_factor ) { address = _address; clusterName = _clusterName; @@ -51,7 +51,7 @@ initialize(); } - public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName, HConsistencyLevel cLevel) + public CassandraBulletinBoard(String _clusterName, String _address, String _keyspaceName, HConsistencyLevel cLevel) { this(_clusterName, _address, _keyspaceName, cLevel, 1); } @@ -62,7 +62,7 @@ { if(cluster.describeKeyspace(keyspace) == null){ KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace, - SimpleStrategy.class.getName(),REP_FACTOR, Collections. emptyList()); + 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); @@ -98,7 +98,7 @@ public void createBoardMessage(UUID _time,String _name,String _author,String _message,String _editKey) { Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); - ThriftSuperCfTemplate template = + ThriftSuperCfTemplate template = new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), UUIDSerializer.get(),StringSerializer.get()); @@ -182,7 +182,7 @@ { Keyspace ksp = HFactory.createKeyspace(keyspace, cluster, configurableConsistencyLevel); UUID time = UUID.fromString(_uuid); - ThriftSuperCfTemplate template = + ThriftSuperCfTemplate template = new ThriftSuperCfTemplate(ksp,COLUMN_FAMILY_BOARD,StringSerializer.get(), UUIDSerializer.get(),StringSerializer.get()); diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/HectorSample.java Tue Jun 28 19:45:55 2016 +0900 @@ -5,7 +5,8 @@ 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.*; +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; @@ -22,6 +23,11 @@ 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(), diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/JungleBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 @@ -9,12 +9,10 @@ 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.DefaultEvaluator; +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.Traversal; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; -import junit.framework.Assert; import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicInteger; @@ -73,7 +71,7 @@ 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(); } @@ -104,7 +102,7 @@ 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(); } @@ -125,7 +123,7 @@ 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(); } @@ -188,32 +186,27 @@ return str; } - public GetAttributeImp getAttribute(String _bname, String _nodeNum, String revisionStr) { - - DefaultNodePath path = new DefaultNodePath(); - try { - for (int count = 0; _nodeNum.substring(count, count + 1) != null; count++) { - if (!_nodeNum.substring(count, count + 1).equals("/")) - path = path.add(Integer.parseInt(_nodeNum.substring(count, count + 1))); - } - } catch (Exception _e) { - } - JungleTree tree = jungle.getTreeByName(_bname); - System.out.println(tree.revision()); - Long revision = Long.parseLong(revisionStr); - JungleTree oldTree = tree.getOldTree(revision).b(); - System.out.println(oldTree.revision()); - TreeNode node = oldTree.getRootNode(); - - DefaultTraverser traverser = new DefaultTraverser(); - DefaultEvaluator evaluator = new DefaultEvaluator(path); - Either ret = traverser.traverse(node, evaluator); - if (ret.isA()) { - Assert.fail(); + 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); } - Traversal traversal = ret.b(); - TreeNode target = traversal.destination(); - return new GetAttributeImp(target); - } + 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 f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/local/ShowBoardMessageServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -40,14 +40,14 @@ _pw.write("

Author : EditKey :

\n"); _pw.write("

Message

\n"); _pw.write("

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

" + key + " = " + mesage + "

\n"); - }while(keys.hasNext()); + } while (keys.hasNext()); _pw.write(""); _pw.flush(); diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/DistributeApp.java Tue Jun 28 19:45:55 2016 +0900 @@ -9,8 +9,6 @@ RemoteConfig conf = new RemoteConfig(args); System.out.println("test"); if (conf.getManagerHostName() == null) { - // String localHostName ="localhost"; - // HostMessage host = new HostMessage(localHostName, conf.localPort); StartBBSCodeSegment cs1 = new StartBBSCodeSegment(args, conf.bbsPort); cs1.ods.put("host", "node0"); } else { diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/NetworkJungleBulletinBoard.java Tue Jun 28 19:45:55 2016 +0900 @@ -17,6 +17,7 @@ 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; @@ -656,34 +657,28 @@ return str; } - @Override - public GetAttributeImp getAttribute(String _bname, String _path, String revisionStr) { - DefaultNodePath path = new DefaultNodePath(); - String[] nums = _path.split(","); - for (String num : nums) { - if (!num.equals("-1")) - path = path.add(Integer.parseInt(num)); - } - + public GetAttributeImp getAttribute(String _bname, String nodePath,String revisionStr) { + Long revision = Long.parseLong(revisionStr); + DefaultNodePath path = createNodePath(nodePath); JungleTree tree = jungle.getTreeByName(_bname); - TreeNode node; - if (revisionStr.equals("-1")) { - node = tree.getRootNode(); - } else { - Long revision = Long.parseLong(revisionStr); - JungleTree oldTree = tree.getOldTree(revision).b(); - node = oldTree.getRootNode(); - } + 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); + } - DefaultTraverser traverser = new DefaultTraverser(); - DefaultEvaluator evaluator = new DefaultEvaluator(path); - Either ret = traverser.traverse(node, evaluator); - if (ret.isA()) { - Assert.fail(); + 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; + } - Traversal traversal = ret.b(); - TreeNode target = traversal.destination(); - return new GetAttributeImp(target); - } } diff -r f3d30646c863 -r 5acde010c6db 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 Mon Jun 27 05:25:48 2016 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/ShowMessageWithTimeStampServlet.java Tue Jun 28 19:45:55 2016 +0900 @@ -49,7 +49,7 @@ _pw.write("

Message

\n"); _pw.write("

\n"); - GetAttributeImp attribute = bbs.getAttribute(_bname, "[-1]", "0"); + GetAttributeImp attribute = bbs.getAttribute(_bname, "[-1]","1"); Iterator keys = attribute.getKeys(); while (keys.hasNext()) { diff -r f3d30646c863 -r 5acde010c6db src/test/java/jp/ac/u_ryukyu/ie/cr/bbs/network/showMessageTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/java/jp/ac/u_ryukyu/ie/cr/bbs/network/showMessageTest.java Tue Jun 28 19:45:55 2016 +0900 @@ -0,0 +1,54 @@ +package jp.ac.u_ryukyu.ie.cr.bbs.network; + +import jp.ac.u_ryukyu.ie.cr.bbs.network.codesegment.StartBBSCodeSegment; +import jp.ac.u_ryukyu.ie.cr.jungleNetwork.remote.RemoteConfig; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.Socket; + + +public class showMessageTest { + + public static void main(String args[]) throws Exception { + String host = "localhost"; + int port = 8080; + String path = "/showBoardMessage?bname=" + args[0]; + String url = "http://" + host + ":" + port + path; + String str; + System.out.println(url); + RemoteConfig conf = new RemoteConfig(args); + StartBBSCodeSegment cs1 = new StartBBSCodeSegment(args, conf.bbsPort); + cs1.ods.put("host", "node0"); + BufferedReader input = new BufferedReader(new InputStreamReader( + System.in)); + Thread.sleep(1000); + + do{ + try { + Socket socket = new Socket(host, port); + BufferedReader readSocket = new BufferedReader( + new InputStreamReader(socket.getInputStream())); + BufferedWriter writeSocket = new BufferedWriter( + new OutputStreamWriter(socket.getOutputStream())); + + writeSocket.write("GET " + url + " HTTP/1.1\r\n"); + writeSocket.write("Host: " + host + "\n"); + writeSocket.write("\n"); + writeSocket.flush(); + while ((str = readSocket.readLine()) != null) { + System.out.println(str); + } + writeSocket.close(); + readSocket.close(); + socket.close(); + System.out.println("please input connection tree name or quit"); + + } catch (Exception ex) { + ex.printStackTrace(); + } + }while(input.readLine() != "quit"); + } +}

" +childName + "