Mercurial > hg > Members > kazuma > jungle-ormapper
comparison src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/DefaultJungleTree.java @ 0:44465893e8b8
first Commit
author | Kazuma |
---|---|
date | Wed, 30 Nov 2016 01:47:55 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:44465893e8b8 |
---|---|
1 package jp.ac.u_ryukyu.ie.cr.jungle; | |
2 | |
3 import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath; | |
4 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error; | |
5 import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List; | |
6 import jp.ac.u_ryukyu.ie.cr.jungle.persistent.ChangeListWriter; | |
7 import jp.ac.u_ryukyu.ie.cr.jungle.store.TreeContext; | |
8 import jp.ac.u_ryukyu.ie.cr.jungle.store.TreeEditor; | |
9 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode; | |
10 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultJungleTreeEditor; | |
11 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTransactionManager; | |
12 import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser; | |
13 import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither; | |
14 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; | |
15 import jp.ac.u_ryukyu.ie.cr.jungle.util.GetOldTreeError; | |
16 import jp.ac.u_ryukyu.ie.cr.jungle.store.index.ParentIndex; | |
17 import jp.ac.u_ryukyu.ie.cr.jungle.data.treemap.TreeMap; | |
18 | |
19 import java.util.concurrent.atomic.AtomicReference; | |
20 | |
21 public class DefaultJungleTree implements JungleTree { | |
22 | |
23 private final AtomicReference<TreeContext> repository; | |
24 private final String uuid; | |
25 private final ChangeListWriter writer; | |
26 private final TreeEditor treeEditor; | |
27 | |
28 public DefaultJungleTree(TreeContext tc, String uuid, ChangeListWriter writer, TreeEditor editor) { | |
29 this.repository = new AtomicReference<TreeContext>(tc); | |
30 this.uuid = uuid; | |
31 this.writer = writer; | |
32 this.treeEditor = editor; | |
33 } | |
34 | |
35 @Override | |
36 public JungleTreeEditor getTreeEditor() { | |
37 TreeContext tc = repository.get(); | |
38 DefaultTransactionManager txManager = new DefaultTransactionManager(writer, tc, repository, uuid); | |
39 TreeNode root = tc.getRoot(); | |
40 return new DefaultJungleTreeEditor(root, txManager, treeEditor); | |
41 } | |
42 | |
43 @Override | |
44 public JungleTreeEditor getLocalTreeEditor() { | |
45 return getTreeEditor(); | |
46 } | |
47 | |
48 @Override | |
49 public TreeNode getRootNode() { | |
50 TreeContext tc = repository.get(); | |
51 return tc.getRoot(); | |
52 } | |
53 | |
54 @Override | |
55 public InterfaceTraverser getTraverser(boolean useIndex) { | |
56 TreeContext tc = repository.get(); | |
57 return tc.getTraverser(); | |
58 } | |
59 | |
60 @Override | |
61 public ParentIndex getParentIndex() { | |
62 TreeContext tc = repository.get(); | |
63 return tc.getParentIndex(); | |
64 } | |
65 | |
66 @Override | |
67 public TreeMap<String, TreeMap<String, List<TreeNode>>> getIndex() { | |
68 TreeContext tc = repository.get(); | |
69 return tc.getIndex(); | |
70 } | |
71 | |
72 @Override | |
73 public long revision() { | |
74 TreeContext tc = repository.get(); | |
75 return tc.revision(); | |
76 } | |
77 | |
78 @Override | |
79 public Either<Error, JungleTree> getOldTree(long revision) { | |
80 TreeContext tc = repository.get(); | |
81 | |
82 for (; tc.revision() != revision; ) { | |
83 tc = tc.prev(); | |
84 if (tc == null) | |
85 return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); | |
86 } | |
87 | |
88 | |
89 String oldTreeUuid = uuid + revision; | |
90 JungleTree oldTree = new DefaultJungleTree(tc, oldTreeUuid, writer, treeEditor); | |
91 return DefaultEither.newB(oldTree); | |
92 } | |
93 | |
94 @Override | |
95 public Either<jp.ac.u_ryukyu.ie.cr.jungle.util.Error, TreeNode> getNodeOfPath(NodePath path) { | |
96 TreeNode node = repository.get().getRoot(); | |
97 for (int num : path) { | |
98 if (num == -1) | |
99 continue; | |
100 Either<Error, TreeNode> either = node.getChildren().at(num); | |
101 if (either.isA()) | |
102 return either; | |
103 node = either.b(); | |
104 } | |
105 return DefaultEither.newB(node); | |
106 } | |
107 | |
108 @Override | |
109 public void setBufferSize(int _bufferSize) { | |
110 // not use | |
111 } | |
112 | |
113 } |