Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java @ 25:1b448f9249ee
mark
author | Shoshi TAMAKI |
---|---|
date | Sun, 13 Jan 2013 20:52:19 +0900 |
parents | 3ef2a66a8c5d |
children | 5f4172d6fb8b |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl; import java.util.LinkedList; import java.nio.ByteBuffer; import java.util.Iterator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Tree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeList; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TraversableTree; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditorError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.AppendChildAt; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteAttribute; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.DeleteChildAt; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.NodeEditor; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.trasnformer.PutAttribute; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverseEvaluator; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traversal; 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 DefaultTreeEditor implements TreeEditor { private final TreeRepository repo; private final ChangeList tip; public DefaultTreeEditor(TreeRepository _repo) { repo = _repo; tip = _repo.getCurrentChangeList(); } @Override public TraversableTree getTree() { return new DefaultTraversableTree(tip.getTree(),new DefaultTraverser()); } @Override public Either<Error,TreeEditor> appendChild(NodePath _path,int _pos) { return edit(_path,new AppendChildAt(_pos)); } @Override public Either<Error,TreeEditor> deleteChild(NodePath _path,int _pos) { return edit(_path,new DeleteChildAt(_pos)); } @Override public Either<Error,TreeEditor> putAttribute(NodePath _path, String _key,ByteBuffer _value) { return edit(_path,new PutAttribute(_key,_value)); } @Override public Either<Error,TreeEditor> deleteAttribute(NodePath _path, String _key) { return edit(_path,new DeleteAttribute(_key)); } @Override public boolean success() { return false; } @Override public Either<Error,TreeEditor> edit(NodePath _path, NodeEditor _editor) { Tree tree = tip.getTree(); Traverser traverser = new DefaultTraverser(); DefaultTraverseEvaluator te = new DefaultTraverseEvaluator(_path); for(Traversal traversal : traverser.traverse(tree,te)){ return clone(traversal); } return DefaultEither.newA(TreeEditorError.NODEPATH_NOTFOUND); } public Either<Error,TreeEditor> clone(Traversal _traversal) { for(Node node : _traversal){ DefaultNode defNode = (DefaultNode)node; } return null; } public void cloneAndApplyToNodeEditorFromRoot(Traversal _r,NodeEditor _editor) { LinkedList<DefaultNode> path = new LinkedList<DefaultNode>(); for(Node n : _r){ DefaultNode node = (DefaultNode)n; path.add(node); } } }