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