Mercurial > hg > Members > tatsuki > bbs
view src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/bbs/NetworkJungleBulletinBoard.java @ 9:2890ae6b1aef
network browsing
author | tatsuki |
---|---|
date | Fri, 03 Feb 2017 02:16:51 +0900 |
parents | 766f7668521f |
children |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.bbs.network.bbs; import jp.ac.u_ryukyu.ie.cr.bbs.local.browsing.JungleBrowsingBulletinBoard; import jp.ac.u_ryukyu.ie.cr.jungle.Jungle; import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeList; import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListReader; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.jungle.tree.JungleTree; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.core.NetworkDefaultJungle; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.AliceJournal; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.NetworkJournal; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.persistent.PersistentJournal; import jp.ac.u_ryukyu.ie.cr.jungleNetwork.transaction.JungleUpdater; import java.io.File; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; public class NetworkJungleBulletinBoard extends JungleBrowsingBulletinBoard implements NetworkBulletinBoard { private final Jungle jungle; private final NetworkJournal journal; private final String LOG_DIR; private Boolean persistentFlag; private AtomicInteger requestCounter; //使われてない? private long renewTime; private NetworkJungleBulletinBoard(String _uuid, NetworkJournal journal) { this(new NetworkDefaultJungle(journal, _uuid), journal); } private NetworkJungleBulletinBoard(Jungle jungle, NetworkJournal journal) { super(jungle); this.jungle = jungle; this.journal = journal; BulletinBoardJungleManager.setJungle(jungle); this.persistentFlag = false; this.requestCounter = BulletinBoardJungleManager.getRequestCounter(); this.LOG_DIR = "./log"; this.renewTime = 0; } public NetworkJungleBulletinBoard(String _uuid) { this(_uuid, new AliceJournal()); this.jungle.createNewTree("boards"); } public static NetworkBulletinBoard NewPersistentJungle(String _uuid) { NetworkJungleBulletinBoard board = new NetworkJungleBulletinBoard(_uuid, new PersistentJournal()); board.persistentFlag = true; return board; } public void init() { if (!persistentFlag) { return; } checkAndCreateLogDirectory(); try { commitLogRecover(); } catch (IOException e) { e.printStackTrace(); } } public void checkAndCreateLogDirectory() { File logFile = new File(LOG_DIR); if (!logFile.exists()) { logFile.mkdir(); return; } if (logFile.isFile()) { logFile.delete(); logFile.mkdir(); } } public void commitLogRecover() throws IOException { File[] logFiles = new File(LOG_DIR).listFiles(); for (File logFile : logFiles) { commitLogRecover(logFile); logFile.delete(); } if (jungle.getTreeByName("boards") == null) { jungle.createNewTree("boards"); } } private void commitLogRecover(File logFile) throws IOException { journal.setInputFile(logFile); ChangeListReader reader = journal.getReader(); if (reader == null) return; for (ChangeList chList : reader) { String treeName = chList.getTreeName(); JungleTree tree = jungle.getTreeByName(treeName); if (tree == null) { tree = jungle.createNewTree(treeName); } JungleTreeEditor editor = tree.getLocalJungleTreeEditor(); Either<Error, JungleTreeEditor> either = JungleUpdater.edit(editor, chList); editor = either.b(); if (either.isA()) { throw new IOException("Failed commit log recovery"); } editor.success(); } } public long getRenewTime(String _boardName) { return renewTime; } public int getRequestNum() { return requestCounter.get(); } }