Mercurial > hg > Members > tatsuki > bench > jungle-core
annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/DefaultJungleTree.java @ 152:8a0aa8fc137c
Merge with a2c374a2686b82b0ad30f520412e191b84288fa9
author | one |
---|---|
date | Sat, 22 Nov 2014 15:25:09 +0900 |
parents | d9fbddf77bf6 a2c374a2686b |
children | 20af7f25ef32 |
rev | line source |
---|---|
45 | 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle; |
2 | |
3 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; | |
4 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; | |
54 | 5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; |
145 | 6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.IndexTreeEditor; |
54 | 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
127 | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; |
45 | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor; | |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTransactionManager; | |
142 | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; |
117
74723b26ad96
add IndexJungleTreeEditr and remove DefaultJungleIndexTreeEditor
one
parents:
111
diff
changeset
|
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; |
54 | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; |
100 | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; |
142 | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.GetOldTreeError; | |
151 | 20 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; |
134 | 21 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; |
149 | 22 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; |
45 | 23 |
142 | 24 public class DefaultJungleTree implements JungleTree { |
25 private final AtomicReservableReference<TreeContext> repository; | |
26 private final String uuid; | |
27 private final ChangeListWriter writer; | |
145 | 28 private final TreeEditor treeEditor; |
29 private final IndexTreeEditor indexTreeEditor; | |
151 | 30 |
31 public DefaultJungleTree(TreeContext tc, String uuid, ChangeListWriter writer, TreeEditor editor, | |
32 IndexTreeEditor indexTreeEditor) { | |
142 | 33 this.repository = new AtomicReservableReference<TreeContext>(tc); |
34 this.uuid = uuid; | |
35 this.writer = writer; | |
145 | 36 this.treeEditor = editor; |
37 this.indexTreeEditor = indexTreeEditor; | |
142 | 38 } |
45 | 39 |
142 | 40 @Override |
41 public JungleTreeEditor getTreeEditor() { | |
42 TreeContext tc = repository.get(); | |
43 DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); | |
44 TreeNode root = tc.getTreeNode(); | |
151 | 45 Index index = getIndex(); |
149 | 46 ParentIndex parentIndex = getParentIndex(); |
151 | 47 return new DefaultJungleTreeEditor(root, txManager, treeEditor, index, parentIndex); |
142 | 48 } |
49 | |
50 @Override | |
51 public IndexJungleTreeEditor getIndexTreeEditor() { | |
52 TreeContext tc = repository.get(); | |
53 DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); | |
54 TreeNode root = tc.getTreeNode(); | |
151 | 55 Index index = getIndex(); |
149 | 56 ParentIndex parentIndex = getParentIndex(); |
151 | 57 return new IndexJungleTreeEditor(root, root, txManager, indexTreeEditor, index, parentIndex); |
145 | 58 } |
59 | |
60 @Override | |
149 | 61 public ParentIndex getParentIndex() { |
145 | 62 TreeContext tc = repository.get(); |
63 ChangeSet cs = tc.getChangeSet(); | |
64 return cs.getParentIndex(); | |
142 | 65 } |
66 | |
67 @Override | |
68 public JungleTreeEditor getLocalTreeEditor() { | |
69 return getTreeEditor(); | |
70 } | |
71 | |
72 @Override | |
73 public TreeNode getRootNode() { | |
74 TreeContext tc = repository.get(); | |
75 ChangeSet cs = tc.getChangeSet(); | |
76 return cs.getRoot(); | |
77 } | |
45 | 78 |
142 | 79 @Override |
80 public InterfaceTraverser getTraverser() { | |
81 AtomicReservableReference<TreeContext>.Reservation reservation = repository.getReservation(); | |
82 IndexManager indexManager = new IndexManager(reservation); | |
151 | 83 Index index = getIndex(); |
142 | 84 if (index != null) |
85 return new InterfaceTraverser(getRootNode(), index, indexManager); | |
86 return new InterfaceTraverser(getRootNode(), indexManager); | |
87 } | |
88 | |
89 @Override | |
151 | 90 public Index getIndex() { |
142 | 91 TreeContext tc = repository.get(); |
92 ChangeSet cs = tc.getChangeSet(); | |
93 return cs.getIndex(); | |
94 } | |
95 | |
96 @Override | |
97 public Iterable<TreeOperation> getLog() { | |
98 TreeContext tc = repository.get(); | |
99 ChangeSet cs = tc.getChangeSet(); | |
100 return cs.getOperations(); | |
101 } | |
100 | 102 |
142 | 103 @Override |
104 public long revision() { | |
105 TreeContext tc = repository.get(); | |
106 ChangeSet cs = tc.getChangeSet(); | |
107 return cs.revision(); | |
108 } | |
109 | |
110 @Override | |
111 public Either<Error, JungleTree> getOldTree(long revision) { | |
112 TreeContext tc = repository.get(); | |
113 ChangeSet cs = tc.getChangeSet(); | |
151 | 114 |
115 for (; cs.revision() != revision;) { | |
142 | 116 cs = cs.prev(); |
117 if (cs == null) | |
118 return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); | |
119 } | |
151 | 120 |
142 | 121 TreeNode root = cs.getRoot(); |
151 | 122 |
142 | 123 TreeContext oldTc = new DefaultTreeContext(root, cs); |
124 String oldTreeUuid = uuid + revision; | |
151 | 125 JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeUuid, writer, treeEditor, indexTreeEditor); |
142 | 126 return DefaultEither.newB(oldTree); |
127 } | |
128 | |
45 | 129 } |