annotate src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/DefaultTreeNodeChildren.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.jungle.transaction;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
2
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
3
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
4 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditorError;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
5 import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.jungle.data.list.List;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeChildren;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.jungle.data.treemap.TreeMap;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
12
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
13 import java.nio.ByteBuffer;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
14 import java.util.Iterator;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
15
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
16 public class DefaultTreeNodeChildren implements TreeNodeChildren {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
17
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
18 public List<TreeNode> children;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
19 public TreeMap<String, ByteBuffer> attrs;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
20
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
21 public DefaultTreeNodeChildren(List<TreeNode> _children, TreeMap<String, ByteBuffer> _attrs) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
22 children = _children;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
23 attrs = _attrs;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
24 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
25
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
26 private boolean boundaryCheck(int _pos) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
27 int size = children.length();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
28 if (size < _pos) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
29 return false;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
30 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
31
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
32 return true;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
33 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
34
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
35 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
36 public List<TreeNode> getChildrenAsRawList() {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
37 return children;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
38 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
39
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
40 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
41 public Either<Error, TreeNode> addNewChildAt(int _pos) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
42 if (!boundaryCheck(_pos) || _pos < 0) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
43 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
44 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
45
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
46 List<TreeNode> newChildren = children.add(_pos, new DefaultTreeNode());
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
47 TreeNode newNode = new DefaultTreeNode(newChildren, attrs);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
48 return DefaultEither.newB(newNode);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
49 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
50
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
51 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
52 public Either<jp.ac.u_ryukyu.ie.cr.jungle.util.Error, TreeNode> deleteChildAt(int _pos) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
53 if (!boundaryCheck(_pos) || _pos < 0 || size() == 0) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
54 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
55 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
56
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
57 List<TreeNode> newChildren = children.delete(_pos);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
58 TreeNode newNode = new DefaultTreeNode(newChildren, attrs);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
59
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
60 return DefaultEither.newB(newNode);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
61 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
62
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
63 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
64 public int size() {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
65 return children.length();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
66 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
67
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
68 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
69 public Iterator<TreeNode> iterator() {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
70 return children.iterator();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
71 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
72
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
73 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
74 public Either<Error, TreeNode> replaceNode(int _pos, TreeNode _replacement) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
75 int size = children.length();
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
76 if (!(0 <= _pos && _pos < size)) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
77 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
78 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
79 TreeNode replacement = _replacement;
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
80
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
81 List<TreeNode> newChildren = children.replace(_pos, replacement);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
82 TreeNode node = new DefaultTreeNode(newChildren, attrs);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
83 return DefaultEither.newB(node);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
84 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
85
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
86 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
87 public Either<Error, TreeNode> at(int _pos) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
88 if (children.length() < _pos + 1) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
89 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
90 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
91
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
92 TreeNode Node = children.index(_pos);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
93
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
94 return DefaultEither.newB(Node);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
95 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
96
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
97 @Override
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
98 public Either<Error, TreeNode> addNewChildAt(int _pos, TreeNode _newChild) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
99 if (!boundaryCheck(_pos) || _pos < 0) {
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
100 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
101 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
102 List<TreeNode> newChildren = children.add(_pos, _newChild);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
103 TreeNode newNode = new DefaultTreeNode(newChildren, attrs);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
104
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
105 return DefaultEither.newB(newNode);
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
106 }
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
107
44465893e8b8 first Commit
Kazuma
parents:
diff changeset
108 }