Mercurial > hg > Members > kazuma > jungle-ormapper
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 } |