Mercurial > hg > Members > nobuyasu > jungle-network
view src/alice/jungle/persistence/NetworkJournal.java @ 83:b3ccefdf2b43
Added PersistentExample
author | one |
---|---|
date | Fri, 25 Oct 2013 18:44:29 +0900 |
parents | b9dd8ec0e66e |
children | 82d1d3dac7bc |
line wrap: on
line source
package alice.jungle.persistence; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import org.msgpack.MessagePack; import alice.jungle.operations.NetworkTreeOperationLog; 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.persistent.ChangeListWriter; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Journal; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; public class NetworkJournal implements Journal { private static final NetworkChangeListWriter WRITER = new NetworkChangeListWriter(); private static final NetworkChangeListReader READER = new NetworkChangeListReader(); private static MessagePack msgpack = new MessagePack(); private static OutputStream out = null; private static InputStream in = null; public NetworkJournal() { } public NetworkJournal(File file) throws FileNotFoundException { out = new FileOutputStream(file, true); in = new FileInputStream(file); } @Override public ChangeListReader getReader() { return READER; } @Override public ChangeListWriter getWriter() { return WRITER; } public void close() throws IOException { out.close(); in.close(); } public void setOutputStream(OutputStream _out) { out = _out; } public OutputStream getOutputStream() { return out; } public void setInputStream(InputStream _in) { in = _in; } public InputStream getInputStream() { return in; } private static class NetworkChangeListWriter implements ChangeListWriter { @Override public Result write(ChangeList _operations) { NetworkTreeOperationLog log = new NetworkTreeOperationLog(_operations); try { msgpack.write(out, log); out.flush(); } catch (IOException e) { return null; } return Result.SUCCESS; } } public MessagePack getMessagePack() { return msgpack; } private static class NetworkChangeListReader implements ChangeListReader { @Override public ChangeListReader newReader() { return this; } @Override public ChangeList read() { try { final NetworkTreeOperationLog readLog = msgpack.read(in, NetworkTreeOperationLog.class); ChangeList cl = new ChangeList() { @Override public Iterator<TreeOperation> iterator() { return readLog.iterator(); } }; return cl; } catch (EOFException e){ // e.printStackTrace(); } catch (IOException e) { // e.printStackTrace(); } return null; } } }