Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java @ 51:bc119c52d5cc
modified LoggingNode package
author | Shoshi TAMAKI |
---|---|
date | Fri, 08 Feb 2013 02:21:00 +0900 |
parents | 35e327577b58 |
children | 540a27dde42f |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger; import java.nio.ByteBuffer; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.PutAttributeOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableAttributes; 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; public class LoggingAttributes<T extends EditableNode<T>> implements EditableAttributes<LoggingNode<T>> { private final T wrap; private final OperationLog log; public LoggingAttributes(T _wrap,OperationLog _log) { wrap = _wrap; log = _log; } @Override public ByteBuffer get(String _key) { EditableAttributes<T> attributes = wrap.getAttributes(); return attributes.get(_key); } private Either<Error,LoggingNode<T>> edit(NodeOperation _op) { Either<Error,T> either = _op.invoke(wrap); if(either.isA()){ return DefaultEither.newA(either.a()); } T newWrap = either.b(); OperationLog newLog = log.add(_op); LoggingNode<T> newLoggingNode = new LoggingNode<T>(newWrap,newLog); return DefaultEither.newB(newLoggingNode); } @Override public Either<Error,LoggingNode<T>> delete(final String _key) { DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(_key); return edit(deleteAttribute); } @Override public Either<Error,LoggingNode<T>> put(final String _key,final ByteBuffer _value) { PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value); return edit(putAttribute); } }