Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/logger/LoggingChildren.java @ 25:1b448f9249ee
mark
author | Shoshi TAMAKI |
---|---|
date | Sun, 13 Jan 2013 20:52:19 +0900 |
parents | 3ef2a66a8c5d |
children | 075d6418e359 |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger; import java.util.Iterator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.AppendChildAtOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.DeleteChildAtOperation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.Operation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableChildren; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.EditableNode; 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; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.IterableWrapper; public class LoggingChildren implements EditableChildren { private final EditableChildren wrap; private final Logger log; public LoggingChildren(EditableChildren _wrap,Logger _log) { wrap = _wrap; log = _log; } @Override public int size() { return wrap.size(); } @Override public Iterator<Node> iterator() { IterableWrapper<Node> wrapper = new IterableWrapper<Node>(this); return wrapper.iterator(); } @Override public Either<Error,EditableNode> addNewChildAt(final int _pos) { Either<Error,EditableNode> either = wrap.addNewChildAt(_pos); if(either.isA()){ return either; } Operation opAddChild = new AppendChildAtOperation(){ @Override public int position(){ return _pos; } }; Logger newLog = log.add(opAddChild); EditableNode newWrap = either.b(); EditableNode newLoggingNode = new LoggingNode(newWrap,newLog); return DefaultEither.newB(newLoggingNode); } @Override public Either<Error,EditableNode> deleteChildAt(final int _pos) { Either<Error,EditableNode> either = wrap.deleteChildAt(_pos); if(either.isA()){ return either; } Operation opDeleteChild = new DeleteChildAtOperation(){ @Override public int position(){ return _pos; } }; Logger newLog = log.add(opDeleteChild); EditableNode newLoggingNode = new LoggingNode(either.b(),newLog); return DefaultEither.newB(newLoggingNode); } }