view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java @ 52:8c6ff361b68a

sleepy
author Shoshi TAMAKI
date Fri, 08 Feb 2013 03:50:21 +0900
parents src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/ClonableDefaultAttributes.java@ed6737db637a
children 5969848b1bb8
line wrap: on
line source

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

import java.nio.ByteBuffer;
import fj.data.TreeMap;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
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<DefaultTreeNode>
{
	private final DefaultNode wrap;
	
	public DefaultTreeNodeAttribute(DefaultNode _wrap)
	{
		wrap = _wrap;
	}

	@Override
	public Either<Error,DefaultTreeNode> delete(String _key)
	{
		if(_key == null){
			return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
		}
		
		DefaultAttributes attrs = wrap.getAttributes();
		DefaultChildren children = wrap.getChildren();
		
		TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
		if(!raw.contains(_key)){
			return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
		}
		
		TreeMap<String,ByteBuffer> newMap = raw.delete(_key);
		
		DefaultNode newNode = new DefaultNode(children.getChildrenAsRawList(),newMap);
		
		return DefaultEither.newB(new DefaultTreeNode(newNode));
	}

	@Override
	public Either<Error,DefaultTreeNode> put(String _key, ByteBuffer _value)
	{
		if(_key == null || _value == null){
			return DefaultEither.newA(NodeEditorError.NULL_VALUE_NOT_ALLOWED);
		}
		
		DefaultAttributes attrs = wrap.getAttributes();
		DefaultChildren children = wrap.getChildren();
		
		TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
		TreeMap<String,ByteBuffer> newMap = raw.set(_key,_value);
		
		DefaultNode newNode = new DefaultNode(children.getChildrenAsRawList(),newMap);
		
		return DefaultEither.newB(new DefaultTreeNode(newNode));
	}

	@Override
	public ByteBuffer get(String _key)
	{
		return wrap.getAttributes().get(_key);
	}
}