view src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/codesegment/LogUpdateCodeSegment.java @ 339:7d40ac7e693f

rename LogUpdateCodeSegment
author suruga
date Mon, 28 Aug 2017 17:19:44 +0900
parents src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/codesegment/LOgUpdateCodeSegment.java@7a7d5d175c0c
children ae75a2d618f4
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.jungleNetwork.codesegment;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor.JungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;
import jp.ac.u_ryukyu.ie.cr.jungleNetwork.operations.NetworkTreeOperationLog;

import java.util.List;

/**
 * Created by kono on 2017/08/27.
 */
public class LogUpdateCodeSegment extends CodeSegment {

    Receiver log = ids.create(CommandType.TAKE);
    Receiver clist = ids.create(CommandType.PEEK);
    Receiver updator = ids.create(CommandType.TAKE);

    public LogUpdateCodeSegment() {
        log.setKey("log");
        clist.setKey("_CLIST");
        updator.setKey("updator");
    }

    public LogUpdateCodeSegment(int index) {
        log.setKey("log", index);
        clist.setKey("_CLIST");;
        updator.setKey("updator");
    }

    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());
            }
        }
        JungleDistributedUpdator u = updator.asClass(JungleDistributedUpdator.class);
        if (!log.from.equals("local")) {
            Either<Error, JungleTreeEditor> either = u.update(netLog);
            if(either.isA()) {
                new LogUpdateCodeSegment(index);
                throw new IllegalStateException();
            }
        }
        ods.put("updator",u);
    }
}