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