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 }