1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.mavibot.btree;
21
22
23 import java.io.IOException;
24 import java.util.LinkedList;
25
26 import org.apache.directory.mavibot.btree.serializer.ElementSerializer;
27
28
29
30
31
32
33
34
35
36
37 public class BTreeFactory
38 {
39
40
41
42
43
44 public static BTree createBTree()
45 {
46 BTree btree = new BTree();
47
48 return btree;
49 }
50
51
52
53
54
55
56
57
58
59
60 public static Node createNode( BTree btree, long revision, int nbElems )
61 {
62 Node node = new Node( btree, revision, nbElems );
63
64 return node;
65 }
66
67
68
69
70
71
72
73
74
75
76 public static Leaf createLeaf( BTree btree, long revision, int nbElems )
77 {
78 Leaf leaf = new Leaf( btree, revision, nbElems );
79
80 return leaf;
81 }
82
83
84
85
86
87
88
89
90 public static void setRoot( BTree<?, ?> btree, Page root )
91 {
92 btree.setRoot( root );
93 }
94
95
96
97
98
99
100
101
102 public static Page getRoot( BTree<?, ?> btree )
103 {
104 return btree.rootPage;
105 }
106
107
108
109
110
111 public static void setNbElems( BTree<?, ?> btree, long nbElems )
112 {
113 btree.setNbElems( nbElems );
114 }
115
116
117
118
119
120 public static void setRevision( BTree<?, ?> btree, long revision )
121 {
122 btree.setRevision( revision );
123 }
124
125
126
127
128
129 public static void setRootPageOffset( BTree<?, ?> btree, long rootPageOffset )
130 {
131 btree.setRootPageOffset( rootPageOffset );
132 }
133
134
135
136
137
138 public static void setNextBTreeOffset( BTree<?, ?> btree, long nextBTreeOffset )
139 {
140 btree.setNextBTreeOffset( nextBTreeOffset );
141 }
142
143
144
145
146
147 public static void setName( BTree<?, ?> btree, String name )
148 {
149 btree.setName( name );
150 }
151
152
153
154
155
156
157
158
159
160
161
162 public static void setKeySerializer( BTree<?, ?> btree, String keySerializerFqcn )
163 throws ClassNotFoundException, IllegalAccessException, InstantiationException
164 {
165 Class<?> keySerializer = Class.forName( keySerializerFqcn );
166 ElementSerializer instance = ( ElementSerializer ) keySerializer.newInstance();
167 btree.setKeySerializer( instance );
168
169 btree.setComparator( instance.getComparator() );
170 }
171
172
173
174
175
176
177
178
179
180
181
182 public static void setValueSerializer( BTree<?, ?> btree, String valueSerializerFqcn )
183 throws ClassNotFoundException, IllegalAccessException, InstantiationException
184 {
185 Class<?> valueSerializer = Class.forName( valueSerializerFqcn );
186 btree.setValueSerializer( ( ElementSerializer ) valueSerializer.newInstance() );
187 }
188
189
190
191
192
193
194
195 public static void setPageSize( BTree<?, ?> btree, int pageSize )
196 {
197 btree.setPageSize( pageSize );
198 }
199
200
201
202
203
204
205
206 public static void setRecordManager( BTree<?, ?> btree, RecordManager recordManager )
207 {
208 btree.setRecordManager( recordManager );
209 }
210
211
212
213
214
215
216
217 public static void setKey( Page page, int pos, Object key )
218 {
219 ( ( AbstractPage ) page ).setKey( pos, key );
220 }
221
222
223
224
225
226
227
228 public static void setValue( Leaf page, int pos, ElementHolder value )
229 {
230 page.setValue( pos, value );
231 }
232
233
234
235
236
237
238
239 public static void setValue( Node page, int pos, ElementHolder value )
240 {
241 page.setValue( pos, value );
242 }
243
244
245
246
247
248
249
250
251
252 public static LinkedList getPathToRightMostLeaf( BTree btree ) throws IOException
253 {
254 LinkedList<ParentPos> stack = new LinkedList<ParentPos>();
255
256 ParentPos last = new ParentPos( btree.rootPage, btree.rootPage.getNbElems() );
257 stack.push( last );
258
259
260 if( btree.rootPage instanceof Leaf )
261 {
262 InternalUtil.setLastDupsContainer( last, btree );
263 }
264 else
265 {
266 Node node = ( Node ) btree.rootPage;
267
268 while( true )
269 {
270 Page p = ( Page ) node.children[node.getNbElems()].getValue( btree );
271
272 last = new ParentPos( p, p.getNbElems() );
273 stack.push( last );
274
275 if( p instanceof Leaf )
276 {
277 InternalUtil.setLastDupsContainer( last, btree );
278 break;
279 }
280 }
281 }
282
283 return stack;
284 }
285 }