Mercurial > hg > Members > tatsuki > bench > jungle-core
diff 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 diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java Fri Feb 08 01:51:04 2013 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java Fri Feb 08 02:21:00 2013 +0900 @@ -1,25 +1,21 @@ 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.impl.ClonableAttributes; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.ClonableNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteAttributeOperation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.Operation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.SetAttributeOperation; +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 ClonableNode<T>> - implements ClonableAttributes<LoggingNode<T>> +public class LoggingAttributes<T extends EditableNode<T>> implements EditableAttributes<LoggingNode<T>> { - private final EditableAttributes<T> wrap; - private final Logger log; + private final T wrap; + private final OperationLog log; - public LoggingAttributes(EditableAttributes<T> _wrap,Logger _log) + public LoggingAttributes(T _wrap,OperationLog _log) { wrap = _wrap; log = _log; @@ -28,55 +24,36 @@ @Override public ByteBuffer get(String _key) { - return wrap.get(_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) { - Either<Error,T> either = wrap.delete(_key); - if(either.isA()){ - return DefaultEither.newA(either.a()); - } - - Operation opDelete = new DeleteAttributeOperation(){ - @Override - public String getKey(){ - return _key; - } - }; - - Logger newLog = log.add(opDelete); - T newWrap = either.b(); - LoggingNode<T> newLoggingNode = new LoggingNode<T>(newWrap,newLog); - - return DefaultEither.newB(newLoggingNode); + DeleteAttributeOperation deleteAttribute = new DeleteAttributeOperation(_key); + return edit(deleteAttribute); } @Override public Either<Error,LoggingNode<T>> put(final String _key,final ByteBuffer _value) { - Either<Error,T> either = wrap.put(_key,_value); - if(either.isA()){ - return DefaultEither.newA(either.a()); - } - - Operation opPut = new SetAttributeOperation(){ - @Override - public String getKey(){ - return _key; - } - - @Override - public ByteBuffer getValue(){ - return _value; - } - }; - - Logger newLog = log.add(opPut); - LoggingNode<T> newLoggingNode = new LoggingNode<T>(either.b(),newLog); - - return DefaultEither.newB(newLoggingNode); + PutAttributeOperation putAttribute = new PutAttributeOperation(_key,_value); + return edit(putAttribute); } }