45
|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle;
|
|
2
|
104
|
3 import fj.data.List;
|
100
|
4 import fj.data.TreeMap;
|
45
|
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
|
|
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
|
110
|
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
|
54
|
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
|
|
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
|
45
|
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
|
104
|
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleIndexTreeEditor;
|
45
|
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor;
|
|
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTransactionManager;
|
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;
|
110
|
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
|
45
|
17
|
82
|
18
|
86
|
19 public class DefaultJungleTree implements JungleTree
|
45
|
20 {
|
86
|
21 private final AtomicReservableReference<TreeContext> repository;
|
45
|
22 private final String uuid;
|
|
23 private final ChangeListWriter writer;
|
54
|
24 private final TreeEditor editor;
|
103
|
25
|
104
|
26 public DefaultJungleTree(TreeContext tc,String uuid,ChangeListWriter writer,TreeEditor editor)
|
45
|
27 {
|
104
|
28 this.repository = new AtomicReservableReference<TreeContext>(tc);
|
|
29 this.uuid = uuid;
|
|
30 this.writer = writer;
|
|
31 this.editor = editor;
|
45
|
32 }
|
|
33
|
|
34 @Override
|
54
|
35 public JungleTreeEditor getTreeEditor()
|
45
|
36 {
|
86
|
37 TreeContext tc = repository.get();
|
|
38 DefaultTransactionManager txManager = new DefaultTransactionManager(writer,tc,repository,uuid);
|
81
|
39 TreeNode root = tc.getTreeNode();
|
103
|
40 return new DefaultJungleTreeEditor(root,txManager,editor);
|
45
|
41 }
|
104
|
42
|
|
43 @Override
|
|
44 public JungleTreeEditor getIndexTreeEditor()
|
|
45 {
|
|
46 TreeContext tc = repository.get();
|
|
47 DefaultTransactionManager txManager = new DefaultTransactionManager(writer,tc,repository,uuid);
|
|
48 TreeNode root = tc.getTreeNode();
|
|
49 ChangeSet cs = tc.getChangeSet();
|
107
|
50 TreeMap<String,TreeMap<String, List<TreeNode>>> newIndex = cs.getIndex();
|
104
|
51 return new DefaultJungleIndexTreeEditor(root,txManager,editor,newIndex);
|
|
52 }
|
|
53
|
45
|
54
|
|
55 @Override
|
61
|
56 public JungleTreeEditor getLocalTreeEditor()
|
|
57 {
|
|
58 return getTreeEditor();
|
|
59 }
|
|
60
|
|
61 @Override
|
81
|
62 public TreeNode getRootNode()
|
45
|
63 {
|
86
|
64 TreeContext tc = repository.get();
|
81
|
65 ChangeSet cs = tc.getChangeSet();
|
54
|
66 return cs.getRoot();
|
45
|
67 }
|
100
|
68
|
|
69 @Override
|
|
70 public InterfaceTraverser getTraverser() {
|
104
|
71 TreeContext tc = repository.get();
|
|
72 ChangeSet cs = tc.getChangeSet();
|
|
73 return new InterfaceTraverser(getRootNode(), cs.getIndex(), getTreeEditor());
|
101
|
74 }
|
|
75
|
|
76 @Override
|
107
|
77 public TreeMap<String,TreeMap<String, List<TreeNode>>> getIndex() {
|
104
|
78 TreeContext tc = repository.get();
|
|
79 ChangeSet cs = tc.getChangeSet();
|
|
80 return cs.getIndex();
|
100
|
81 }
|
45
|
82 }
|