Mercurial > hg > Members > shoshi > jungle > jungle-core
view 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 source
package jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.jungleTreeEditor; 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; import jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.treeEditor.TreeEditor; 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; import static jp.ac.u_ryukyu.ie.cr.jungle.transaction.editor.Error.TreeEditorError.NOT_USE_METHOD; /** * Created by e115731 on 2016/12/11. */ public class DefaultDifferenceJungleTreeEditor implements JungleTreeEditor { private final TransactionManager txManager; private final TreeNode root; private final TreeEditor editor; private final TreeOperationLog log; public DefaultDifferenceJungleTreeEditor(TreeNode _root, TransactionManager _txManager, TreeEditor _editor) { this(_root, _txManager, _editor, new DefaultTreeOperationLog()); } public DefaultDifferenceJungleTreeEditor(TreeNode newNode, TransactionManager _txManager, TreeEditor _editor, TreeOperationLog _log) { this.root = newNode; this.txManager = _txManager; this.editor = _editor; this.log = _log; } private Either<Error, JungleTreeEditor> _edit(final NodePath _path, NodeEditor _e) { Either<Error, LoggingNode> either = editor.edit(root, _path, _e); 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); } @Override public Either<Error, JungleTreeEditor> addNewChildAt(NodePath path, int pos) { AppendChildAt appendChildAt = new AppendChildAt(pos); return _edit(path,appendChildAt); } @Override public Either<Error, JungleTreeEditor> deleteChildAt(NodePath path, int pos) { return null; } @Override public Either<Error, JungleTreeEditor> putAttribute(NodePath path, String key, ByteBuffer value) { return null; } @Override public Either<Error, JungleTreeEditor> deleteAttribute(NodePath path, String key) { return null; } @Override public Either<Error, JungleTreeEditor> replaceNewRootNode() { return null; } @Override public Either<Error, JungleTreeEditor> edit(NodePath path, NodeEditor editor) { return null; } @Override public Either<Error, JungleTreeEditor> success() { return null; } @Override public Either<Error, JungleTreeEditor> flushSuccess() { return null; } @Override public Either<Error, JungleTreeEditor> moveChild(NodePath path, int childNum, String move) { return DefaultEither.newA(NOT_USE_METHOD); } }