view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/store/impl/DefaultTreeEditor.java @ 16:35c661de095d

added Parameter ... etc..
author Shoshi TAMAKI
date Wed, 19 Dec 2012 23:20:00 +0900
parents 596a714e6a89
children 8d4cbd5a6525
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.ChangeSet;
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 ChangeSet tip;
	
	public DefaultTreeEditor(TreeRepository _repo)
	{
		repo = _repo;
		tip = _repo.getCurrentChangeSet();
	}

	@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();
		
	}
	
	
}