view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java @ 188:868a746996ad

minner change
author tatsuki
date Fri, 17 Apr 2015 22:12:44 +0900
parents 066d9c5758dc
children
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;

import java.nio.ByteBuffer;

import fj.data.List;
import fj.data.Option;
import fj.data.TreeMap;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeAttributes;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;

public class DefaultTreeNodeAttribute implements TreeNodeAttributes {
    public List<TreeNode> children;
    public TreeMap<String, ByteBuffer> attrs;


    public DefaultTreeNodeAttribute(List<TreeNode> _children, TreeMap<String, ByteBuffer> _attrs) {
        children = _children;
        attrs = _attrs;
    }

    @Override
    public TreeMap<String, ByteBuffer> getAttributesAsRawMap() {
        return attrs;
    }

    @Override
    public Either<Error, TreeNode> delete(String _key) {
        if (_key == null) {
            return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
        }

        if (null != attrs.getLoop(_key)) {
        		return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
        	}

        TreeMap<String, ByteBuffer> newMap = attrs.delete(_key);
        TreeNode newNode = new DefaultTreeNode(children, newMap);
        return DefaultEither.newB(newNode);
    }

    @Override
    public Either<Error, TreeNode> put(String _key, ByteBuffer _value) {
        if (_key == null || _value == null) {
            return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
        }

        TreeMap<String, ByteBuffer> newMap = attrs.set(_key, _value);
        TreeNode newNode = new DefaultTreeNode(children, newMap);
        return DefaultEither.newB(newNode);
    }

    @Override
    public ByteBuffer get(String _key) {
        if (_key == null) {
            return null;
        }

        ByteBuffer result = attrs.getLoop(_key);
        return result;
    }

    @Override
    public String getString(String key) {
        ByteBuffer attribute = get(key);
        if (attribute != null)
            return new String(attribute.array());
        return null;
    }

    @Override
    public List<String> getKeys() {
        return attrs.keys();
    }
}