Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultJungleTreeEditor.java @ 38:cb9fabaedfd4
added tests and changed testing provider to junit47
author | Shoshi TAMAKI |
---|---|
date | Mon, 28 Jan 2013 18:52:52 +0900 |
parents | 35e327577b58 |
children | fb00d7b147c8 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; import java.nio.ByteBuffer; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.Logger; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.LoggingNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; public class DefaultJungleTreeEditor implements JungleTreeEditor<DefaultJungleTreeEditor> { private final TransactionManager txManager; private final DefaultNode root; private final DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> editor; private final Traverser traverser; public DefaultJungleTreeEditor(DefaultNode _root,TransactionManager _txManager,Traverser _traverser) { root = _root; txManager = _txManager; ClonableDefaultNode node = new ClonableDefaultNode(root); LoggingNode<ClonableDefaultNode> loggingNode = new LoggingNode<ClonableDefaultNode>(node); editor = new DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>(loggingNode,_traverser); traverser = _traverser; } @Override public Either<Error,DefaultJungleTreeEditor> appendChild(NodePath _path, int _pos) { Either<Error,DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>> either = editor.appendChild(_path,_pos); if(either.isA()){ return DefaultEither.newA(either.a()); } DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> newTreeEditor = either.b(); DefaultNode newRoot = newTreeEditor.getRootNode().getWrapper().getWrapped(); return DefaultEither.newB(new DefaultJungleTreeEditor(newRoot,txManager,traverser)); } @Override public Either<Error,DefaultJungleTreeEditor> deleteChild(NodePath _path, int _pos) { Either<Error,DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>> either = editor.deleteChild(_path,_pos); if(either.isA()){ return DefaultEither.newA(either.a()); } DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> newTreeEditor = either.b(); DefaultNode newRoot = newTreeEditor.getRootNode().getWrapper().getWrapped(); return DefaultEither.newB(new DefaultJungleTreeEditor(newRoot,txManager,traverser)); } @Override public Either<Error,DefaultJungleTreeEditor> putAttribute(NodePath _path,String _key,ByteBuffer _value) { Either<Error,DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>> either = editor.putAttribute(_path,_key,_value); if(either.isA()){ return DefaultEither.newA(either.a()); } DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> newTreeEditor = either.b(); DefaultNode newRoot = newTreeEditor.getRootNode().getWrapper().getWrapped(); return DefaultEither.newB(new DefaultJungleTreeEditor(newRoot,txManager,traverser)); } @Override public Either<Error,DefaultJungleTreeEditor> deleteAttribute(NodePath _path, String _key) { Either<Error,DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>> either = editor.deleteAttribute(_path,_key); if(either.isA()){ return DefaultEither.newA(either.a()); } DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> newTreeEditor = either.b(); DefaultNode newRoot = newTreeEditor.getRootNode().getWrapper().getWrapped(); return DefaultEither.newB(new DefaultJungleTreeEditor(newRoot,txManager,traverser)); } @Override public Either<Error,DefaultJungleTreeEditor> edit(NodePath _path,NodeEditor _transformer) { Either<Error,DefaultTreeEditor<LoggingNode<ClonableDefaultNode>>> either = editor.edit(_path,_transformer); if(either.isA()){ return DefaultEither.newA(either.a()); } DefaultTreeEditor<LoggingNode<ClonableDefaultNode>> newTreeEditor = either.b(); DefaultNode newRoot = newTreeEditor.getRootNode().getWrapper().getWrapped(); return DefaultEither.newB(new DefaultJungleTreeEditor(newRoot,txManager,traverser)); } @Override public Either<Error,JungleTree> success() { LoggingNode<ClonableDefaultNode> loggingNode = editor.getRootNode(); Logger log = loggingNode.getLogger(); DefaultNode newRoot = loggingNode.getWrapper().getWrapped(); Either<Error,JungleTree> either = txManager.commit(newRoot,log); if(either.isA()){ return DefaultEither.newA(either.a()); } return DefaultEither.newB(either.b()); } }