# HG changeset patch # User one # Date 1376987889 -32400 # Node ID 29127ac788a65d2768cb44fc73bd122baf5b134a # Parent ebf42371454bae7f27a86c94058885506c79e546 move some files diff -r ebf42371454b -r 29127ac788a6 .classpath --- a/.classpath Wed Aug 14 17:44:09 2013 +0900 +++ b/.classpath Tue Aug 20 17:38:09 2013 +0900 @@ -1,6 +1,7 @@ + diff -r ebf42371454b -r 29127ac788a6 src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java --- a/src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/alice/jungle/transaction/NetworkDefaultJungleTreeEditor.java Tue Aug 20 17:38:09 2013 +0900 @@ -1,5 +1,6 @@ package alice.jungle.transaction; + import java.nio.ByteBuffer; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; @@ -152,6 +153,5 @@ public String getUpdaterName() { return updaterName; } - } diff -r ebf42371454b -r 29127ac788a6 src/alice/jungle/transaction/NetworkTransactionManager.java --- a/src/alice/jungle/transaction/NetworkTransactionManager.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/alice/jungle/transaction/NetworkTransactionManager.java Tue Aug 20 17:38:09 2013 +0900 @@ -23,8 +23,8 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.codesegment.LogUpdateCodeSegment; -import jungle.test.bbs.codesegment.NullCodeSegmentForUpdate; +import jungle.app.bbs.codesegment.LogUpdateCodeSegment; +import jungle.app.bbs.codesegment.NullCodeSegmentForUpdate; public class NetworkTransactionManager> implements TransactionManager { diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/BoardMessage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/BoardMessage.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,8 @@ +package jungle.app.bbs; + +public interface BoardMessage +{ + public String getUUID(); + public String getAuthor(); + public String getMessage(); +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/BulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/BulletinBoard.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,11 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/CassandraBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/CassandraBulletinBoard.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,192 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/CreateBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/CreateBoardMessageServlet.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,40 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/CreateBoardServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/CreateBoardServlet.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,39 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/DistributeApp.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/DistributeApp.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,18 @@ +package jungle.app.bbs; + + +import jungle.app.bbs.codesegment.StartBBSCodeSegment; + + +import alice.jungle.remote.RemoteConfig; +import alice.topology.node.TopologyNode; + + +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/EditMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/EditMessageServlet.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,64 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/HectorSample.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/HectorSample.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,70 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/IterableConverter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/IterableConverter.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,52 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/JungleManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/JungleManager.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,125 @@ +package jungle.app.bbs; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Iterator; + +import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; +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.impl.DefaultNodePath; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog; +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.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 JungleManager() { + + } + + 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) { + DefaultNodePath path = new DefaultNodePath(); + NodeOperation nodeOp = op.getNodeOperation(); + Command c = nodeOp.getCommand(); + String key = ""; + switch (c) { + case PUT_ATTRIBUTE: + path = path.add(pos); + 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(DefaultTreeOperationLogContainer container) { + DefaultTreeOperationLog log = null; + try { + log = container.convert(); + } catch (IOException e) { + e.printStackTrace(); + } + String treeName = container.getTreeName(); + if (JungleManager.getJungle().getTreeByName(treeName) == null) { + if(null == JungleManager.getJungle().createNewTree(treeName)){ + throw new IllegalStateException(); + } + } + JungleTree tree = JungleManager.getJungle().getTreeByName(treeName); + JungleTreeEditor editor = tree.getTreeEditor(); + int pos = checkTimeStamp(tree.getRootNode(), container.getTimeStamp(), container.getPosition()); + Either either = JungleManager.edit(editor, log, pos); + if(either.isA()) { + throw new IllegalStateException(); + } + editor = either.b(); + either = editor.success(); + if(either.isA()) { + throw new IllegalStateException(); + } + return either; + } + + + + private static int checkTimeStamp(Node node, long newNodeTimeStamp, int containerPosition) { + 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 containerPosition; + } + if(n.getAttributes().get("timestamp") != null) { + childTimeStamp = n.getAttributes().get("timestamp").getLong(); + if (newNodeTimeStamp < childTimeStamp) { + break; + } + } + count++; + } + return count; + } +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/NetworkJungleBulletinBoard.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/NetworkJungleBulletinBoard.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,283 @@ +package jungle.app.bbs; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Date; +import java.util.concurrent.atomic.AtomicInteger; + +import alice.jungle.core.NetworkDefaultJungle; +import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; +import alice.jungle.transaction.NetworkDefaultJungleTreeEditor; +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.operations.TreeOperation; +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.transaction.DefaultTreeNode; +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; +import jungle.app.bbs.codesegment.HashLogUpdateCodeSegment; + +public class NetworkJungleBulletinBoard implements BulletinBoard +{ + private final Jungle jungle; + + public NetworkJungleBulletinBoard(String _serverName) + { + jungle = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName); + 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(); + /* Put DataSegment */ + try { + putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp); + } catch (IOException e1) { + e1.printStackTrace(); + } + + 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(); + /* Put DataSegment */ + try { + putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp); + } catch (IOException e1) { + e1.printStackTrace(); + } + + } + + 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(); + try { + NetworkDefaultJungleTreeEditor netEditor = (NetworkDefaultJungleTreeEditor) editor; + putTreeOperationLog(netEditor, size, timestamp); + } catch (IOException e1) { + e1.printStackTrace(); + } + }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(); + try { + putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, Integer.parseInt(_uuid), timestamp); + } catch (IOException e1) { + e1.printStackTrace(); + } + 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 void putTreeOperationLog(NetworkDefaultJungleTreeEditor editor, int pos, long timestamp) throws IOException { + String uuid = editor.getID(); + String treeName = editor.getTreeName(); + String updaterName = editor.getUpdaterName(); + String revision = editor.getRevision(); + Iterable log = editor.getTreeOperationLog(); + putDataSegment(uuid, treeName, updaterName, log, revision, pos,timestamp); + } + + private void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable _log, String nextRevision, int pos, long timestamp) throws IOException { + DefaultTreeOperationLogContainer container = new DefaultTreeOperationLogContainer(); + container.setTreeName(_treeName); + container.setUUID(_uuid); + container.setUpdaterName(_updaterName); + container.setRevision(nextRevision); + container.setPosition(pos); + container.unconvert(_log); + container.setTimeStamp(timestamp); + HashLogUpdateCodeSegment cs = new HashLogUpdateCodeSegment(); + cs.ods.put("log", container); + cs.ods.put("logString", container.getHashLogString()); + /* If this node is not Root node, push log to parent node's DS */ + if(!_updaterName.equals("node0")) { + cs.ods.put("parent", "childLog", container); + } + } + + + 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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/ShowBoardMessageServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/ShowBoardMessageServlet.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,60 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/ShowBoardsServlet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/ShowBoardsServlet.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,55 @@ +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 ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/codesegment/ChildLogCheckCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/codesegment/ChildLogCheckCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,55 @@ +package jungle.app.bbs.codesegment; + + + +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; +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import alice.jungle.datasegment.HashSetDataSegment; +import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; + +public class ChildLogCheckCodeSegment extends CodeSegment { + + Receiver host = ids.create(CommandType.PEEK); + Receiver childLog = ids.create(CommandType.TAKE); + Receiver hashLog = ids.create(CommandType.PEEK); + + public ChildLogCheckCodeSegment() { + host.setKey("host"); + childLog.setKey("local","childLog"); + hashLog.setKey("hashLog"); + } + + public ChildLogCheckCodeSegment(int index) { + host.setKey("host"); + childLog.setKey("local","childLog", index); + hashLog.setKey("hashLog"); + } + + public void run() { + int index = childLog.index; + String hostName = host.asString(); + DefaultTreeOperationLogContainer container = childLog.asClass(DefaultTreeOperationLogContainer.class); + HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); + if(ds.hash.contains(container.getHashLogString())) { + ods.update("hashLog", ds); + new LogUpdateCodeSegment(index); + return; + } + Either either = JungleManager.update(container); + if(either.isA()) { + throw new IllegalStateException(); + } + ds.hash.add(container.getHashLogString()); + ods.update("hashLog", ds); + ods.put("log", container); + new ChildLogCheckCodeSegment(index); + if(!hostName.equals("node0")) { + ods.put("parent", "childLog", container); + } + } +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/codesegment/HashLogUpdateCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/codesegment/HashLogUpdateCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,24 @@ +package jungle.app.bbs.codesegment; + +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import alice.jungle.datasegment.HashSetDataSegment; + +public class HashLogUpdateCodeSegment extends CodeSegment { + + Receiver hashLog = ids.create(CommandType.PEEK); + Receiver logString = ids.create(CommandType.TAKE); + + public HashLogUpdateCodeSegment() { + hashLog.setKey("hashLog"); + logString.setKey("logString"); + } + + public void run() { + HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); + String str = logString.asString(); + ds.hash.add(str); + ods.put("hashLog", ds); + } +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/codesegment/LogUpdateCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,52 @@ +package jungle.app.bbs.codesegment; + + + +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; +import alice.codesegment.CodeSegment; +import alice.datasegment.CommandType; +import alice.datasegment.Receiver; +import alice.jungle.datasegment.HashSetDataSegment; +import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; + +public class LogUpdateCodeSegment extends CodeSegment { + + Receiver parentLog = ids.create(CommandType.PEEK); + Receiver host = ids.create(CommandType.PEEK); + Receiver hashLog = ids.create(CommandType.PEEK); + + public LogUpdateCodeSegment() { + parentLog.setKey("parent", "log"); + host.setKey("host"); + hashLog.setKey("hashLog"); + } + + public LogUpdateCodeSegment(int index) { + parentLog.setKey("parent", "log", index); + host.setKey("host"); + hashLog.setKey("hashLog"); + } + + public void run() { + int index = parentLog.index; +// String hostName = host.asString(); + DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class); + HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); + if(ds.hash.contains(container.getHashLogString())) { + ods.update("hashLog", ds); + new LogUpdateCodeSegment(index); + return; + } + Either either = JungleManager.update(container); + if(either.isA()) { + throw new IllegalStateException(); + } + ds.hash.add(container.getHashLogString()); + ods.update("hashLog", ds); + ods.put("log", container); + new LogUpdateCodeSegment(index); + } +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/codesegment/NullCodeSegmentForUpdate.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/codesegment/NullCodeSegmentForUpdate.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,11 @@ +package jungle.app.bbs.codesegment; + +import alice.codesegment.CodeSegment; + +public class NullCodeSegmentForUpdate extends CodeSegment{ + + public void run() { + + } + +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/codesegment/StartBBSCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,89 @@ +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; +import alice.jungle.datasegment.HashSetDataSegment; + +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 ChildLogCheckCodeSegment(); + HashSetDataSegment hashLog = new HashSetDataSegment(); + ods.put("hashLog", hashLog); + + int num = new Integer(matcher.group(2)); + if (num != 0) { +// try {Thread.sleep(100);} catch(Exception e) { e.printStackTrace(); } + new LogUpdateCodeSegment(); + } + + + + } + +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/app/bbs/transformer/MergeBBS.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jungle/app/bbs/transformer/MergeBBS.java Tue Aug 20 17:38:09 2013 +0900 @@ -0,0 +1,22 @@ +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); + } + + +} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/alice/CopyAttrJungle2.java --- a/src/jungle/test/alice/CopyAttrJungle2.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/alice/CopyAttrJungle2.java Tue Aug 20 17:38:09 2013 +0900 @@ -8,7 +8,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import jungle.test.core.practice.PrintChildrenAttribute; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/BoardMessage.java --- a/src/jungle/test/bbs/BoardMessage.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -package jungle.test.bbs; - -public interface BoardMessage -{ - public String getUUID(); - public String getAuthor(); - public String getMessage(); -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/BulletinBoard.java --- a/src/jungle/test/bbs/BulletinBoard.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/CassandraBulletinBoard.java --- a/src/jungle/test/bbs/CassandraBulletinBoard.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/CreateBoardMessageServlet.java --- a/src/jungle/test/bbs/CreateBoardMessageServlet.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/CreateBoardServlet.java --- a/src/jungle/test/bbs/CreateBoardServlet.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/DistributeApp.java --- a/src/jungle/test/bbs/DistributeApp.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -package jungle.test.bbs; - - -import jungle.test.bbs.codesegment.StartBBSCodeSegment; - - -import alice.jungle.remote.RemoteConfig; -import alice.topology.node.TopologyNode; - - -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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/EditMessageServlet.java --- a/src/jungle/test/bbs/EditMessageServlet.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/HectorSample.java --- a/src/jungle/test/bbs/HectorSample.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/IterableConverter.java --- a/src/jungle/test/bbs/IterableConverter.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/JungleManager.java --- a/src/jungle/test/bbs/JungleManager.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ -package jungle.test.bbs; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.Iterator; - -import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; -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.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog; -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.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 JungleManager() { - - } - - 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) { - DefaultNodePath path = new DefaultNodePath(); - NodeOperation nodeOp = op.getNodeOperation(); - Command c = nodeOp.getCommand(); - String key = ""; - switch (c) { - case PUT_ATTRIBUTE: - path = path.add(pos); - 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(DefaultTreeOperationLogContainer container) { - DefaultTreeOperationLog log = null; - try { - log = container.convert(); - } catch (IOException e) { - e.printStackTrace(); - } - String treeName = container.getTreeName(); - if (JungleManager.getJungle().getTreeByName(treeName) == null) { - if(null == JungleManager.getJungle().createNewTree(treeName)){ - throw new IllegalStateException(); - } - } - JungleTree tree = JungleManager.getJungle().getTreeByName(treeName); - JungleTreeEditor editor = tree.getTreeEditor(); - int pos = checkTimeStamp(tree.getRootNode(), container.getTimeStamp(), container.getPosition()); - Either either = JungleManager.edit(editor, log, pos); - if(either.isA()) { - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - if(either.isA()) { - throw new IllegalStateException(); - } - return either; - } - - - - private static int checkTimeStamp(Node node, long newNodeTimeStamp, int containerPosition) { - 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 containerPosition; - } - if(n.getAttributes().get("timestamp") != null) { - childTimeStamp = n.getAttributes().get("timestamp").getLong(); - if (newNodeTimeStamp < childTimeStamp) { - break; - } - } - count++; - } - return count; - } -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/NetworkJungleBulletinBoard.java --- a/src/jungle/test/bbs/NetworkJungleBulletinBoard.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -package jungle.test.bbs; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.Date; -import java.util.concurrent.atomic.AtomicInteger; - -import alice.jungle.core.NetworkDefaultJungle; -import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; -import alice.jungle.transaction.NetworkDefaultJungleTreeEditor; -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.operations.TreeOperation; -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.transaction.DefaultTreeNode; -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; -import jungle.test.bbs.codesegment.HashLogUpdateCodeSegment; - -public class NetworkJungleBulletinBoard implements BulletinBoard -{ - private final Jungle jungle; - - public NetworkJungleBulletinBoard(String _serverName) - { - jungle = new NetworkDefaultJungle(null,"hoge",new DefaultTreeEditor(new DefaultTraverser()), _serverName); - 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(); - /* Put DataSegment */ - try { - putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp); - } catch (IOException e1) { - e1.printStackTrace(); - } - - 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(); - /* Put DataSegment */ - try { - putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, 0, timestamp); - } catch (IOException e1) { - e1.printStackTrace(); - } - - } - - 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(); - try { - NetworkDefaultJungleTreeEditor netEditor = (NetworkDefaultJungleTreeEditor) editor; - putTreeOperationLog(netEditor, size, timestamp); - } catch (IOException e1) { - e1.printStackTrace(); - } - }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(); - try { - putTreeOperationLog((NetworkDefaultJungleTreeEditor)editor, Integer.parseInt(_uuid), timestamp); - } catch (IOException e1) { - e1.printStackTrace(); - } - 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 void putTreeOperationLog(NetworkDefaultJungleTreeEditor editor, int pos, long timestamp) throws IOException { - String uuid = editor.getID(); - String treeName = editor.getTreeName(); - String updaterName = editor.getUpdaterName(); - String revision = editor.getRevision(); - Iterable log = editor.getTreeOperationLog(); - putDataSegment(uuid, treeName, updaterName, log, revision, pos,timestamp); - } - - private void putDataSegment(String _uuid, String _treeName, String _updaterName, Iterable _log, String nextRevision, int pos, long timestamp) throws IOException { - DefaultTreeOperationLogContainer container = new DefaultTreeOperationLogContainer(); - container.setTreeName(_treeName); - container.setUUID(_uuid); - container.setUpdaterName(_updaterName); - container.setRevision(nextRevision); - container.setPosition(pos); - container.unconvert(_log); - container.setTimeStamp(timestamp); - HashLogUpdateCodeSegment cs = new HashLogUpdateCodeSegment(); - cs.ods.put("log", container); - cs.ods.put("logString", container.getHashLogString()); - /* If this node is not Root node, push log to parent node's DS */ - if(!_updaterName.equals("node0")) { - cs.ods.put("parent", "childLog", container); - } - } - - - 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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/ShowBoardMessageServlet.java --- a/src/jungle/test/bbs/ShowBoardMessageServlet.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/ShowBoardsServlet.java --- a/src/jungle/test/bbs/ShowBoardsServlet.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/codesegment/ChildLogCheckCodeSegment.java --- a/src/jungle/test/bbs/codesegment/ChildLogCheckCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -package jungle.test.bbs.codesegment; - - - -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.test.bbs.JungleManager; -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; -import alice.jungle.datasegment.HashSetDataSegment; -import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; - -public class ChildLogCheckCodeSegment extends CodeSegment { - - Receiver host = ids.create(CommandType.PEEK); - Receiver childLog = ids.create(CommandType.TAKE); - Receiver hashLog = ids.create(CommandType.PEEK); - - public ChildLogCheckCodeSegment() { - host.setKey("host"); - childLog.setKey("local","childLog"); - hashLog.setKey("hashLog"); - } - - public ChildLogCheckCodeSegment(int index) { - host.setKey("host"); - childLog.setKey("local","childLog", index); - hashLog.setKey("hashLog"); - } - - public void run() { - int index = childLog.index; - String hostName = host.asString(); - DefaultTreeOperationLogContainer container = childLog.asClass(DefaultTreeOperationLogContainer.class); - HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); - if(ds.hash.contains(container.getHashLogString())) { - ods.update("hashLog", ds); - new LogUpdateCodeSegment(index); - return; - } - Either either = JungleManager.update(container); - if(either.isA()) { - throw new IllegalStateException(); - } - ds.hash.add(container.getHashLogString()); - ods.update("hashLog", ds); - ods.put("log", container); - new ChildLogCheckCodeSegment(index); - if(!hostName.equals("node0")) { - ods.put("parent", "childLog", container); - } - } -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/codesegment/HashLogUpdateCodeSegment.java --- a/src/jungle/test/bbs/codesegment/HashLogUpdateCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -package jungle.test.bbs.codesegment; - -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; -import alice.jungle.datasegment.HashSetDataSegment; - -public class HashLogUpdateCodeSegment extends CodeSegment { - - Receiver hashLog = ids.create(CommandType.PEEK); - Receiver logString = ids.create(CommandType.TAKE); - - public HashLogUpdateCodeSegment() { - hashLog.setKey("hashLog"); - logString.setKey("logString"); - } - - public void run() { - HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); - String str = logString.asString(); - ds.hash.add(str); - ods.put("hashLog", ds); - } -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java --- a/src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -package jungle.test.bbs.codesegment; - - - -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.test.bbs.JungleManager; -import alice.codesegment.CodeSegment; -import alice.datasegment.CommandType; -import alice.datasegment.Receiver; -import alice.jungle.datasegment.HashSetDataSegment; -import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; - -public class LogUpdateCodeSegment extends CodeSegment { - - Receiver parentLog = ids.create(CommandType.PEEK); - Receiver host = ids.create(CommandType.PEEK); - Receiver hashLog = ids.create(CommandType.PEEK); - - public LogUpdateCodeSegment() { - parentLog.setKey("parent", "log"); - host.setKey("host"); - hashLog.setKey("hashLog"); - } - - public LogUpdateCodeSegment(int index) { - parentLog.setKey("parent", "log", index); - host.setKey("host"); - hashLog.setKey("hashLog"); - } - - public void run() { - int index = parentLog.index; -// String hostName = host.asString(); - DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class); - HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); - if(ds.hash.contains(container.getHashLogString())) { - ods.update("hashLog", ds); - new LogUpdateCodeSegment(index); - return; - } - Either either = JungleManager.update(container); - if(either.isA()) { - throw new IllegalStateException(); - } - ds.hash.add(container.getHashLogString()); - ods.update("hashLog", ds); - ods.put("log", container); - new LogUpdateCodeSegment(index); - } -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/codesegment/NullCodeSegmentForUpdate.java --- a/src/jungle/test/bbs/codesegment/NullCodeSegmentForUpdate.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -package jungle.test.bbs.codesegment; - -import alice.codesegment.CodeSegment; - -public class NullCodeSegmentForUpdate extends CodeSegment{ - - public void run() { - - } - -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/codesegment/StartBBSCodeSegment.java --- a/src/jungle/test/bbs/codesegment/StartBBSCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -package jungle.test.bbs.codesegment; - -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import javax.servlet.Servlet; - -import jungle.test.bbs.BulletinBoard; -import jungle.test.bbs.CreateBoardMessageServlet; -import jungle.test.bbs.CreateBoardServlet; -import jungle.test.bbs.EditMessageServlet; -import jungle.test.bbs.NetworkJungleBulletinBoard; -import jungle.test.bbs.ShowBoardMessageServlet; -import jungle.test.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; -import alice.jungle.datasegment.HashSetDataSegment; - -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 ChildLogCheckCodeSegment(); - HashSetDataSegment hashLog = new HashSetDataSegment(); - ods.put("hashLog", hashLog); - - int num = new Integer(matcher.group(2)); - if (num != 0) { -// try {Thread.sleep(100);} catch(Exception e) { e.printStackTrace(); } - new LogUpdateCodeSegment(); - } - - - - } - -} diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/bbs/transformer/MergeBBS.java --- a/src/jungle/test/bbs/transformer/MergeBBS.java Wed Aug 14 17:44:09 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -package jungle.test.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 ebf42371454b -r 29127ac788a6 src/jungle/test/codesegment/operation/ShowAttribute.java --- a/src/jungle/test/codesegment/operation/ShowAttribute.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/codesegment/operation/ShowAttribute.java Tue Aug 20 17:38:09 2013 +0900 @@ -10,7 +10,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/codesegment/operation/StartJungleCodeSegment.java --- a/src/jungle/test/codesegment/operation/StartJungleCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/codesegment/operation/StartJungleCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -8,7 +8,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DefaultTreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import alice.codesegment.CodeSegment; import alice.jungle.datasegment.store.operations.DefaultTreeOperationContainer; diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java --- a/src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/codesegment/operation/TestPutAttributeCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -17,7 +17,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import org.msgpack.type.Value; diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/codesegment/persistence/TestJungle.java --- a/src/jungle/test/codesegment/persistence/TestJungle.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/codesegment/persistence/TestJungle.java Tue Aug 20 17:38:09 2013 +0900 @@ -4,7 +4,7 @@ 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.store.TreeEditor; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import jungle.test.codesegment.operation.TestPutAttributeCodeSegment; public class TestJungle { diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/core/practice/LogReadCodeSegment.java --- a/src/jungle/test/core/practice/LogReadCodeSegment.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/core/practice/LogReadCodeSegment.java Tue Aug 20 17:38:09 2013 +0900 @@ -14,7 +14,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/core/practice/LogSendTest.java --- a/src/jungle/test/core/practice/LogSendTest.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/core/practice/LogSendTest.java Tue Aug 20 17:38:09 2013 +0900 @@ -12,7 +12,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; public class LogSendTest { diff -r ebf42371454b -r 29127ac788a6 src/jungle/test/core/practice/PrintChildrenAttribute.java --- a/src/jungle/test/core/practice/PrintChildrenAttribute.java Wed Aug 14 17:44:09 2013 +0900 +++ b/src/jungle/test/core/practice/PrintChildrenAttribute.java Tue Aug 20 17:38:09 2013 +0900 @@ -6,7 +6,7 @@ import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; -import jungle.test.bbs.JungleManager; +import jungle.app.bbs.JungleManager; import alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; @@ -34,11 +34,7 @@ } System.exit(0); - - - - - + }