comparison 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
comparison
equal deleted inserted replaced
70:053c9b52a5b2 71:5dbae471a3b3
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; 1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction;
2 2
3 import java.nio.ByteBuffer; 3 import java.nio.ByteBuffer;
4 import java.util.Iterator; 4 import java.util.Iterator;
5
5 import fj.P2; 6 import fj.P2;
6 import fj.data.List; 7 import fj.data.List;
7 import fj.data.TreeMap; 8 import fj.data.TreeMap;
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes; 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultAttributes;
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren; 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultChildren;
24 System.out.println(split._1().length()); 25 System.out.println(split._1().length());
25 System.out.println(split._2().length()); 26 System.out.println(split._2().length());
26 27
27 } 28 }
28 29
29 private final DefaultNode node; 30 public List<DefaultTreeNode> children;
31 public TreeMap<String,ByteBuffer> attrs;
30 32
31 public DefaultTreeNodeChildren(DefaultNode _node) 33 public DefaultTreeNodeChildren(List<DefaultTreeNode> _children,TreeMap<String,ByteBuffer> _attrs)
32 { 34 {
33 node = _node; 35 children = _children;
36 attrs = _attrs;
34 } 37 }
35 38
36 private boolean boundaryCheck(int _pos) 39 private boolean boundaryCheck(int _pos)
37 { 40 {
38 int size = node.getChildren().size(); 41 int size = children.length();
39 if(size < _pos){ 42 if(size < _pos){
40 return false; 43 return false;
41 } 44 }
42 45
43 return true; 46 return true;
48 { 51 {
49 if(!boundaryCheck(_pos) || _pos < 0){ 52 if(!boundaryCheck(_pos) || _pos < 0){
50 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); 53 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
51 } 54 }
52 55
53 DefaultChildren children = node.getChildren();
54 DefaultAttributes attrs = node.getAttributes();
55 56
56 List<DefaultNode> raw = children.getChildrenAsRawList();
57 57
58 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); 58 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
59 List<DefaultNode> newChildren = split._1().snoc(new DefaultNode()).append(split._2()); 59 List<DefaultTreeNode> newChildren = split._1().snoc(new DefaultTreeNode()).append(split._2());
60 DefaultNode newNode = new DefaultNode(newChildren,attrs.getAttributesAsRawMap()); 60 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
61 61
62 return DefaultEither.newB(new DefaultTreeNode(newNode)); 62 return DefaultEither.newB(newNode);
63 } 63 }
64 64
65 @Override 65 @Override
66 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos) 66 public Either<Error,DefaultTreeNode> deleteChildAt(int _pos)
67 { 67 {
68 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){ 68 if(!boundaryCheck(_pos) || _pos < 0 || size() == 0){
69 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); 69 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
70 } 70 }
71
72 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
73 List<DefaultTreeNode> newChildren = split._1().append(split._2().tail());
71 74
72 DefaultChildren chs = node.getChildren();
73 List<DefaultNode> raw = chs.getChildrenAsRawList();
74 75
75 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); 76 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
76 List<DefaultNode> newChildren = split._1().append(split._2().tail());
77 77
78 DefaultAttributes attrs = node.getAttributes(); 78 return DefaultEither.newB(newNode);
79 TreeMap<String, ByteBuffer> map = attrs.getAttributesAsRawMap();
80
81 DefaultNode newNode = new DefaultNode(newChildren,map);
82
83 return DefaultEither.newB(new DefaultTreeNode(newNode));
84 } 79 }
85 80
86 @Override 81 @Override
87 public int size() 82 public int size()
88 { 83 {
89 return node.getChildren().size(); 84 return children.length();
90 } 85 }
91 86
92 @Override 87 @Override
93 public Iterator<DefaultTreeNode> iterator() 88 public Iterator<DefaultTreeNode> iterator()
94 { 89 {
95 IterableConverter.Converter<DefaultTreeNode,DefaultNode> converter = new IterableConverter.Converter<DefaultTreeNode,DefaultNode>(){ 90 return children.iterator();
96 @Override
97 public DefaultTreeNode conv(DefaultNode _b)
98 {
99 return new DefaultTreeNode(_b);
100 }
101 };
102
103 List<DefaultNode> raw = node.getChildren().getChildrenAsRawList();
104 return new IterableConverter<DefaultTreeNode,DefaultNode>(raw,converter).iterator();
105 } 91 }
106 92
107 @Override 93 @Override
108 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement) 94 public Either<Error,DefaultTreeNode> replaceNode(int _pos,DefaultTreeNode _replacement)
109 { 95 {
110 int size = node.getChildren().size(); 96 int size = children.length();
111 if(!(0 <= _pos && _pos < size)){ 97 if(!(0 <= _pos && _pos < size)){
112 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); 98 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
113 } 99 }
114 DefaultNode replacement = _replacement.getWrap(); 100 DefaultTreeNode replacement = _replacement;
115 101
116 List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList(); 102 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos + 1);
117 P2<List<DefaultNode>,List<DefaultNode>> split = rawList.splitAt(_pos + 1); 103 List<DefaultTreeNode> init = split._1().reverse().tail().reverse();
118 List<DefaultNode> init = split._1().reverse().tail().reverse(); 104 List<DefaultTreeNode> newInit = init.snoc(replacement);
119 List<DefaultNode> newInit = init.snoc(replacement); 105 List<DefaultTreeNode> newList = newInit.append(split._2());
120 List<DefaultNode> newList = newInit.append(split._2());
121 TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap();
122 106
123 return DefaultEither.newB(new DefaultTreeNode(new DefaultNode(newList,rawMap))); 107 return DefaultEither.newB(new DefaultTreeNode(newList,attrs));
124 } 108 }
125 109
126 @Override 110 @Override
127 public Either<Error,DefaultTreeNode> at(int _pos) 111 public Either<Error,DefaultTreeNode> at(int _pos)
128 { 112 {
129 List<DefaultNode> rawList = node.getChildren().getChildrenAsRawList(); 113 DefaultTreeNode Node = children.index(_pos);
130 DefaultNode ch = rawList.index(_pos); 114 if(Node == null){
131 if(ch == null){
132 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); 115 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
133 } 116 }
134 117
135 return DefaultEither.newB(new DefaultTreeNode(ch)); 118 return DefaultEither.newB(Node);
136 } 119 }
137 120
138 @Override 121 @Override
139 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild) 122 public Either<Error,DefaultTreeNode> addNewChildAt(int _pos,DefaultTreeNode _newChild)
140 { 123 {
141 if(!boundaryCheck(_pos) || _pos < 0){ 124 if(!boundaryCheck(_pos) || _pos < 0){
142 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); 125 return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS);
143 } 126 }
144 DefaultNode newChild = _newChild.getWrap();
145 127
146 List<DefaultNode> raw = node.getChildren().getChildrenAsRawList();
147 TreeMap<String, ByteBuffer> rawMap = node.getAttributes().getAttributesAsRawMap();
148 128
149 P2<List<DefaultNode>,List<DefaultNode>> split = raw.splitAt(_pos); 129 P2<List<DefaultTreeNode>,List<DefaultTreeNode>> split = children.splitAt(_pos);
150 List<DefaultNode> newChildren = split._1().snoc(newChild).append(split._2()); 130 List<DefaultTreeNode> newChildren = split._1().snoc(_newChild).append(split._2());
151 DefaultNode newNode = new DefaultNode(newChildren,rawMap); 131 DefaultTreeNode newNode = new DefaultTreeNode(newChildren,attrs);
152 132
153 return DefaultEither.newB(new DefaultTreeNode(newNode)); 133 return DefaultEither.newB(newNode);
154 } 134 }
155 } 135 }