view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeAttribute.java @ 87:4c6b915302a8

Delete Logging Node Hock
author one
date Thu, 04 Sep 2014 13:12:08 +0900
parents fb1dc448ac8c
children a1e20a440ddd
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.impl.logger.DefaultOperationLog;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.OperationLog;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation;
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;
	OperationLog log ;
	
	public DefaultTreeNodeAttribute(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
	{
		children = _children;
		attrs = _attrs;
		log = new DefaultOperationLog();
	}
	
	public DefaultTreeNodeAttribute(List<TreeNode> _children,TreeMap<String,ByteBuffer> _attrs,OperationLog _log)
	{
		children = _children;
		attrs = _attrs;
		log = _log;
	}

	@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(!attrs.contains(_key)){
			return DefaultEither.newA(NodeEditorError.DELETE_KEY_NOT_FOUND);
		}
		
		TreeMap<String,ByteBuffer> newMap = attrs.delete(_key);
		
		OperationLog op = new DefaultOperationLog();;
		TreeNode newNode = new DefaultTreeNode(children,newMap,op.add(new DeleteAttributeOperation(_key)));
		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);
		}
		
		//DefaultAttributes attrs = wrap.getAttributes();
		//DefaultChildren children = wrap.getChildren();
		
		//TreeMap<String,ByteBuffer> raw = attrs.getAttributesAsRawMap();
		TreeMap<String,ByteBuffer> newMap = attrs.set(_key,_value);
		TreeNode newNode = new DefaultTreeNode(children,newMap,log.add(new PutAttributeOperation(_key,_value)));
		
		return DefaultEither.newB(newNode);
	}

	@Override
	public ByteBuffer get(String _key)
	{
		if(_key == null){
			return null;
		}
		
		Option<ByteBuffer> result = attrs.get(_key);
		return result.isSome() ? result.some() : null;
	}
}