Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingAttributes.java @ 23:3ef2a66a8c5d
commit
author | Shoshi TAMAKI |
---|---|
date | Thu, 10 Jan 2013 23:22:42 +0900 |
parents | 848f73545c4d |
children | 1b448f9249ee |
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.Operation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.SetAttributeOperation; 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; public class LoggingAttributes implements EditableAttributes { private final EditableAttributes wrap; private final Logger log; public LoggingAttributes(EditableAttributes _wrap,Logger _log) { wrap = _wrap; log = _log; } @Override public ByteBuffer get(String _key) { return wrap.get(_key); } @Override public Either<Error,EditableNode> delete(final String _key) { Either<Error,EditableNode> either = wrap.delete(_key); if(either.isA()){ return either; } Operation opDelete = new DeleteAttributeOperation(){ @Override public String getKey(){ return _key; } }; Logger newLog = log.add(opDelete); EditableNode newWrap = either.b(); EditableNode newLoggingNode = new LoggingNode(newWrap,newLog); return DefaultEither.newB(newLoggingNode); } @Override public Either<Error,EditableNode> put(final String _key,final ByteBuffer _value) { Either<Error,EditableNode> either = wrap.put(_key,_value); if(either.isA()){ return either; } Operation opPut = new SetAttributeOperation(){ @Override public String getKey(){ return _key; } @Override public ByteBuffer getValue(){ return _value; } }; Logger newLog = log.add(opPut); EditableNode newLoggingNode = new LoggingNode(either.b(),newLog); return DefaultEither.newB(newLoggingNode); } }