Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/EditableNodeWrapper.java @ 74:3a3622cf2eef
remove error but have a error test program
and LoggingChildren.iterator is bad
author | one |
---|---|
date | Wed, 27 Aug 2014 05:07:50 +0900 |
parents | 650fe2a0dccc |
children | 2fc0b0313dc0 |
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 _wrap) { wrap = _wrap; } @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(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); } } }