diff src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java @ 59:8a532ca5df80

refactoring LogUpdateCodeSegment and ChildLogCheckCodeSegment
author one
date Mon, 15 Jul 2013 10:59:53 +0900
parents src/alice/jungle/codesegment/LogUpdateCodeSegment.java@4851344e120e
children ebf42371454b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jungle/test/bbs/codesegment/LogUpdateCodeSegment.java	Mon Jul 15 10:59:53 2013 +0900
@@ -0,0 +1,52 @@
+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<Error, JungleTreeEditor> 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);
+	}
+}