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);
 	}
 }