comparison src/main/java/alice/jungle/persistent/PersistentTransactionManager.java @ 178:d6944d788121

fit Junglecore
author tatsuki
date Thu, 04 Sep 2014 13:12:25 +0900
parents 6f104ab4eb81
children 2828205bdc3a
comparison
equal deleted inserted replaced
177:89db8388db0f 178:d6944d788121
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
17 17
18 public class PersistentTransactionManager<T extends TreeNode> implements TransactionManager<T> { 18 public class PersistentTransactionManager implements TransactionManager {
19 private final AtomicReservableReference<TreeContext<T>> repository; 19 private final AtomicReservableReference<TreeContext> repository;
20 private final TreeContext<T> tip; 20 private final TreeContext tip;
21 private final ChangeListWriter writer; 21 private final ChangeListWriter writer;
22 private final String uuid; 22 private final String uuid;
23 private final String treeName; 23 private final String treeName;
24 24
25 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip, 25 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext _tip,
26 AtomicReservableReference<TreeContext<T>> _repository,String _uuid) 26 AtomicReservableReference<TreeContext> _repository,String _uuid)
27 { 27 {
28 repository = _repository; 28 repository = _repository;
29 tip = _tip; 29 tip = _tip;
30 writer = _writer; 30 writer = _writer;
31 uuid = _uuid; 31 uuid = _uuid;
32 treeName = _treeName; 32 treeName = _treeName;
33 } 33 }
34 34
35 @Override 35 @Override
36 public Either<Error, TransactionManager<T>> commit(TreeNode _newRoot,final TreeOperationLog _log) { 36 public Either<Error, TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log) {
37 ChangeSet cs = tip.getChangeSet(); 37 ChangeSet cs = tip.getChangeSet();
38 long currentRevision = cs.revision(); 38 long currentRevision = cs.revision();
39 long nextRevision = currentRevision + 1; 39 long nextRevision = currentRevision + 1;
40 40
41 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log); 41 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log);
42 TreeNode root = _newRoot; 42 TreeNode root = _newRoot;
43 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision); 43 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision);
44 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs); 44 DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs);
45 45
46 @SuppressWarnings("rawtypes") 46 @SuppressWarnings("rawtypes")
47 Reservation reservation = repository.makeReservation(tip, newContext); 47 Reservation reservation = repository.makeReservation(tip, newContext);
48 if(reservation == null) { 48 if(reservation == null) {
49 return DefaultEither.newA((Error)new DefaultError()); 49 return DefaultEither.newA((Error)new DefaultError());
51 Result r = writer.write(list); 51 Result r = writer.write(list);
52 if(r != Result.SUCCESS) { 52 if(r != Result.SUCCESS) {
53 return DefaultEither.newA((Error)new DefaultError()); 53 return DefaultEither.newA((Error)new DefaultError());
54 } 54 }
55 reservation.confirm(); 55 reservation.confirm();
56 TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid); 56 TransactionManager txManager = new PersistentTransactionManager(treeName, writer, newContext, repository, uuid);
57 return DefaultEither.newB(txManager); 57 return DefaultEither.newB(txManager);
58 } 58 }
59 59
60 @Override 60 @Override
61 public long getRevision() 61 public long getRevision()