view src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 8:378bfec11a8d

add roleIdsTest and method
author one
date Sat, 25 Oct 2014 09:55:00 +0900
parents 47eb9ee2a1db
children 28f383f677ff
line wrap: on
line source

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

import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import fj.data.List;
import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
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 {
	
	JungleTree personTree;
	JungleTree organizationTree;
	public JuGrix(){
		try{
			loadXml reader = new loadXml();
			personTree = reader.loadTestData("Person.xml");
			organizationTree = reader.loadTestData("Organization.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public boolean isActive(String id){
		
		InterfaceTraverser ifTraverser = personTree.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(String id){
		
		List<String> names = personIdsSearch(id);
		return names.iterator();
	}
	
	public Iterator<String> personIds(List<String> ids){
		
		List<String> personIds = List.nil();
		
		for (String id : ids) {
		personIds = personIds.append(personIdsSearch(id));
		}
		return personIds.iterator();
	}
	
	private List<String> personIdsSearch(String id) {
		InterfaceTraverser ifTraverser = personTree.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;
	}

	public Iterator<String> roleIds(String id) {
		Pattern personPattern = Pattern.compile("p:");
		Matcher personMacher = personPattern.matcher(id);
		if (personMacher.find()) {
			return searchRoleIds(personTree, id, "Person");
		}
		
		Pattern organizationPattern = Pattern.compile("o:");
		Matcher organizationMacher = organizationPattern.matcher(id);
		if (organizationMacher.find()) {
			return searchRoleIds(organizationTree, id, "Organization");
		}
		
		return null;
	}
	
	public Iterator<String> searchRoleIds(JungleTree tree, String id, String element){
		
		InterfaceTraverser ifTraverser = tree.getTraverser();
		Iterator<Pair<TreeNode,NodePath>> searchTargetIterator = ifTraverser.find(
				(TreeNode node) -> {
					String nodeElement = node.getAttributes().getString("element");
					if (nodeElement == null)
						return false;
					if (!nodeElement.equals(element)) 
						return false;
					String nodeId = node.getAttributes().getString("id");
					if (nodeId == null)
						return false;
					if (nodeId.equals(id)) 
						return true;
					return false;
				}
				,"id",id);
		
		List<String> ids = List.nil();
		for (;searchTargetIterator.hasNext();) {
			
			Pair<TreeNode, NodePath> searchTargetPair = searchTargetIterator.next();
			Iterator<Pair<TreeNode,NodePath>> pairIdIterator = ifTraverser.find(
					(TreeNode node) -> {
						String nodeElement = node.getAttributes().getString("element");
						if (nodeElement == null)
							return false;
						if (!nodeElement.equals("roleRefId")) 
							return false;
						String nodeId = node.getAttributes().getString("text");
						if (nodeId != null)
							return true;
						return false;
					}
					,searchTargetPair.left());
			

			for (;pairIdIterator.hasNext();){
				Pair<TreeNode, NodePath> idNodePath = pairIdIterator.next();
				String attribute = idNodePath.left().getAttributes().getString("text");
				
				Iterator<String> checkList = ids.iterator();
				for (;checkList.hasNext();) {
					if(checkList.next().equals(attribute))
						attribute = null;
				}
				
				if (attribute != null) {
					ids = ids.cons(attribute);
					System.out.println("-------------------------" + attribute + "-------------------------");
				}
			}
		}
		return ids.iterator();
	}
	
	
	public Iterator<String> competentRoleId(String personId) {
		
		InterfaceTraverser ifTraverser = personTree.getTraverser();
		Iterator<Pair<TreeNode,NodePath>> pairPersonIterator = ifTraverser.find(
				(TreeNode node) -> {
					String nodeElement = node.getAttributes().getString("element");
					if (nodeElement == null)
						return false;
					if (!nodeElement.equals("Person")) 
						return false;
					String nodeId = node.getAttributes().getString("id");
					if (nodeId == null)
						return false;
					if (nodeId.equals(personId)) 
						return true;
					return false;
				}
				,"element","Person");
		
		return null;
	}


}