view src/main/java/jp/ac/u_ryukyu/ie/cr/bbs/network/codesegment/LogUpdateCodeSegment.java @ 3:f3d30646c863

fix error
author tatsuki
date Mon, 27 Jun 2016 05:25:48 +0900
parents 3c188a5b69ef
children 766f7668521f
line wrap: on
line source

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.bbs.network.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 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 LogUpdateCodeSegment(index);
				throw new IllegalStateException();				
			}
		}
	}
}