# HG changeset patch # User Nobuyasu Oshiro # Date 1389475163 -32400 # Node ID 0ea565624ddfc9806714a6b8bdcf4d89459ec7e1 # Parent 2e8034524259873fd9cdcfb25f7368bfd74a6ca3 Removed unnecessary file diff -r 2e8034524259 -r 0ea565624ddf src/main/java/app/bbs/PersistentJungleBulletinBoard.java --- a/src/main/java/app/bbs/PersistentJungleBulletinBoard.java Sun Jan 12 06:18:37 2014 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,299 +0,0 @@ -package app.bbs; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.util.Date; -import java.util.concurrent.atomic.AtomicInteger; - -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.bbs.BoardMessage; -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.persistent.ChangeList; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListReader; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter; -import alice.jungle.core.NetworkDefaultJungle; -import alice.jungle.persistent.NetworkJournal; -import alice.jungle.persistent.PersistentJournal; -import alice.jungle.transaction.JungleUpdater; - -public class PersistentJungleBulletinBoard implements NetworkBulletinBoard -{ - private final Jungle jungle; - private final NetworkJournal journal; - private final String LOG_DIR = "./log"; - - public PersistentJungleBulletinBoard(String _uuid) throws FileNotFoundException - { - journal = new PersistentJournal(); - jungle = new NetworkDefaultJungle(journal, _uuid,new DefaultTreeEditor(new DefaultTraverser())); - BulletinBoardJungleManager.setJungle(jungle); - } - - public void init() { - checkAndCreateLogDirectory(); - try { - commitLogRecover(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void checkAndCreateLogDirectory() { - File logFile = new File(LOG_DIR); - if(!logFile.exists()) { - logFile.mkdir(); - return; - } - if (logFile.isFile()) { - logFile.delete(); - logFile.mkdir(); - } - } - - public void commitLogRecover() throws IOException { - File[] logFiles = new File(LOG_DIR).listFiles(); - for(File logFile : logFiles) { - commitLogRecover(logFile); - logFile.delete(); - } - if(jungle.getTreeByName("boards") == null) { - jungle.createNewTree("boards"); - } - } - - private void commitLogRecover(File logFile) throws IOException { - journal.setInputFile(logFile); - ChangeListReader reader = journal.getReader(); - if (reader == null) return; - for (ChangeList chList : reader) { - String treeName = chList.getTreeName(); - JungleTree tree = jungle.getTreeByName(treeName); - if(tree == null) { - tree = jungle.createNewTree(treeName); - } - JungleTreeEditor editor = tree.getLocalTreeEditor(); - Either either = JungleUpdater.edit(editor, chList); - editor = either.b(); - if(either.isA()) { - throw new IOException("Failed commit log recovery"); - } - editor.success(); - } - } - - public Iterable getBoards() - { - JungleTree tree = jungle.getTreeByName("boards"); - 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(); - final long timestamp = new Date().getTime(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - either = editor.putAttribute(root.add(0),"timestamp", tBuffer.putLong(timestamp)); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - Either result = editor.success(); - if(result.isA()){ - throw new IllegalStateException(); - } - - - tree = jungle.getTreeByName(_name); - editor = tree.getTreeEditor(); - either = editor.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 tBuffer2 = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer2.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - - either = editor.edit(root.add(0),e); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - editor.success(); - } - - public void createBoardMessage(final String _board,final String _author,final String _message,final String _editKey) - { - JungleTree tree = jungle.getTreeByName(_board); - if(tree == null){ - throw new IllegalStateException(); - } - - Either either; - do{ - Node node = tree.getRootNode(); - int size = node.getChildren().size(); - DefaultNodePath path = new DefaultNodePath(); - - JungleTreeEditor editor = tree.getTreeEditor(); - either = editor.addNewChildAt(path,size); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - final long timestamp = new Date().getTime(); - NodeEditor e = new NodeEditor(){ - public > Either edit(T _e){ - _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); - _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); - _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - path = path.add(size); - either = editor.edit(path,e); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - - }while(either.isA()); - } - - public void editMessage(String _board,String _uuid,final String _author,final String _message,final String _editKey) - { - for(;;) { - DefaultNodePath path = new DefaultNodePath(); - path = path.add(Integer.parseInt(_uuid)); - - JungleTree tree = jungle.getTreeByName(_board); - JungleTreeEditor editor = tree.getTreeEditor(); - final long timestamp = new Date().getTime(); - NodeEditor e = new NodeEditor(){ - public > Either edit(T _e){ - _e = _e.getAttributes().put("author",ByteBuffer.wrap(_author.getBytes())).b(); - _e = _e.getAttributes().put("mes",ByteBuffer.wrap(_message.getBytes())).b(); - _e = _e.getAttributes().put("key",ByteBuffer.wrap(_editKey.getBytes())).b(); - ByteBuffer tBuffer = ByteBuffer.allocate(16); - _e = _e.getAttributes().put("timestamp",tBuffer.putLong(timestamp)).b(); - return DefaultEither.newB(_e); - } - }; - - Either either = editor.edit(path,e); - if(either.isA()){ - throw new IllegalStateException(); - } - editor = either.b(); - either = editor.success(); - if(!either.isA()) { - return; - } - } - - } - - public Iterable getMessages(String _boardName) - { - JungleTree tree = jungle.getTreeByName(_boardName); - Node node = tree.getRootNode(); - Children chs = node.getChildren(); - - final AtomicInteger counter = new AtomicInteger(0); - IterableConverter.Converter converter = new IterableConverter.Converter(){ - public BoardMessage conv(Node _b) { - String uuid = Integer.toString(counter.get()); - String author = new String(_b.getAttributes().get("author").array()); - String message = new String(_b.getAttributes().get("mes").array()); - counter.incrementAndGet(); - return new BoardMessageImpl(author,message,uuid); - } - }; - return new IterableConverter(chs,converter); - } - - - - private static class BoardMessageImpl implements BoardMessage - { - private final String author; - private final String message; - private final String uuid; - - public BoardMessageImpl(String _author,String _message,String _uuid) - { - author = _author; - message = _message; - uuid = _uuid; - } - - public String getAuthor() - { - return author; - } - - public String getMessage() - { - return message; - } - - public String getUUID() - { - return uuid; - } - } - - - -}