annotate src/alice/jungle/persistence/JungleUpdater.java @ 85:e641f559559c

Added some files for persistent
author one
date Mon, 28 Oct 2013 17:21:56 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
85
e641f559559c Added some files for persistent
one
parents:
diff changeset
1 package alice.jungle.persistence;
e641f559559c Added some files for persistent
one
parents:
diff changeset
2
e641f559559c Added some files for persistent
one
parents:
diff changeset
3 import java.nio.ByteBuffer;
e641f559559c Added some files for persistent
one
parents:
diff changeset
4
e641f559559c Added some files for persistent
one
parents:
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.Command;
e641f559559c Added some files for persistent
one
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
e641f559559c Added some files for persistent
one
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog;
e641f559559c Added some files for persistent
one
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.NodeOperation;
e641f559559c Added some files for persistent
one
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
e641f559559c Added some files for persistent
one
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
e641f559559c Added some files for persistent
one
parents:
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
e641f559559c Added some files for persistent
one
parents:
diff changeset
13
e641f559559c Added some files for persistent
one
parents:
diff changeset
14 public class JungleUpdater {
e641f559559c Added some files for persistent
one
parents:
diff changeset
15
e641f559559c Added some files for persistent
one
parents:
diff changeset
16 public JungleUpdater() {
e641f559559c Added some files for persistent
one
parents:
diff changeset
17
e641f559559c Added some files for persistent
one
parents:
diff changeset
18 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
19
e641f559559c Added some files for persistent
one
parents:
diff changeset
20 public static Either<Error, JungleTreeEditor> edit(JungleTreeEditor _editor ,TreeOperationLog _log) {
e641f559559c Added some files for persistent
one
parents:
diff changeset
21 JungleTreeEditor editor = _editor;
e641f559559c Added some files for persistent
one
parents:
diff changeset
22 Either<Error, JungleTreeEditor> either = null;
e641f559559c Added some files for persistent
one
parents:
diff changeset
23 for (TreeOperation op : _log) {
e641f559559c Added some files for persistent
one
parents:
diff changeset
24 either = _edit(editor, op);
e641f559559c Added some files for persistent
one
parents:
diff changeset
25 if(either.isA()) {
e641f559559c Added some files for persistent
one
parents:
diff changeset
26 return either;
e641f559559c Added some files for persistent
one
parents:
diff changeset
27 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
28 editor = either.b();
e641f559559c Added some files for persistent
one
parents:
diff changeset
29 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
30 return either;
e641f559559c Added some files for persistent
one
parents:
diff changeset
31 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
32
e641f559559c Added some files for persistent
one
parents:
diff changeset
33 private static Either<Error, JungleTreeEditor> _edit(JungleTreeEditor editor,
e641f559559c Added some files for persistent
one
parents:
diff changeset
34 TreeOperation op) {
e641f559559c Added some files for persistent
one
parents:
diff changeset
35 DefaultNodePath path = new DefaultNodePath();
e641f559559c Added some files for persistent
one
parents:
diff changeset
36 NodeOperation nodeOp = op.getNodeOperation();
e641f559559c Added some files for persistent
one
parents:
diff changeset
37 int pos = nodeOp.getPosition();
e641f559559c Added some files for persistent
one
parents:
diff changeset
38 Command c = nodeOp.getCommand();
e641f559559c Added some files for persistent
one
parents:
diff changeset
39 String key = "";
e641f559559c Added some files for persistent
one
parents:
diff changeset
40 switch (c) {
e641f559559c Added some files for persistent
one
parents:
diff changeset
41 case PUT_ATTRIBUTE:
e641f559559c Added some files for persistent
one
parents:
diff changeset
42 key = nodeOp.getKey();
e641f559559c Added some files for persistent
one
parents:
diff changeset
43 ByteBuffer value = nodeOp.getValue();
e641f559559c Added some files for persistent
one
parents:
diff changeset
44 return editor.putAttribute(path, key, value);
e641f559559c Added some files for persistent
one
parents:
diff changeset
45 case DELETE_ATTRIBUTE:
e641f559559c Added some files for persistent
one
parents:
diff changeset
46 key = nodeOp.getKey();
e641f559559c Added some files for persistent
one
parents:
diff changeset
47 return editor.deleteAttribute(path, key);
e641f559559c Added some files for persistent
one
parents:
diff changeset
48 case APPEND_CHILD:
e641f559559c Added some files for persistent
one
parents:
diff changeset
49 return editor.addNewChildAt(path, pos);
e641f559559c Added some files for persistent
one
parents:
diff changeset
50 case DELETE_CHILD:
e641f559559c Added some files for persistent
one
parents:
diff changeset
51 return editor.deleteChildAt(path, 0);
e641f559559c Added some files for persistent
one
parents:
diff changeset
52 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
53 return null;
e641f559559c Added some files for persistent
one
parents:
diff changeset
54 }
e641f559559c Added some files for persistent
one
parents:
diff changeset
55
e641f559559c Added some files for persistent
one
parents:
diff changeset
56
e641f559559c Added some files for persistent
one
parents:
diff changeset
57
e641f559559c Added some files for persistent
one
parents:
diff changeset
58 }