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