annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java @ 73:e97a59269bf5

change to Various
author one
date Wed, 27 Aug 2014 01:02:11 +0900
parents 57e965b73c9e
children a4e2f1d45fdc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
2
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
3 import java.util.Iterator;
53
ed890dcb673e modified JungleTreeEditor
Shoshi TAMAKI
parents: 45
diff changeset
4 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result;
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
53
ed890dcb673e modified JungleTreeEditor
Shoshi TAMAKI
parents: 45
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
ed890dcb673e modified JungleTreeEditor
Shoshi TAMAKI
parents: 45
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
17
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
18 public class DefaultTransactionManager<T extends TreeNode<T>> implements TransactionManager<T>
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
19 {
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
20 private final AtomicReservableReference<TreeContext<T>> repository;
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
21 private final TreeContext<T> tip;
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
22 private final ChangeListWriter writer;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
23 private final String uuid;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
24
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
25 public DefaultTransactionManager(ChangeListWriter _writer,TreeContext<T> _tip,
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
26 AtomicReservableReference<TreeContext<T>> _repository,String _uuid)
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
27 {
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
28 repository = _repository;
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
29 tip = _tip;
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
30 writer = _writer;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
31 uuid = _uuid;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
32 }
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
33
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
34 @Override
73
e97a59269bf5 change to Various
one
parents: 59
diff changeset
35 public Either<Error,TransactionManager<T>> commit(TreeNode<T> _newRoot,final TreeOperationLog _log)
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
36 {
73
e97a59269bf5 change to Various
one
parents: 59
diff changeset
37 ChangeSet<T> cs = tip.getChangeSet();
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
38 long currentRevision = cs.revision();
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
39 long nextRevision = currentRevision + 1;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
40
59
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
41 final String _treeName = cs.getTreeName();
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
42 ChangeList list = new ChangeList(){
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
43 @Override
53
ed890dcb673e modified JungleTreeEditor
Shoshi TAMAKI
parents: 45
diff changeset
44 public Iterator<TreeOperation> iterator(){
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
45 return _log.iterator();
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
46 }
59
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
47 @Override
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
48 public String getTreeName(){
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
49 return _treeName;
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
50 }
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
51 @Override
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
52 public String uuid(){
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
53 return uuid;
57e965b73c9e Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents: 54
diff changeset
54 }
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
55 };
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
56
73
e97a59269bf5 change to Various
one
parents: 59
diff changeset
57 TreeNode<T> root = _newRoot;
e97a59269bf5 change to Various
one
parents: 59
diff changeset
58 DefaultChangeSet<T> newCs = new DefaultChangeSet(root,cs,list,uuid, _treeName, nextRevision);
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
59 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs);
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
60
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
61 @SuppressWarnings("rawtypes")
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
62 Reservation reservation = repository.makeReservation(tip,newContext);
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
63 if(reservation == null){
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
64 return DefaultEither.newA((Error)new DefaultError());
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
65 }
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
66 Result r = writer.write(list);
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
67 if(r == Result.SUCCESS){
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
68 reservation.confirm();
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
69 TransactionManager<T> txManager = new DefaultTransactionManager<T>(writer,newContext,repository,uuid);
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
70 return DefaultEither.newB(txManager);
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
71 }
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
72 return DefaultEither.newA((Error)new DefaultError());
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
73 }
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
74
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
75 @Override
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
76 public String getUUID()
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
77 {
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
78 return uuid;
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
79 }
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
80
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
81 @Override
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
82 public long getRevision()
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
83 {
73
e97a59269bf5 change to Various
one
parents: 59
diff changeset
84 ChangeSet<T> cs = tip.getChangeSet();
54
650fe2a0dccc modified tests
Shoshi TAMAKI
parents: 53
diff changeset
85 return cs.revision();
45
fb00d7b147c8 added JungleTree service
Shoshi TAMAKI
parents: 38
diff changeset
86 }
38
cb9fabaedfd4 added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff changeset
87 }