annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTreeNodeChildren.java @ 71:5dbae471a3b3

Deleting DefaultNode(change to DefaultTreeNodeChildren) (on error)
author one
date Tue, 26 Aug 2014 07:32:15 +0900
parents b136a24f82aa
children 3a3622cf2eef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
2
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
3 import java.nio.ByteBuffer;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
4 import java.util.Iterator;
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
5
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
6 import fj.P2;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
7 import fj.data.List;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
8 import fj.data.TreeMap;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode;
52
Shoshi TAMAKI
parents: 41
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNodeChildren;
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditorError;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableConverter;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
18
52
Shoshi TAMAKI
parents: 41
diff changeset
19 public class DefaultTreeNodeChildren implements TreeNodeChildren<DefaultTreeNode>
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
20 {
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
21 public static void main(String _args[])
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
22 {
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
23 List<Integer> list = List.range(0,5);
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
24 P2<List<Integer>, List<Integer>> split = list.splitAt(0);
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
25 System.out.println(split._1().length());
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
26 System.out.println(split._2().length());
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
27
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
28 }
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
29
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
30 public List<DefaultTreeNode> children;
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
31 public TreeMap<String,ByteBuffer> attrs;
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
32
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
33 public DefaultTreeNodeChildren(List<DefaultTreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
34 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
35 children = _children;
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
36 attrs = _attrs;
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
37 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
38
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
39 private boolean boundaryCheck(int _pos)
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
40 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
41 int size = children.length();
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
42 if(size < _pos){
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
43 return false;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
44 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
45
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
46 return true;
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
47 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
48
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
49 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
50 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos)
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
51 {
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
52 if(!boundaryCheck(_pos) || _pos < 0){
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
53 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
54 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
55
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
56
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
57
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
58 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
59 List<DefaultTreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2());
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
60 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
61
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
62 return DefaultEither.newB(newNode);
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
63 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
64
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
65 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
66 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos)
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
67 {
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
68 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
69 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
70 }
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
72 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
73 List<DefaultTreeNode> newChildren = split._1().append(split._2().tail());
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
74
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
75
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
76 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
77
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
78 return DefaultEither.newB(newNode);
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
79 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
80
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
81 @Override
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
82 public int size()
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
83 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
84 return children.length();
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
85 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
86
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
87 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
88 public Iterator<DefaultTreeNode> iterator()
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
89 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
90 return children.iterator();
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
91 }
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
92
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
93 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
94 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement)
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
95 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
96 int size = children.length();
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
97 if(!(0 <= _pos && _pos < size)){
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
98 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
99 }
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
100 DefaultTreeNode replacement = _replacement;
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
101
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
102 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos + 1);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
103 List<DefaultTreeNode> init = split._1().reverse().tail().reverse();
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
104 List<DefaultTreeNode> newInit = init.snoc(replacement);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
105 List<DefaultTreeNode> newList = newInit.append(split._2());
39
7d78bbf4a9cd added some tests
Shoshi TAMAKI
parents: 37
diff changeset
106
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
107 return DefaultEither.newB(new DefaultTreeNode(newList,attrs));
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
108 }
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
109
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
110 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
111 public Either<Error,DefaultTreeNode> at(int _pos)
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
112 {
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
113 DefaultTreeNode Node = children.index(_pos);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
114 if(Node == null){
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
115 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
116 }
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
117
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
118 return DefaultEither.newB(Node);
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
119 }
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
120
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
121 @Override
52
Shoshi TAMAKI
parents: 41
diff changeset
122 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild)
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
123 {
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
124 if(!boundaryCheck(_pos) || _pos < 0){
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
125 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
126 }
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
127
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
128
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
129 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
130 List<DefaultTreeNode> newChildren = split._1().snoc(_newChild).append(split._2());
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
131 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
132
71
5dbae471a3b3 Deleting DefaultNode(change to DefaultTreeNodeChildren)
one
parents: 57
diff changeset
133 return DefaultEither.newB(newNode);
41
ed6737db637a added tests
Shoshi TAMAKI
parents: 39
diff changeset
134 }
37
35e327577b58 added transaction
Shoshi TAMAKI
parents:
diff changeset
135 }