diff src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java @ 2:3c188a5b69ef

add network bbs
author tatsuki
date Mon, 27 Jun 2016 05:06:19 +0900
parents
children f3d30646c863
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java	Mon Jun 27 05:06:19 2016 +0900
@@ -0,0 +1,48 @@
+package jp.ac.u_ryukyu.ie.cr.bbs.network.codesegment;
+
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
+import jp.ac.u_ryukyu.ie.cr.jungleNetwork.bbs.BulletinBoardJungleManager;
+import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog;
+
+import java.util.List;
+
+public class LogUpdateCodeSegment extends CodeSegment {
+	
+	Receiver log = ids.create(CommandType.TAKE);
+	Receiver clist = ids.create(CommandType.PEEK);
+	
+	public LogUpdateCodeSegment() {
+		log.setKey("log");
+		clist.setKey("_CLIST");;
+	}
+	
+	public LogUpdateCodeSegment(int index) {
+		log.setKey("log", index);
+		clist.setKey("_CLIST");;
+	}
+	
+	public void run() {
+		int index = log.index;
+		new jp.ac.u_ryukyu.ie.cr.jungleNetwork.bbs.codesegment.LogUpdateCodeSegment();
+		NetworkTreeOperationLog netLog = log.asClass(NetworkTreeOperationLog.class);
+		@SuppressWarnings("unchecked")
+		List<String> list = clist.asClass(List.class);
+		for (String node : list) {
+			if (!node.equals(log.from)) {
+				ods.put(node, log.key, log.getVal());
+			}
+		}
+		if (!log.from.equals("local")) {
+			Either<Error, JungleTreeEditor> either = BulletinBoardJungleManager.update(netLog);
+			if(either.isA()) {
+				new jp.ac.u_ryukyu.ie.cr.jungleNetwork.bbs.codesegment.LogUpdateCodeSegment(index);
+				throw new IllegalStateException();				
+			}
+		}
+	}
+}