Mercurial > hg > Members > nobuyasu > jungle-network
comparison src/main/java/alice/jungle/persistent/PersistentJungleTree.java @ 191:5d0734fd859d
fix error
author | tatsuki |
---|---|
date | Thu, 15 Jan 2015 09:23:23 +0900 |
parents | 269bada9eedc |
children | 89c15aa2bc6d |
comparison
equal
deleted
inserted
replaced
190:269bada9eedc | 191:5d0734fd859d |
---|---|
1 package alice.jungle.persistent; | 1 package alice.jungle.persistent; |
2 | 2 |
3 import fj.data.List; | 3 import fj.data.List; |
4 import fj.data.TreeMap; | 4 import fj.data.TreeMap; |
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree; | |
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; | 6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; |
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; | 7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; |
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; | 8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; |
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; |
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference; | 13 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.DefaultJungleTreeEditor; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.IndexJungleTreeEditor; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; |
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair; | 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | |
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | |
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.GetOldTreeError; | |
22 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; | |
23 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; | |
24 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; | |
18 | 25 |
19 public class PersistentJungleTree implements JungleTree { | 26 public class PersistentJungleTree implements JungleTree { |
20 private final AtomicReservableReference<TreeContext> repository; | 27 private final AtomicReservableReference<TreeContext> repository; |
21 private final String uuid; | 28 private final String uuid; |
22 private final String treeName; | 29 private final String treeName; |
52 @Override | 59 @Override |
53 public JungleTreeEditor getLocalTreeEditor() { | 60 public JungleTreeEditor getLocalTreeEditor() { |
54 return getTreeEditor(); | 61 return getTreeEditor(); |
55 } | 62 } |
56 | 63 |
57 @Override | 64 @Override |
58 public InterfaceTraverser getTraverser() { | 65 public long revision() { |
59 TreeContext tc = repository.get(); | 66 TreeContext tc = repository.get(); |
60 ChangeSet cs = tc.getChangeSet(); | 67 ChangeSet cs = tc.getChangeSet(); |
61 return new InterfaceTraverser(getRootNode(), cs.getIndex(), getTreeEditor()); | 68 return cs.revision(); |
62 } | 69 } |
63 | 70 |
64 @Override | 71 @Override |
65 public TreeMap<String, TreeMap<String, List<Pair<TreeNode, NodePath>>>> getIndex() { | 72 public Either<Error, JungleTree> getOldTree(long revision) { |
66 // TODO Auto-generated method stub | 73 TreeContext tc = repository.get(); |
67 return null; | 74 ChangeSet cs = tc.getChangeSet(); |
68 } | |
69 | 75 |
70 @Override | 76 for (; cs.revision() != revision;) { |
71 public IndexJungleTreeEditor getIndexTreeEditor() { | 77 cs = cs.prev(); |
72 // TODO Auto-generated method stub | 78 if (cs == null) |
73 return null; | 79 return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); |
74 } | 80 } |
75 | 81 |
82 TreeNode root = cs.getRoot(); | |
83 | |
84 TreeContext oldTc = new DefaultTreeContext(root, cs); | |
85 String oldTreeUuid = uuid + revision; | |
86 JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeUuid, writer, editor); | |
87 return DefaultEither.newB(oldTree); | |
88 } | |
89 | |
90 @Override | |
91 public ParentIndex getParentIndex() { | |
92 TreeContext tc = repository.get(); | |
93 ChangeSet cs = tc.getChangeSet(); | |
94 return cs.getParentIndex(); | |
95 } | |
96 | |
97 @Override | |
98 public Index getIndex() { | |
99 TreeContext tc = repository.get(); | |
100 ChangeSet cs = tc.getChangeSet(); | |
101 return cs.getIndex(); | |
102 } | |
103 | |
104 @Override | |
105 public InterfaceTraverser getTraverser(boolean useIndex) { | |
106 AtomicReservableReference<TreeContext>.Reservation reservation = repository.getReservation(); | |
107 IndexManager indexManager = new IndexManager(reservation); | |
108 Index index = getIndex(); | |
109 ParentIndex parentIndex = getParentIndex(); | |
110 return new InterfaceTraverser(getRootNode(), index, parentIndex, indexManager, useIndex); | |
111 } | |
112 | |
113 @Override | |
114 public Either<Error, TreeNode> getNodeOfPath(NodePath path) { | |
115 TreeNode node = repository.get().getTreeNode(); | |
116 for (int num : path) { | |
117 if (num == -1) | |
118 continue; | |
119 Either<Error, TreeNode> either = node.getChildren().at(num); | |
120 if (either.isA()) | |
121 return either; | |
122 node = either.b(); | |
123 } | |
124 return DefaultEither.newB(node); | |
125 } | |
76 | 126 |
77 } | 127 } |