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