diff src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultDifferenceJungleTreeEditor.java @ 265:b3a04bc21b23 Implementation_of_communication

add UnDefineNode
author tatsuki
date Tue, 13 Dec 2016 03:16:12 +0900
parents cac88cf813f1
children
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultDifferenceJungleTreeEditor.java	Tue Dec 13 00:25:29 2016 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/jungle/transaction/editor/jungleTreeEditor/DefaultDifferenceJungleTreeEditor.java	Tue Dec 13 03:16:12 2016 +0900
@@ -1,10 +1,14 @@
 package jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor;
 
-import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.transaction.node.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.DefaultTreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.LoggingNode;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.OperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.logger.TreeOperationLog;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.nodepath.NodePath;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.DefaultTreeOperation;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.NodeOperation;
+import jp.ac.u_ryukyu.ie.cr.jungle.store.operations.TreeOperation;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.AppendChildAt;
 import jp.ac.u_ryukyu.ie.cr.jungle.store.trasnformer.NodeEditor;
 import jp.ac.u_ryukyu.ie.cr.jungle.transaction.TransactionManager;
@@ -12,6 +16,7 @@
 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;
+import jp.ac.u_ryukyu.ie.cr.jungle.util.IterableConverter;
 
 import java.nio.ByteBuffer;
 
@@ -41,7 +46,27 @@
 
     private Either<Error, JungleTreeEditor> _edit(final NodePath _path, NodeEditor _e) {
         Either<Error, LoggingNode> either = editor.edit(root, _path, _e);
-        return null;
+        if(either.isA()){
+            return DefaultEither.newA(either.a());
+        }
+
+        LoggingNode newLogging = either.b();
+        OperationLog newLog = newLogging.getOperationLog();
+        TreeNode newNode = newLogging.getWrap();
+
+        IterableConverter.Converter<TreeOperation,NodeOperation> converter = new IterableConverter.Converter<TreeOperation,NodeOperation>(){
+            @Override
+            public TreeOperation conv(NodeOperation _b){
+                return new DefaultTreeOperation(_path,_b);
+            }
+        };
+
+        Iterable<TreeOperation> iterable = new IterableConverter<>(newLog,converter);
+        DefaultTreeOperationLog treeOperationLog = new DefaultTreeOperationLog(iterable,newLog.length());
+        TreeOperationLog newTreeOpLog = log.append(treeOperationLog);
+
+        JungleTreeEditor newEditor = new DefaultDifferenceJungleTreeEditor(newNode,txManager,editor,newTreeOpLog);
+        return DefaultEither.newB(newEditor);
     }