view src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/BruteForceTraverser.java @ 98:95000ff9064d

Create Query
author one
date Tue, 09 Sep 2014 16:23:01 +0900
parents a1e20a440ddd
children 92d0c6e4655c
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser;

import java.util.Iterator;

import fj.data.List;
import fj.data.TreeMap;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Children;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;
import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNode;
import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.IteratorPathNodeImpl;
import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.query.Query;

public class BruteForceTraverser {
	BruteForceTraverser traverser;
	TreeNode node;
	TreeMap<String,TreeNode> nodeIndex;
	TreeMap<String,String> attributeIndex;	
	
	public BruteForceTraverser(TreeNode _root){
		node = _root;
		//pathNodes = this.traverse(_root,new DefaultNodePath(),-1);
	}
	
	public BruteForceTraverser getTraverser(JungleTree tree){
		return new BruteForceTraverser(tree.getRootNode());
	}
	

	/*public IteratorPathNode traverse(TreeNode _node ,NodePath _path ,int _pos){
		
		Children  children = _node.getChildren();
		Either<Error,TreeNode> either = children.at(0);
		IteratorPathNode list = new IteratorPathNodeImpl();
		int pathCount = _pos;
		if(children.size() == 0){
			list = list.add(new Pair<TreeNode, NodePath>(node, _path.add(_pos)));
			return list;
		}
		
			for(TreeNode child : children){
				list = list.append(traverse(child,_path,pathCount));
				pathCount++;
			}
			
			list = list.add(new Pair<TreeNode,NodePath>(_node, _path.add(_pos)));
		return list;
	}
	
	public int count(Query _query, String _key, String _attribute){
		return this.find(_query,_key,_attribute);
	}
	
	public List<Pair<NodePath,TreeNode>> distinct(String _key ,String... _attribute){
		return null;
	}
	*/
	public Iterator<Pair<TreeNode, NodePath>> find(Query _query){
		IteratorPathNode itNode = new IteratorPathNodeImpl(node);
		List<Pair<TreeNode, NodePath>> list = List.nil();;
		for(;itNode.hasNext();){
			Pair<TreeNode, NodePath> pathNode = itNode.next();
			if(_query.condition(pathNode.left()))
				list = list.cons(pathNode);//list.reverse();//= list.cons();
		}	
		return list.iterator();
	}
	

}