view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java @ 78:540a27dde42f

Delete EnableNode and EnableNodeWrapper but not repair test program
author one
date Sun, 31 Aug 2014 00:44:35 +0900
parents 2fc0b0313dc0
children
line wrap: on
line source

/*package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl;

import java.nio.ByteBuffer;
import java.util.Iterator;


import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode;
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;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;

public class EditableNodeWrapper<T extends TreeNode<T>> implements EditableNode<EditableNodeWrapper<T>>
{
	private final T wrap;
	
	public EditableNodeWrapper(T target)
	{
		wrap = target;
	}

	@Override
	public EditableAttributes<EditableNodeWrapper<T>> getAttributes()
	{
		return new EditableAttributesWrapper<T>(wrap);
	}

	@Override
	public EditableChildren<EditableNodeWrapper<T>> getChildren()
	{
		return new EditableChildrenWrapper<T>(wrap);
	}
	
	public T getWrap()
	{
		return wrap;
	}

	private static class EditableAttributesWrapper<T extends TreeNode<T>> implements EditableAttributes<EditableNodeWrapper<T>>
	{
		private final TreeNodeAttributes<T> attributes;
		
		public EditableAttributesWrapper(TreeNode<T> _wrap)
		{
			attributes = _wrap.getAttributes();
		}
		
		@Override
		public ByteBuffer get(String _key)
		{
			return attributes.get(_key);
		}

		@Override
		public Either<Error, EditableNodeWrapper<T>> delete(String _key)
		{
			Either<Error,T> either = attributes.delete(_key);
			if(either.isA()){
				return DefaultEither.newA(either.a());
			}
			
			T newWrap = either.b();
			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(newWrap);
			return DefaultEither.newB(newWrapper);
		}

		@Override
		public Either<Error, EditableNodeWrapper<T>> put(String _key,ByteBuffer _value)
		{
			Either<Error,T> either = attributes.put(_key,_value);
			if(either.isA()){
				return DefaultEither.newA(either.a());
			}
			
			T newWrap = either.b();
			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(newWrap);
			return DefaultEither.newB(newWrapper);
		}
	}
	
	public static class EditableChildrenWrapper<T extends TreeNode<T>> implements EditableChildren<EditableNodeWrapper<T>>
	{
		private final TreeNodeChildren<T> children;
		
		public EditableChildrenWrapper(T _wrap)
		{
			children = _wrap.getChildren();
		}

		@Override
		public Either<Error, EditableNodeWrapper<T>> at(int _pos)
		{
			Either<Error,T> either = children.at(_pos);
			if(either.isA()){
				return DefaultEither.newA(either.a());
			}

			T target = either.b();
			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(target);
			return DefaultEither.newB(newWrapper);
		}

		@Override
		public int size()
		{
			return children.size();
		}

		@Override
		public Iterator<EditableNodeWrapper<T>> iterator()
		{
			IterableConverter.Converter<EditableNodeWrapper<T>,T> converter = new IterableConverter.Converter<EditableNodeWrapper<T>,T>(){
				@Override
				public EditableNodeWrapper<T> conv(T _b){
					return new EditableNodeWrapper<T>(_b);
				}
			};
			
			
			return new IterableConverter<EditableNodeWrapper<T>,T>(children,converter).iterator();
		}

		@Override
		public Either<Error,EditableNodeWrapper<T>> addNewChildAt(int _pos)
		{
			Either<Error,T> either = children.addNewChildAt(_pos);
			if(either.isA()){
				return DefaultEither.newA(either.a());
			}
			T newWrap = either.b();
			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(newWrap);
			
			return DefaultEither.newB(newWrapper);
		}

		@Override
		public Either<Error,EditableNodeWrapper<T>> deleteChildAt(int _pos)
		{
			Either<Error,T> either = children.deleteChildAt(_pos);
			if(either.isA()){
				return DefaultEither.newA(either.a());
			}
			T newWrap = either.b();
			EditableNodeWrapper<T> newWrapper = new EditableNodeWrapper<T>(newWrap);
			
			return DefaultEither.newB(newWrapper);
		}
	}
}
*/