view src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 7:47eb9ee2a1db

add PersonIdsTest and Method add isActive Test and Method
author one
date Sat, 25 Oct 2014 07:48:02 +0900
parents
children 378bfec11a8d
line wrap: on
line source

package jp.ac.u_ryukyu.cr.ie.tatsuki.bbs;

import java.util.Iterator;

import fj.data.List;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Pair;

public class JuGrix {
	
	public boolean isActive(JungleTree tree, String id){
		
		InterfaceTraverser ifTraverser = tree.getTraverser();
		Iterator<Pair<TreeNode,NodePath>> pairIterator = ifTraverser.find(
				(TreeNode node) -> {
					String personId = node.getAttributes().getString("id");
					if (personId == null)
						return false;
					if (personId.equals(id)) 
						return true;
					return false;
				}
				,"id",id);

		if (pairIterator.hasNext())
			return true;
		return false;
		
	}
	
	public Iterator<String> personIds(JungleTree tree , String id){
		
		List<String> names = personIdsSearch(tree, id);
		return names.iterator();
	}
	
	public Iterator<String> personIds(JungleTree tree , List<String> ids){
		
		List<String> personIds = List.nil();
		
		for (String id : ids) {
		personIds = personIds.append(personIdsSearch(tree, id));
		}
		return personIds.iterator();
	}
	
	private List<String> personIdsSearch(JungleTree tree, String id) {
		InterfaceTraverser ifTraverser = tree.getTraverser();
		Iterator<Pair<TreeNode,NodePath>> pairPersonIterator = ifTraverser.find(
				(TreeNode node) -> {
					String personId = node.getAttributes().getString("element");
					if (personId == null)
						return false;
					if (personId.equals("Person")) 
						return true;
					return false;
				}
				,"element","Person");
		
		List<String> names = List.nil();
		for (;pairPersonIterator.hasNext();) {
			
			Pair<TreeNode, NodePath> pairPerson = pairPersonIterator.next();
			Iterator<Pair<TreeNode,NodePath>> pairIdIterator = ifTraverser.find(
					(TreeNode node) -> {
						String personId = node.getAttributes().getString("text");
						if (personId == null)
							return false;
						if (personId.equals(id)) 
							return true;
						return false;
					}
					,pairPerson.left(),"text",id);
			if (pairIdIterator.hasNext())
				names = names.cons(pairPerson.left().getAttributes().getString("id"));
			
		}
		return names;
	}
	


}