Mercurial > hg > Members > nobuyasu > jungle-network
view src/alice/jungle/codesegment/LogUpdateCodeSegment.java @ 52:61b2de3f7730
add HashSetDataSegment and HashLogUpdateCodeSegment.
fix bugs
author | one |
---|---|
date | Sat, 13 Jul 2013 17:10:14 +0900 |
parents | 9e782b4eb06e |
children | ccfe9b5e8f11 |
line wrap: on
line source
package alice.jungle.codesegment; import java.io.IOException; 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.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 alice.codesegment.CodeSegment; import alice.datasegment.CommandType; import alice.datasegment.Receiver; import alice.jungle.datasegment.HashSetDataSegment; import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer; import alice.jungle.transaction.NetworkDefaultJungleTreeEditor; 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() { System.out.println("--LogUpdateCodeSegment--"); int index = parentLog.index; String h = host.asString(); DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class); HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class); System.out.println(container.getHashLogString()); if(ds.hash.contains(container.getHashLogString())) { ods.update("hashLog", ds); new LogUpdateCodeSegment(index); return; } 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(); Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, log); if(either.isA()) { throw new IllegalStateException(); } editor = either.b(); either = editor.success(); if(either.isA()) { throw new IllegalStateException(); } ds.hash.add(container.getHashLogString()); ods.update("hashLog", ds); System.out.println("ods.put log container"); ods.put("log", container); new LogUpdateCodeSegment(index); } private boolean updaterIsMe(String host, DefaultTreeOperationLogContainer container) { return host.equals(container.getServerName()); } }