comparison src/main/java/alice/jungle/persistent/PersistentTransactionManager.java @ 105:f9e29a52efd3

Move some files
author one
date Tue, 26 Nov 2013 06:43:10 +0900
parents src/alice/jungle/persistence/PersistentTransactionManager.java@0c98717f186e
children 3f9c6ab43461
comparison
equal deleted inserted replaced
104:03bf62bb699e 105:f9e29a52efd3
1 package alice.jungle.persistent;
2
3 import java.util.Iterator;
4
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TransactionManager;
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
20
21 public class PersistentTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> {
22 private final AtomicReservableReference<TreeContext<T>> repository;
23 private final TreeContext<T> tip;
24 private final ChangeListWriter writer;
25 private final String uuid;
26 private final String treeName;
27
28 public PersistentTransactionManager(String _treeName, ChangeListWriter _writer,TreeContext<T> _tip,
29 AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
30 {
31 repository = _repository;
32 tip = _tip;
33 writer = _writer;
34 uuid = _uuid;
35 treeName = _treeName;
36 }
37
38 @Override
39 public Either<Error, TransactionManager<T>> commit(T _newRoot,final TreeOperationLog _log) {
40 ChangeSet cs = tip.getChangeSet();
41 long currentRevision = cs.revision();
42 long nextRevision = currentRevision + 1;
43
44 PersistentChangeList list = new PersistentChangeList(uuid, treeName, _log);
45 Node root = _newRoot.getAsNode();
46 PersistentChangeSet newCs = new PersistentChangeSet(root, cs, list, uuid, treeName, nextRevision);
47 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs);
48
49 @SuppressWarnings("rawtypes")
50 Reservation reservation = repository.makeReservation(tip, newContext);
51 if(reservation == null) {
52 return DefaultEither.newA((Error)new DefaultError());
53 }
54 Result r = writer.write(list);
55 if(r != Result.SUCCESS) {
56 return DefaultEither.newA((Error)new DefaultError());
57 }
58 reservation.confirm();
59 TransactionManager<T> txManager = new PersistentTransactionManager<T>(treeName, writer, newContext, repository, uuid);
60 return DefaultEither.newB(txManager);
61 }
62
63 @Override
64 public long getRevision()
65 {
66 ChangeSet cs = tip.getChangeSet();
67 return cs.revision();
68 }
69
70 @Override
71 public String getUUID() {
72 return uuid;
73 }
74
75
76
77 }