Mercurial > hg > Members > tatsuki > bench > jungle-core
view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java @ 19:703f0be5368a
added attribute cache
author | Shoshi TAMAKI |
---|---|
date | Thu, 20 Dec 2012 18:09:17 +0900 |
parents | 8d4cbd5a6525 |
children | 848f73545c4d |
line wrap: on
line source
package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl; 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.TreeEditResult; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditResultStatus; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeEditor; 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.SetAttribute; 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.TraverseResult; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.Traverser; 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 TreeEditResult appendChild(NodePath _path,int _pos) { return edit(_path,new AppendChildAt(_pos)); } @Override public TreeEditResult deleteChild(NodePath _path,int _pos) { return edit(_path,new DeleteChildAt(_pos)); } @Override public TreeEditResult putAttribute(NodePath _path, String _key,ByteBuffer _value) { return edit(_path,new SetAttribute(_key,_value)); } @Override public TreeEditResult deleteAttribute(NodePath _path, String _key) { return edit(_path,new DeleteAttribute(_key)); } @Override public boolean success() { return false; } @Override public TreeEditResult edit(NodePath _path, NodeEditor _editor) { Tree t = tip.getTree(); Traverser traverser = new DefaultTraverser(); DefaultTraverseEvaluator te = new DefaultTraverseEvaluator(_path); Iterable<TraverseResult> result = traverser.traverse(t,te); Iterator<TraverseResult> itr = result.iterator(); if(itr.hasNext()){ TraverseResult r = itr.next(); cloneAndApplyToNodeEditorFromRoot(r,_editor); } return new DefaultTreeEditResult(null,TreeEditResultStatus.NODEPATH_NOTFOUND); } public void cloneAndApplyToNodeEditorFromRoot(TraverseResult _r,NodeEditor _editor) { Iterator<Node> nodes = _r.iterator(); //root if(!nodes.hasNext()){ return; } DefaultNode root = (DefaultNode)nodes.next(); } }