annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
105
f9e29a52efd3 Move some files
one
parents: 96
diff changeset
1 package alice.jungle.persistent;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
2
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
3 import fj.data.List;
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
4 import fj.data.TreeMap;
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
e641f559559c Added some files for persistent
one
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter;
e641f559559c Added some files for persistent
one
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
e641f559559c Added some files for persistent
one
parents:
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference;
e641f559559c Added some files for persistent
one
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultJungleTreeEditor;
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.TreeContext;
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.GetOldTreeError;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
22 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
23 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
24 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
25
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
26 public class PersistentJungleTree implements JungleTree {
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
27 private final AtomicReservableReference<TreeContext> repository;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
28 private final String uuid;
e641f559559c Added some files for persistent
one
parents:
diff changeset
29 private final String treeName;
88
0c98717f186e Removed cast code
one
parents: 85
diff changeset
30 private final ChangeListWriter writer;
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
31 private final TreeEditor editor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
32
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
33 public PersistentJungleTree(String _treeName, TreeContext _tc,String _uuid, ChangeListWriter _writer,TreeEditor _editor)
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
34 {
e641f559559c Added some files for persistent
one
parents:
diff changeset
35 treeName = _treeName;
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
36 repository = new AtomicReservableReference<TreeContext>(_tc);
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
37 uuid = _uuid;
e641f559559c Added some files for persistent
one
parents:
diff changeset
38 writer = _writer;
e641f559559c Added some files for persistent
one
parents:
diff changeset
39 editor = _editor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
40 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
41
e641f559559c Added some files for persistent
one
parents:
diff changeset
42 @Override
e641f559559c Added some files for persistent
one
parents:
diff changeset
43 public JungleTreeEditor getTreeEditor()
e641f559559c Added some files for persistent
one
parents:
diff changeset
44 {
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
45 TreeContext tc = repository.get();
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
46 PersistentTransactionManager txManager = new PersistentTransactionManager(treeName, writer,tc,repository,uuid);
176
6f104ab4eb81 fit jungle core but editMessage is not work
tatsuki
parents: 105
diff changeset
47 TreeNode root = tc.getTreeNode();
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
48 return new DefaultJungleTreeEditor(root,txManager,editor);
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
49 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
50
e641f559559c Added some files for persistent
one
parents:
diff changeset
51 @Override
176
6f104ab4eb81 fit jungle core but editMessage is not work
tatsuki
parents: 105
diff changeset
52 public TreeNode getRootNode()
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
53 {
178
d6944d788121 fit Junglecore
tatsuki
parents: 176
diff changeset
54 TreeContext tc = repository.get();
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
55 ChangeSet cs = tc.getChangeSet();
e641f559559c Added some files for persistent
one
parents:
diff changeset
56 return cs.getRoot();
e641f559559c Added some files for persistent
one
parents:
diff changeset
57 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
58
96
fcce7ca4adb9 Modified LogUpdateCodesegment
one
parents: 88
diff changeset
59 @Override
fcce7ca4adb9 Modified LogUpdateCodesegment
one
parents: 88
diff changeset
60 public JungleTreeEditor getLocalTreeEditor() {
fcce7ca4adb9 Modified LogUpdateCodesegment
one
parents: 88
diff changeset
61 return getTreeEditor();
fcce7ca4adb9 Modified LogUpdateCodesegment
one
parents: 88
diff changeset
62 }
fcce7ca4adb9 Modified LogUpdateCodesegment
one
parents: 88
diff changeset
63
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
64 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
65 public long revision() {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
66 TreeContext tc = repository.get();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
67 ChangeSet cs = tc.getChangeSet();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
68 return cs.revision();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
69 }
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
70
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
71 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
72 public Either<Error, JungleTree> getOldTree(long revision) {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
73 TreeContext tc = repository.get();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
74 ChangeSet cs = tc.getChangeSet();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
75
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
76 for (; cs.revision() != revision;) {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
77 cs = cs.prev();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
78 if (cs == null)
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
79 return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
80 }
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
81
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
82 TreeNode root = cs.getRoot();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
83
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
84 TreeContext oldTc = new DefaultTreeContext(root, cs);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
85 String oldTreeUuid = uuid + revision;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
86 JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeUuid, writer, editor);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
87 return DefaultEither.newB(oldTree);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
88 }
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
89
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
90 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
91 public ParentIndex getParentIndex() {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
92 TreeContext tc = repository.get();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
93 ChangeSet cs = tc.getChangeSet();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
94 return cs.getParentIndex();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
95 }
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
96
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
97 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
98 public Index getIndex() {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
99 TreeContext tc = repository.get();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
100 ChangeSet cs = tc.getChangeSet();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
101 return cs.getIndex();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
102 }
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
103
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
104 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
105 public InterfaceTraverser getTraverser(boolean useIndex) {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
106 AtomicReservableReference<TreeContext>.Reservation reservation = repository.getReservation();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
107 IndexManager indexManager = new IndexManager(reservation);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
108 Index index = getIndex();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
109 ParentIndex parentIndex = getParentIndex();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
110 return new InterfaceTraverser(getRootNode(), index, parentIndex, indexManager, useIndex);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
111 }
179
2828205bdc3a fit JungleCore
tatsuki
parents: 178
diff changeset
112
191
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
113 @Override
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
114 public Either<Error, TreeNode> getNodeOfPath(NodePath path) {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
115 TreeNode node = repository.get().getTreeNode();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
116 for (int num : path) {
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
117 if (num == -1)
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
118 continue;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
119 Either<Error, TreeNode> either = node.getChildren().at(num);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
120 if (either.isA())
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
121 return either;
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
122 node = either.b();
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
123 }
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
124 return DefaultEither.newB(node);
5d0734fd859d fix error
tatsuki
parents: 190
diff changeset
125 }
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
126
e641f559559c Added some files for persistent
one
parents:
diff changeset
127 }