diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java @ 154:b8cef4b640a3

update index for commit
author one
date Wed, 26 Nov 2014 06:23:07 +0900
parents 20af7f25ef32
children f98f2704b154 6b4aab79910d
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Tue Nov 25 17:52:41 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java	Wed Nov 26 06:23:07 2014 +0900
@@ -10,81 +10,85 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
 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.tatsuki.jungle.store.index.Index;
+import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager;
 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex;
 
-public class DefaultTransactionManager implements TransactionManager
-{
-	private final AtomicReservableReference<TreeContext> repository;
-	private final TreeContext tip;
-	private final ChangeListWriter writer;
-	private final String uuid;
-	
-	public DefaultTransactionManager(ChangeListWriter _writer,TreeContext _tip,	AtomicReservableReference<TreeContext> _repository,String _uuid)
-	{
-		repository = _repository;
-		tip = _tip;
-		writer = _writer;
-		uuid = _uuid;
-	}
-	
-	@Override
-	public Either<Error,TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log)
-	{
-		ChangeSet cs = tip.getChangeSet();
-		long currentRevision = cs.revision();
-		long nextRevision = currentRevision + 1;
-		
-		final String _treeName = cs.getTreeName();
-		ChangeList list = new ChangeList(){
-			@Override
-			public Iterator<TreeOperation> iterator(){
-				return _log.iterator();
-			}
-			@Override
-			public String getTreeName(){
-				return _treeName;
-			}
-			@Override
-			public String uuid(){
-				return uuid;
-			}
+public class DefaultTransactionManager implements TransactionManager {
+  private final AtomicReservableReference<TreeContext> repository;
+  private final TreeContext tip;
+  private final ChangeListWriter writer;
+  private final String uuid;
+
+  public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip,
+      AtomicReservableReference<TreeContext> _repository, String _uuid) {
+    repository = _repository;
+    tip = _tip;
+    writer = _writer;
+    uuid = _uuid;
+  }
+
+  @Override
+  public Either<Error, TransactionManager> commit(TreeNode _newRoot, final TreeOperationLog _log) {
+    ChangeSet cs = tip.getChangeSet();
+    long currentRevision = cs.revision();
+    long nextRevision = currentRevision + 1;
+
+    final String _treeName = cs.getTreeName();
+    ChangeList list = new ChangeList() {
+      @Override
+      public Iterator<TreeOperation> iterator() {
+        return _log.iterator();
+      }
+
+      @Override
+      public String getTreeName() {
+        return _treeName;
+      }
+
+      @Override
+      public String uuid() {
+        return uuid;
+      }
 
-		};
-		
-		Index nulIndex = new Index();
-		ParentIndex nulParentIndex = new ParentIndex();
-		DefaultChangeSet newCs = new DefaultChangeSet(_newRoot,cs,list,uuid, _treeName, nextRevision, nulIndex, nulParentIndex);
-		DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs);
-		
-		@SuppressWarnings("rawtypes")
-		Reservation reservation = repository.makeReservation(tip,newContext);
-		if(reservation == null){
-			return DefaultEither.newA((Error)new DefaultError());
-		}
-		Result r = writer.write(list);
-		if(r == Result.SUCCESS){
-			reservation.confirm();
-			TransactionManager txManager = new DefaultTransactionManager(writer,newContext,repository,uuid);
-			return DefaultEither.newB(txManager);
-		}
-		return DefaultEither.newA((Error)new DefaultError());
-	}
+    };
+
+    IndexManager indexManager = new IndexManager(repository.getReservation());
+    InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, indexManager, true);
+    traverser.createIndex();
+    Index nulIndex = traverser.getIndex();
+    ParentIndex nulParentIndex = traverser.getParentIndex();
+    DefaultChangeSet newCs = new DefaultChangeSet(_newRoot, cs, list, uuid, _treeName, nextRevision, nulIndex,
+        nulParentIndex);
+    DefaultTreeContext newContext = new DefaultTreeContext(_newRoot, newCs);
 
-	@Override
-	public String getUUID()
-	{
-		return uuid;
-	}
+    @SuppressWarnings("rawtypes")
+    Reservation reservation = repository.makeReservation(tip, newContext);
+    if (reservation == null) {
+      return DefaultEither.newA((Error) new DefaultError());
+    }
+    Result r = writer.write(list);
+    if (r == Result.SUCCESS) {
+      reservation.confirm();
+      TransactionManager txManager = new DefaultTransactionManager(writer, newContext, repository, uuid);
+      return DefaultEither.newB(txManager);
+    }
+    return DefaultEither.newA((Error) new DefaultError());
+  }
 
-	@Override
-	public long getRevision()
-	{
-		ChangeSet cs = tip.getChangeSet();
-		return cs.revision();
-	}
+  @Override
+  public String getUUID() {
+    return uuid;
+  }
+
+  @Override
+  public long getRevision() {
+    ChangeSet cs = tip.getChangeSet();
+    return cs.revision();
+  }
 }