diff src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java @ 310:474728dcfdb8

add PathType
author tatsuki
date Thu, 26 Jan 2017 23:44:14 +0900
parents f8e75ef7ac5d
children 5b9a3bc593a7
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java	Thu Jan 26 16:19:51 2017 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/RedBlackJungleTreeEditor.java	Thu Jan 26 23:44:14 2017 +0900
@@ -23,6 +23,7 @@
 
 import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.JungleTreeError.INVALID_ARGUMENT;
 import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.JungleTreeError.NOT_USE_METHOD;
+import static jp.ac.u_ryukyu.ie.cr.jungle.util.Error.TreeEditorError.UNDEFINE_NODEPATH;
 
 
 public class RedBlackJungleTreeEditor implements JungleTreeEditor {
@@ -81,43 +82,55 @@
      */
     @Override
     public Either<Error, JungleTreeEditor> addNewChildAndPutAttribute(NodePath path, int pos, String key, ByteBuffer value) {
+        if (path.getPathType() != PathType.RedBlack)
+            return DefaultEither.newA(UNDEFINE_NODEPATH);
         AppendChildAndPutAttribute appendChildAndPutAttribute = new AppendChildAndPutAttribute(key, value, pos);
-        return _edit(path, appendChildAndPutAttribute);
+        NodePath newParh = path.setType(PathType.RedBlackNode); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
+        return _edit(newParh, appendChildAndPutAttribute);
     }
 
     @Override
     public Either<Error, JungleTreeEditor> addNewChildAt(NodePath path, int _pos) {
+        if (path.getPathType() != PathType.RedBlack)
+            return DefaultEither.newA(UNDEFINE_NODEPATH);
         ByteBuffer value = ByteBuffer.wrap("defaultValue".getBytes());
         return addNewChildAndPutAttribute(path, 0, balanceKey, value);
     }
 
     @Override
     public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos) {
+        if (path.getPathType() != PathType.RedBlack)
+            return DefaultEither.newA(UNDEFINE_NODEPATH);
         String key = path.getKey();
         if (!key.equals(balanceKey))
             return DefaultEither.newA(INVALID_ARGUMENT);
+        NodePath newParh = path.setType(PathType.RedBlackNode); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
         ByteBuffer value = path.getValue();
         RedBlackTreeDeleteChildAt deleteChildAt = new RedBlackTreeDeleteChildAt(key, value);
-        return _edit(path, deleteChildAt);
+        return _edit(newParh, deleteChildAt);
     }
 
     @Override
     public Either<Error, JungleTreeEditor> putAttribute(NodePath path, String key, ByteBuffer value) {
+        if (path.getPathType() != PathType.RedBlack)
+            return DefaultEither.newA(UNDEFINE_NODEPATH);
         if (key.equals(balanceKey))
             return DefaultEither.newA(INVALID_ARGUMENT);
         if (path.getPathType() != PathType.RedBlack)
             return DefaultEither.newA(INVALID_ARGUMENT);
         NodeEditor editor = new PutAttribute(key, value);
-        NodePath newParh = path.add(-1); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
+        NodePath newParh = path.setType(PathType.RedBlackAttribute); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
         return _edit(newParh, editor);
     }
 
     @Override
     public Either<Error, JungleTreeEditor> deleteAttribute(NodePath path, String _key) {
+        if (path.getPathType() != PathType.RedBlack)
+            return DefaultEither.newA(UNDEFINE_NODEPATH);
         if (_key.equals(balanceKey))
             return DefaultEither.newA(INVALID_ARGUMENT);
         DeleteAttribute deleteAttribute = new DeleteAttribute(_key);
-        NodePath newParh = path.add(-1); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
+        NodePath newParh = path.setType(PathType.RedBlackAttribute); //回転処理を行わないで木の複製を行う設定のPathに変えている… ダサい…
         return _edit(newParh, deleteAttribute);
     }