view src/main/java/jp/ac/u_ryukyu/ie/cr/jungleNetwork/operations/NetworkNodeOperation.java @ 329:2a0cb1f0ba4e

rename Error package
author kono
date Sat, 08 Jul 2017 21:05:55 +0900
parents d6b81870216b
children
line wrap: on
line source

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


import jp.ac.u_ryukyu.ie.cr.jungle.store.Command;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.NodeOperation;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.jungle.util.jungleError.Error;
import org.msgpack.annotation.Message;

import java.nio.ByteBuffer;

@Message
public class NetworkNodeOperation implements NodeOperation {

    public int pos;
    public String key;
    public ByteBuffer value;
    public int commandType;

    private final static int NUM_PUT_ATTRIBUTE = 1;
    private final static int NUM_APPEND_CHILD = 2;
    private final static int NUM_DELETE_CHILD = 3;
    private final static int NUM_DELETE_ATTRIBUTE = 4;

    public NetworkNodeOperation() {
        pos = -2;
        key = null;
        value = null;
        commandType = 0;
    }

    public NetworkNodeOperation(NodeOperation _op) {
        pos = _op.getPosition();
        key = _op.getKey();
        value = _op.getValue();
        commandType = getCommandType(_op.getCommand());
    }

    private static int getCommandType(Command c) {
        switch (c) {
            case PUT_ATTRIBUTE:
                return NUM_PUT_ATTRIBUTE;
            case APPEND_CHILD:
                return NUM_APPEND_CHILD;
            case DELETE_CHILD:
                return NUM_DELETE_CHILD;
            case DELETE_ATTRIBUTE:
                return NUM_DELETE_ATTRIBUTE;
            default:
                break;
        } return 0;
    }

    public static Command getCommand(int num) {
        switch (num) {
            case NUM_PUT_ATTRIBUTE:
                return Command.PUT_ATTRIBUTE;
            case NUM_APPEND_CHILD:
                return Command.APPEND_CHILD;
            case NUM_DELETE_CHILD:
                return Command.DELETE_CHILD;
            case NUM_DELETE_ATTRIBUTE:
                return Command.DELETE_ATTRIBUTE;
            default:
                break;
        }
        return null;
    }

    public Command getCommand() {
        return getCommand(commandType);
    }

    public int getPosition() {
        return pos;
    }

    public String getKey() {
        return key;
    }

    public ByteBuffer getValue() {
        return value;
    }

    @Override
    public Either<Error, TreeNode> invoke(TreeNode _target) {
        switch (getCommand(commandType)) {
            case PUT_ATTRIBUTE:
                return _target.getAttributes().put(key, value);
            case APPEND_CHILD:
                return _target.getChildren().addNewChildAt(pos);
            case DELETE_CHILD:
                return _target.getChildren().deleteChildAt(pos);
            case DELETE_ATTRIBUTE:
                return _target.getAttributes().delete(key);
            default:
                break;
        }
        return null;
    }

}