Mercurial > hg > Members > shoshi > jungle > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/node/Differencial/DifferencialTreeNodeChildren.java @ 276:71a2ee428081
add DifferencialChildrenTest.java
author | tatsuki |
---|---|
date | Sat, 17 Dec 2016 18:40:36 +0900 |
parents | 64123c7e9abf |
children | f69b2a5a821d |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.Differencial; import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditorError; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNodeChildren; import jp.ac.u_ryukyu.ie.cr.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.DefaultError; import jp.ac.u_ryukyu.ie.cr.jungle.util.Error.Error; import java.util.Iterator; import java.util.List; public class DifferencialTreeNodeChildren implements TreeNodeChildren { private List<TreeNode> children; private TreeNode node; public DifferencialTreeNodeChildren(TreeNode node, List<TreeNode> _children) { this.children = _children; this.node = node; } private boolean boundaryCheck(int _pos) { int size = children.size(); return size >= _pos && _pos >= 0; } @Override public Either<Error, TreeNode> addNewChildAt(int _pos) { return addNewChildAt(_pos, new DifferencialTreeNode()); } @Override public Either<Error, TreeNode> addNewChildAt(int _pos, TreeNode _newChild) { if (!boundaryCheck(_pos)) { return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } children.add(_pos, _newChild); return DefaultEither.newB(node); } @Override public Either<Error, TreeNode> deleteChildAt(int _pos) { if (!boundaryCheck(_pos)) { return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } children.remove(_pos); return DefaultEither.newB(node); } @Override public int size() { return children.size(); } @Override public Iterator<TreeNode> iterator() { return children.iterator(); } @Override public Either<Error, TreeNode> replaceNode(int _pos, TreeNode _replacement) { if (!boundaryCheck(_pos)) { return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } children.set(_pos, _replacement); return DefaultEither.newB(node); } @Override public Either<Error, TreeNode> moveChild(int pos, String move) { int size = children.size(); TreeNode child = children.get(pos); if (move.equals("up") && pos != 0) { children.remove(pos); children.add((pos - 1), child); } else if (move.equals("down") && pos < size - 1) { //sizeは0から始まるため -1する children.remove(pos); children.add((pos + 1), child); } else { return DefaultEither.newA(new DefaultError()); } return DefaultEither.newB(node); } @Override public Either<Error, TreeNode> at(int _pos) { if (!boundaryCheck(_pos + 1) && _pos > 0 ) { return DefaultEither.newA(NodeEditorError.INDEX_OUT_OF_BOUNDS); } TreeNode n = children.get(_pos); return DefaultEither.newB(n); } }