# HG changeset patch # User one # Date 1385667082 -32400 # Node ID 8f9811a1e00c58bc3baa62933fc656a5adb99811 # Parent 6e7724d55a7269e44a2cb715b860ea8c30556490 Moved app files diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java --- a/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Thu Nov 28 19:21:43 2013 +0900 +++ b/src/main/java/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Fri Nov 29 04:31:22 2013 +0900 @@ -5,6 +5,7 @@ import java.nio.ByteBuffer; import alice.jungle.operations.NetworkTreeOperationLog; +import app.bbs.codesegment.NullCodeSegment; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; @@ -27,7 +28,6 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; -import jungle.app.bbs.codesegment.NullCodeSegment; public class NetworkDefaultJungleTreeEditor> implements JungleTreeEditor { diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/BoardMessage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/BoardMessage.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,8 @@ +package app.bbs; + +public interface BoardMessage +{ + public String getUUID(); + public String getAuthor(); + public String getMessage(); +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/BulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/BulletinBoard.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,11 @@ +package app.bbs; + +public interface BulletinBoard +{ + public Iterable 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 Iterable getMessages(String _boardName); +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/CassandraBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/CassandraBulletinBoard.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,192 @@ +package app.bbs; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import org.apache.cassandra.locator.SimpleStrategy; + +import me.prettyprint.cassandra.serializers.StringSerializer; +import me.prettyprint.cassandra.serializers.UUIDSerializer; +import me.prettyprint.cassandra.service.CassandraHost; +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.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; + +public class CassandraBulletinBoard implements BulletinBoard +{ + private final String address; + private final String clusterName; + private final Cluster cluster; + private final String keyspace; + + private static final String COLUMN_FAMILY_BOARD = "boards"; + + public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName) + { + address = _address; + clusterName = _clusterName; + keyspace = _keyspaceName; + cluster = HFactory.getOrCreateCluster(clusterName,address); + + initialize(); + } + + private void initialize() + { + if(cluster.describeKeyspace(keyspace) == null){ + KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace, + SimpleStrategy.class.getName(),1,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); + 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); + 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); + 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); + 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); + } + +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/CreateBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/CreateBoardMessageServlet.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,40 @@ +package app.bbs; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/CreateBoardServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/CreateBoardServlet.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,39 @@ +package app.bbs; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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 = _req.getParameter(PARAM_BOARD_NAME); + String author = _req.getParameter(PARAM_BOARD_AUTHOR); + String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE); + String key = _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 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/DistributeApp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/DistributeApp.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,16 @@ +package app.bbs; + + +import alice.jungle.remote.RemoteConfig; +import alice.topology.node.TopologyNode; +import app.bbs.codesegment.StartBBSCodeSegment; + + +public class DistributeApp +{ + public static void main( String[] args ) throws Exception + { + RemoteConfig conf = new RemoteConfig(args); + new TopologyNode(conf, new StartBBSCodeSegment(conf.bbsPort)); + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/EditMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/EditMessageServlet.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,64 @@ +package app.bbs; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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); + + + 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 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/HectorSample.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/HectorSample.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,70 @@ +package app.bbs; + +import java.util.List; +import java.util.UUID; +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.*; +import me.prettyprint.hector.api.beans.HColumn; +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.factory.HFactory; +import me.prettyprint.hector.api.query.QueryResult; +import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; +import me.prettyprint.hector.api.query.SuperSliceQuery; + +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 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/IterableConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/IterableConverter.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,52 @@ +package app.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 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/JungleManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/JungleManager.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,127 @@ +package app.bbs; + +import java.nio.ByteBuffer; +import java.util.Iterator; + +import alice.jungle.operations.NetworkTreeOperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; + +public class JungleManager { + private static JungleManager jm = new JungleManager(); + private Jungle jungle; + private static int NOT_CHANGE_POSITION = 0; + + private JungleManager() { + jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser())); + } + + public static void setJungle(Jungle _j) { + jm.jungle = _j; + } + + public static Jungle getJungle() { + return jm.jungle; + } + + public static JungleTree createNewTree(String name) { + return jm.jungle.createNewTree(name); + } + + public static Either edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) { + JungleTreeEditor editor = _editor; + Either either = null; + for (TreeOperation op : _log) { + either = _edit(editor, op, pos); + if(either.isA()) { + return either; + } + editor = either.b(); + } + return either; + } + + private static Either _edit(JungleTreeEditor editor, + TreeOperation op, int _pos) { + NodePath path = new DefaultNodePath(); + NodeOperation nodeOp = op.getNodeOperation(); + int pos = _pos; + if (_pos == NOT_CHANGE_POSITION ) { + pos = nodeOp.getPosition(); + } + Command c = nodeOp.getCommand(); + String key = ""; + switch (c) { + case PUT_ATTRIBUTE: + path = op.getNodePath(); + key = nodeOp.getKey(); + ByteBuffer value = nodeOp.getValue(); + return editor.putAttribute(path, key, value); + case DELETE_ATTRIBUTE: + key = nodeOp.getKey(); + return editor.deleteAttribute(path, key); + case APPEND_CHILD: + return editor.addNewChildAt(path, pos); + case DELETE_CHILD: + return editor.deleteChildAt(path, 0); + } + return null; + } + + public static Either update(NetworkTreeOperationLog netLog) { + String treeName = netLog.getTreeName(); + Jungle jungle = JungleManager.getJungle(); + if (jungle.getTreeByName(treeName) == null) { + if(null == jungle.createNewTree(treeName)){ + throw new IllegalStateException(); + } + } + JungleTree tree = jungle.getTreeByName(treeName); + JungleTreeEditor editor = tree.getLocalTreeEditor(); + + // int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); + int pos = 0; + Either either = JungleManager.edit(editor, netLog, pos); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + if(either.isA()) { + throw new IllegalStateException(); + } + return either; + } + + private static int calculatePosition(Node node, long newNodeTimeStamp) { + int count = 0; + long childTimeStamp = 0; + for(Iterator iter = node.getChildren().iterator();iter.hasNext();) { + Node n = iter.next(); + if(n.getAttributes().get("timestamp") == null) { + return NOT_CHANGE_POSITION; + } + if(n.getAttributes().get("timestamp") != null) { + childTimeStamp = n.getAttributes().get("timestamp").getLong(); + if (newNodeTimeStamp < childTimeStamp) { + break; + } + } + count++; + } + return count; + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/NetworkJungleBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/NetworkJungleBulletinBoard.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,228 @@ +package app.bbs; + +import java.nio.ByteBuffer; +import java.util.Date; +import java.util.concurrent.atomic.AtomicInteger; + +import alice.jungle.core.NetworkDefaultJungle; +import alice.jungle.persistent.AliceJournal; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; + +public class NetworkJungleBulletinBoard implements BulletinBoard +{ + private final Jungle jungle; + + public NetworkJungleBulletinBoard(String _uuid) + { + jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser())); + jungle.createNewTree("boards"); + JungleManager.setJungle(jungle); + } + + public Iterable getBoards() + { + JungleTree tree = jungle.getTreeByName("boards"); + Node node = tree.getRootNode(); + Children chs = node.getChildren(); + + IterableConverter.Converter converter = new IterableConverter.Converter(){ + public String conv(Node _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(); + } + final long timestamp = new Date().getTime(); + + + 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(){ + public > Either edit(T _e){ + _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); + _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b(); + _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); + ByteBuffer tBuffer = ByteBuffer.allocate(16); + _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); + return DefaultEither.newB(_e); + } + }; + + either = editor.edit(root.add(0),e); + 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(); + } + + Either either; + do{ + Node 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(); + final long timestamp = new Date().getTime(); + NodeEditor e = new NodeEditor(){ + public > Either edit(T _e){ + _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); + _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); + _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); + ByteBuffer tBuffer = ByteBuffer.allocate(16); + _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); + return DefaultEither.newB(_e); + } + }; + 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 _uuid,final String _author,final String _message,final String _editKey) + { + for(;;) { + DefaultNodePath path = new DefaultNodePath(); + path = path.add(Integer.parseInt(_uuid)); + + JungleTree tree = jungle.getTreeByName(_board); + JungleTreeEditor editor = tree.getTreeEditor(); + final long timestamp = new Date().getTime(); + NodeEditor e = new NodeEditor(){ + public > Either edit(T _e){ + _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); + _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); + _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); + ByteBuffer tBuffer = ByteBuffer.allocate(16); + _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); + return DefaultEither.newB(_e); + } + }; + + Either either = editor.edit(path,e); + if(either.isA()){ + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + if(!either.isA()) { + return; + } + } + + } + + public Iterable getMessages(String _boardName) + { + JungleTree tree = jungle.getTreeByName(_boardName); + Node node = tree.getRootNode(); + Children chs = node.getChildren(); + + final AtomicInteger counter = new AtomicInteger(0); + IterableConverter.Converter converter = new IterableConverter.Converter(){ + public BoardMessage conv(Node _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; + } + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/ShowBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/ShowBoardMessageServlet.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,60 @@ +package app.bbs; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class ShowBoardMessageServlet extends HttpServlet +{ + /** + * + */ + private static final long serialVersionUID = 1L; + private final BulletinBoard bbs; + private final String createBoardMessagePath; + private final String editMessagePath; + + private static final String PARAM_BOARD_NAME = "bname"; + + public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath) + { + bbs = _bbs; + createBoardMessagePath = _createBoardMessagePath; + editMessagePath = _editMessagePath; + } + + public void doGet(HttpServletRequest _req,HttpServletResponse _res) + { + String bname = _req.getParameter(PARAM_BOARD_NAME); + + try{ + printBoard(bname,_res.getWriter()); + }catch(Exception _e){ + _res.setStatus(500); + } + + } + + private void printBoard(String _bname,PrintWriter _pw) throws Exception + { + _pw.write("\n"); + _pw.write("

"+_bname+"

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

\n"); + _pw.write("

Message

\n"); + _pw.write("

\n"); + + for(BoardMessage msg : bbs.getMessages(_bname)){ + _pw.write("
"); + _pw.write("

"+msg.getAuthor()+"

"); + _pw.write("

"+msg.getMessage()+"

"); + _pw.write("
edit"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/ShowBoardsServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/ShowBoardsServlet.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,55 @@ +package app.bbs; + +import java.io.PrintWriter; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +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{ + 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("

"+board+"

"); + } + + _pw.write(""); + _pw.flush(); + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/codesegment/LogUpdateCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/codesegment/LogUpdateCodeSegment.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,51 @@ +package app.bbs.codesegment; + + + +import java.util.List; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import alice.jungle.operations.NetworkTreeOperationLog; +import app.bbs.JungleManager; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; + +public class LogUpdateCodeSegment extends CodeSegment { + + Receiver log = ids.create(CommandType.PEEK); + Receiver clist = ids.create(CommandType.PEEK); + + + public LogUpdateCodeSegment() { + log.setKey("log"); + clist.setKey("_CLIST");; + } + + public LogUpdateCodeSegment(int index) { + log.setKey("log", index); + clist.setKey("_CLIST");; + } + + public void run() { + int index = log.index; + NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class); + @SuppressWarnings("unchecked") + List list = clist.asClass(List.class); + if (!log.from.equals("local")) { + Either either = JungleManager.update(netLog); + if(either.isA()) { + /* Should throw after new LogUpdateCodeSegment */ + throw new IllegalStateException(); + } + } + for (String node : list) { + if (!node.equals(log.from)) { + ods.put(node, log.key, log.getVal()); + } + } + new LogUpdateCodeSegment(index); + } +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/codesegment/NullCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/codesegment/NullCodeSegment.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,13 @@ +package app.bbs.codesegment; + +import alice.codesegment.CodeSegment; + + +public class NullCodeSegment extends CodeSegment { + + @Override + public void run() { + + } + +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/codesegment/StartBBSCodeSegment.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,76 @@ +package app.bbs.codesegment; + +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import javax.servlet.Servlet; + +import org.mortbay.jetty.Server; +import org.mortbay.jetty.servlet.ServletHandler; +import org.mortbay.jetty.servlet.ServletHolder; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import app.bbs.BulletinBoard; +import app.bbs.CreateBoardMessageServlet; +import app.bbs.CreateBoardServlet; +import app.bbs.EditMessageServlet; +import app.bbs.NetworkJungleBulletinBoard; +import app.bbs.ShowBoardMessageServlet; +import app.bbs.ShowBoardsServlet; + + +public class StartBBSCodeSegment extends CodeSegment { + + int bbsPort = 8080; + Receiver host = ids.create(CommandType.PEEK); + private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$"); + + public StartBBSCodeSegment(int p) { + bbsPort = p; + host.setKey("host"); + } + + public StartBBSCodeSegment() { + host.setKey("host"); + } + + public void run() { + System.out.println("StartBBSCodeSegment"); + String name = host.asString(); + System.out.println("name : "+ name); + Matcher matcher = pattern.matcher(name); + matcher.find(); +// String type = matcher.group(1); + + /* Jetty registration */ + BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name); + String createBoardMessagePath = "/createBoardMessage"; + String createBoardPath = "/createBoard"; + String editMessagePath = "/editMessage"; + String showBoardMessagePath = "/showBoardMessage"; + + Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); + Servlet createBoard = new CreateBoardServlet(cassaBBS); + Servlet editBoardMessage = new EditMessageServlet(cassaBBS); + Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath); + Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath); + + Server serv = new Server(bbsPort); + ServletHandler context = new ServletHandler(); + context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath); + context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath); + context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath); + context.addServletWithMapping(new ServletHolder(index),"/"); + context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath); + serv.addHandler(context); + try { + serv.start(); + } catch (Exception e) { + e.printStackTrace(); + } + new LogUpdateCodeSegment(); + } + +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/app/bbs/transformer/MergeBBS.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/app/bbs/transformer/MergeBBS.java Fri Nov 29 04:31:22 2013 +0900 @@ -0,0 +1,22 @@ +package app.bbs.transformer; + +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; + +public class MergeBBS implements NodeEditor { + + + public MergeBBS() { + + } + + @Override + public > Either edit(T _e) + { + return _e.getChildren().deleteChildAt(0); + } + + +} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/BoardMessage.java --- a/src/main/java/jungle/app/bbs/BoardMessage.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package jungle.app.bbs; - -public interface BoardMessage -{ - public String getUUID(); - public String getAuthor(); - public String getMessage(); -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/BulletinBoard.java --- a/src/main/java/jungle/app/bbs/BulletinBoard.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -package jungle.app.bbs; - -public interface BulletinBoard -{ - public Iterable 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 Iterable getMessages(String _boardName); -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/CassandraBulletinBoard.java --- a/src/main/java/jungle/app/bbs/CassandraBulletinBoard.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -package jungle.app.bbs; - -import java.util.Collections; -import java.util.List; -import java.util.UUID; - -import org.apache.cassandra.locator.SimpleStrategy; - -import me.prettyprint.cassandra.serializers.StringSerializer; -import me.prettyprint.cassandra.serializers.UUIDSerializer; -import me.prettyprint.cassandra.service.CassandraHost; -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.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; - -public class CassandraBulletinBoard implements BulletinBoard -{ - private final String address; - private final String clusterName; - private final Cluster cluster; - private final String keyspace; - - private static final String COLUMN_FAMILY_BOARD = "boards"; - - public CassandraBulletinBoard(String _clusterName,String _address,String _keyspaceName) - { - address = _address; - clusterName = _clusterName; - keyspace = _keyspaceName; - cluster = HFactory.getOrCreateCluster(clusterName,address); - - initialize(); - } - - private void initialize() - { - if(cluster.describeKeyspace(keyspace) == null){ - KeyspaceDefinition keyspaceDefinition = HFactory.createKeyspaceDefinition(keyspace, - SimpleStrategy.class.getName(),1,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); - 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); - 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); - 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); - 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); - } - -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java --- a/src/main/java/jungle/app/bbs/CreateBoardMessageServlet.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -package jungle.app.bbs; - -import java.io.PrintWriter; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -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 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/CreateBoardServlet.java --- a/src/main/java/jungle/app/bbs/CreateBoardServlet.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package jungle.app.bbs; - -import java.io.PrintWriter; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -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 = _req.getParameter(PARAM_BOARD_NAME); - String author = _req.getParameter(PARAM_BOARD_AUTHOR); - String msg = _req.getParameter(PARAM_BOARD_INITMESSAGE); - String key = _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 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/DistributeApp.java --- a/src/main/java/jungle/app/bbs/DistributeApp.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -package jungle.app.bbs; - - -import alice.jungle.remote.RemoteConfig; -import alice.topology.node.TopologyNode; -import jungle.app.bbs.codesegment.StartBBSCodeSegment; - - -public class DistributeApp -{ - public static void main( String[] args ) throws Exception - { - RemoteConfig conf = new RemoteConfig(args); - new TopologyNode(conf, new StartBBSCodeSegment(conf.bbsPort)); - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/EditMessageServlet.java --- a/src/main/java/jungle/app/bbs/EditMessageServlet.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -package jungle.app.bbs; - -import java.io.PrintWriter; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -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); - - - 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 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/HectorSample.java --- a/src/main/java/jungle/app/bbs/HectorSample.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -package jungle.app.bbs; - -import java.util.List; -import java.util.UUID; -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.*; -import me.prettyprint.hector.api.beans.HColumn; -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.factory.HFactory; -import me.prettyprint.hector.api.query.QueryResult; -import me.prettyprint.hector.api.query.RangeSuperSlicesQuery; -import me.prettyprint.hector.api.query.SuperSliceQuery; - -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 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/IterableConverter.java --- a/src/main/java/jungle/app/bbs/IterableConverter.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -package jungle.app.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 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/JungleManager.java --- a/src/main/java/jungle/app/bbs/JungleManager.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -package jungle.app.bbs; - -import java.nio.ByteBuffer; -import java.util.Iterator; - -import alice.jungle.operations.NetworkTreeOperationLog; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; - -public class JungleManager { - private static JungleManager jm = new JungleManager(); - private Jungle jungle; - private static int NOT_CHANGE_POSITION = 0; - - private JungleManager() { - jungle = new DefaultJungle(null,"hogehoge",new DefaultTreeEditor(new DefaultTraverser())); - } - - public static void setJungle(Jungle _j) { - jm.jungle = _j; - } - - public static Jungle getJungle() { - return jm.jungle; - } - - public static JungleTree createNewTree(String name) { - return jm.jungle.createNewTree(name); - } - - public static Either edit(JungleTreeEditor _editor ,TreeOperationLog _log, int pos) { - JungleTreeEditor editor = _editor; - Either either = null; - for (TreeOperation op : _log) { - either = _edit(editor, op, pos); - if(either.isA()) { - return either; - } - editor = either.b(); - } - return either; - } - - private static Either _edit(JungleTreeEditor editor, - TreeOperation op, int _pos) { - NodePath path = new DefaultNodePath(); - NodeOperation nodeOp = op.getNodeOperation(); - int pos = _pos; - if (_pos == NOT_CHANGE_POSITION ) { - pos = nodeOp.getPosition(); - } - Command c = nodeOp.getCommand(); - String key = ""; - switch (c) { - case PUT_ATTRIBUTE: - path = op.getNodePath(); - key = nodeOp.getKey(); - ByteBuffer value = nodeOp.getValue(); - return editor.putAttribute(path, key, value); - case DELETE_ATTRIBUTE: - key = nodeOp.getKey(); - return editor.deleteAttribute(path, key); - case APPEND_CHILD: - return editor.addNewChildAt(path, pos); - case DELETE_CHILD: - return editor.deleteChildAt(path, 0); - } - return null; - } - - public static Either update(NetworkTreeOperationLog netLog) { - String treeName = netLog.getTreeName(); - Jungle jungle = JungleManager.getJungle(); - if (jungle.getTreeByName(treeName) == null) { - if(null == jungle.createNewTree(treeName)){ - throw new IllegalStateException(); - } - } - JungleTree tree = jungle.getTreeByName(treeName); - JungleTreeEditor editor = tree.getLocalTreeEditor(); - - // int pos = calculatePosition(tree.getRootNode(), netLog.getTimeStamp()); - int pos = 0; - Either either = JungleManager.edit(editor, netLog, pos); - if(either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - if(either.isA()) { - throw new IllegalStateException(); - } - return either; - } - - private static int calculatePosition(Node node, long newNodeTimeStamp) { - int count = 0; - long childTimeStamp = 0; - for(Iterator iter = node.getChildren().iterator();iter.hasNext();) { - Node n = iter.next(); - if(n.getAttributes().get("timestamp") == null) { - return NOT_CHANGE_POSITION; - } - if(n.getAttributes().get("timestamp") != null) { - childTimeStamp = n.getAttributes().get("timestamp").getLong(); - if (newNodeTimeStamp < childTimeStamp) { - break; - } - } - count++; - } - return count; - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java --- a/src/main/java/jungle/app/bbs/NetworkJungleBulletinBoard.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -package jungle.app.bbs; - -import java.nio.ByteBuffer; -import java.util.Date; -import java.util.concurrent.atomic.AtomicInteger; - -import alice.jungle.core.NetworkDefaultJungle; -import alice.jungle.persistent.AliceJournal; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; - -public class NetworkJungleBulletinBoard implements BulletinBoard -{ - private final Jungle jungle; - - public NetworkJungleBulletinBoard(String _uuid) - { - jungle = new NetworkDefaultJungle(new AliceJournal(), _uuid,new DefaultTreeEditor(new DefaultTraverser())); - jungle.createNewTree("boards"); - JungleManager.setJungle(jungle); - } - - public Iterable getBoards() - { - JungleTree tree = jungle.getTreeByName("boards"); - Node node = tree.getRootNode(); - Children chs = node.getChildren(); - - IterableConverter.Converter converter = new IterableConverter.Converter(){ - public String conv(Node _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(); - } - final long timestamp = new Date().getTime(); - - - 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(){ - public > Either edit(T _e){ - _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); - _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_initMessage.getBytes())).b(); - _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - - either = editor.edit(root.add(0),e); - 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(); - } - - Either either; - do{ - Node 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(); - final long timestamp = new Date().getTime(); - NodeEditor e = new NodeEditor(){ - public > Either edit(T _e){ - _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); - _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); - _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - path = path.add(size); - either = editor.edit(path,e); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - - }while(either.isA()); - /* Put DataSegment */ - } - - public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey) - { - for(;;) { - DefaultNodePath path = new DefaultNodePath(); - path = path.add(Integer.parseInt(_uuid)); - - JungleTree tree = jungle.getTreeByName(_board); - JungleTreeEditor editor = tree.getTreeEditor(); - final long timestamp = new Date().getTime(); - NodeEditor e = new NodeEditor(){ - public > Either edit(T _e){ - _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); - _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); - _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - - Either either = editor.edit(path,e); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - if(!either.isA()) { - return; - } - } - - } - - public Iterable getMessages(String _boardName) - { - JungleTree tree = jungle.getTreeByName(_boardName); - Node node = tree.getRootNode(); - Children chs = node.getChildren(); - - final AtomicInteger counter = new AtomicInteger(0); - IterableConverter.Converter converter = new IterableConverter.Converter(){ - public BoardMessage conv(Node _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; - } - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java --- a/src/main/java/jungle/app/bbs/ShowBoardMessageServlet.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -package jungle.app.bbs; - -import java.io.PrintWriter; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -public class ShowBoardMessageServlet extends HttpServlet -{ - /** - * - */ - private static final long serialVersionUID = 1L; - private final BulletinBoard bbs; - private final String createBoardMessagePath; - private final String editMessagePath; - - private static final String PARAM_BOARD_NAME = "bname"; - - public ShowBoardMessageServlet(BulletinBoard _bbs,String _createBoardMessagePath, String _editMessagePath) - { - bbs = _bbs; - createBoardMessagePath = _createBoardMessagePath; - editMessagePath = _editMessagePath; - } - - public void doGet(HttpServletRequest _req,HttpServletResponse _res) - { - String bname = _req.getParameter(PARAM_BOARD_NAME); - - try{ - printBoard(bname,_res.getWriter()); - }catch(Exception _e){ - _res.setStatus(500); - } - - } - - private void printBoard(String _bname,PrintWriter _pw) throws Exception - { - _pw.write("\n"); - _pw.write("

"+_bname+"

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

\n"); - _pw.write("

Message

\n"); - _pw.write("

\n"); - - for(BoardMessage msg : bbs.getMessages(_bname)){ - _pw.write("
"); - _pw.write("

"+msg.getAuthor()+"

"); - _pw.write("

"+msg.getMessage()+"

"); - _pw.write("
edit"); - } - - _pw.write(""); - _pw.flush(); - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/ShowBoardsServlet.java --- a/src/main/java/jungle/app/bbs/ShowBoardsServlet.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jungle.app.bbs; - -import java.io.PrintWriter; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -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{ - 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("

"+board+"

"); - } - - _pw.write(""); - _pw.flush(); - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java --- a/src/main/java/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -package jungle.app.bbs.codesegment; - - - -import java.util.List; - -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; -import alice.jungle.operations.NetworkTreeOperationLog; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.app.bbs.JungleManager; - -public class LogUpdateCodeSegment extends CodeSegment { - - Receiver log = ids.create(CommandType.PEEK); - Receiver clist = ids.create(CommandType.PEEK); - - - public LogUpdateCodeSegment() { - log.setKey("log"); - clist.setKey("_CLIST");; - } - - public LogUpdateCodeSegment(int index) { - log.setKey("log", index); - clist.setKey("_CLIST");; - } - - public void run() { - int index = log.index; - NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class); - @SuppressWarnings("unchecked") - List list = clist.asClass(List.class); - if (!log.from.equals("local")) { - Either either = JungleManager.update(netLog); - if(either.isA()) { - /* Should throw after new LogUpdateCodeSegment */ - throw new IllegalStateException(); - } - } - for (String node : list) { - if (!node.equals(log.from)) { - ods.put(node, log.key, log.getVal()); - } - } - new LogUpdateCodeSegment(index); - } -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java --- a/src/main/java/jungle/app/bbs/codesegment/NullCodeSegment.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -package jungle.app.bbs.codesegment; - -import alice.codesegment.CodeSegment; - - -public class NullCodeSegment extends CodeSegment { - - @Override - public void run() { - - } - -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java --- a/src/main/java/jungle/app/bbs/codesegment/StartBBSCodeSegment.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -package jungle.app.bbs.codesegment; - -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import javax.servlet.Servlet; - -import jungle.app.bbs.BulletinBoard; -import jungle.app.bbs.CreateBoardMessageServlet; -import jungle.app.bbs.CreateBoardServlet; -import jungle.app.bbs.EditMessageServlet; -import jungle.app.bbs.NetworkJungleBulletinBoard; -import jungle.app.bbs.ShowBoardMessageServlet; -import jungle.app.bbs.ShowBoardsServlet; - -import org.mortbay.jetty.Server; -import org.mortbay.jetty.servlet.ServletHandler; -import org.mortbay.jetty.servlet.ServletHolder; - -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; - - -public class StartBBSCodeSegment extends CodeSegment { - - int bbsPort = 8080; - Receiver host = ids.create(CommandType.PEEK); - private Pattern pattern = Pattern.compile("^(node|cli)([0-9]+)$"); - - public StartBBSCodeSegment(int p) { - bbsPort = p; - host.setKey("host"); - } - - public StartBBSCodeSegment() { - host.setKey("host"); - } - - public void run() { - System.out.println("StartBBSCodeSegment"); - String name = host.asString(); - System.out.println("name : "+ name); - Matcher matcher = pattern.matcher(name); - matcher.find(); -// String type = matcher.group(1); - - /* Jetty registration */ - BulletinBoard cassaBBS = new NetworkJungleBulletinBoard(name); - String createBoardMessagePath = "/createBoardMessage"; - String createBoardPath = "/createBoard"; - String editMessagePath = "/editMessage"; - String showBoardMessagePath = "/showBoardMessage"; - - Servlet createBoardMessage = new CreateBoardMessageServlet(cassaBBS); - Servlet createBoard = new CreateBoardServlet(cassaBBS); - Servlet editBoardMessage = new EditMessageServlet(cassaBBS); - Servlet index = new ShowBoardsServlet(cassaBBS,createBoardPath,showBoardMessagePath); - Servlet board = new ShowBoardMessageServlet(cassaBBS,createBoardMessagePath,editMessagePath); - - Server serv = new Server(bbsPort); - ServletHandler context = new ServletHandler(); - context.addServletWithMapping(new ServletHolder(createBoardMessage),createBoardMessagePath); - context.addServletWithMapping(new ServletHolder(createBoard),createBoardPath); - context.addServletWithMapping(new ServletHolder(editBoardMessage),editMessagePath); - context.addServletWithMapping(new ServletHolder(index),"/"); - context.addServletWithMapping(new ServletHolder(board),showBoardMessagePath); - serv.addHandler(context); - try { - serv.start(); - } catch (Exception e) { - e.printStackTrace(); - } - new LogUpdateCodeSegment(); - } - -} diff -r 6e7724d55a72 -r 8f9811a1e00c src/main/java/jungle/app/bbs/transformer/MergeBBS.java --- a/src/main/java/jungle/app/bbs/transformer/MergeBBS.java Thu Nov 28 19:21:43 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -package jungle.app.bbs.transformer; - -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; - -public class MergeBBS implements NodeEditor { - - - public MergeBBS() { - - } - - @Override - public > Either edit(T _e) - { - return _e.getChildren().deleteChildAt(0); - } - - -}