Mercurial > hg > Members > tatsuki > JungleXMLReader
view src/main/java/jp/ac/u_ryukyu/cr/ie/tatsuki/bbs/JuGrix.java @ 10:ccb74917f06a
add concurrentRoleIdsTest and method
author | one |
---|---|
date | Sat, 25 Oct 2014 10:52:50 +0900 |
parents | 28f383f677ff |
children | 67305f53aad0 |
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.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; 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"); if (!pairPersonIterator.hasNext()) return new NullIterator(); TreeNode person = pairPersonIterator.next().left(); Iterator<Pair<TreeNode,NodePath>> targetPairIterator = ifTraverser.find( (TreeNode node) -> { String nodeElement = node.getAttributes().getString("element"); if (nodeElement == null) return false; if (!nodeElement.equals("priority")) return false; String priority = node.getAttributes().getString("text"); if (priority == null) return false; if (priority.equals("0")) return true; return false; } ,person); List<String> idList = List.nil(); for (;targetPairIterator.hasNext();) { NodePath searchPath = targetPairIterator.next().right(); Pair<Integer, NodePath> searchPair = searchPath.last(); NodePath targetPath = searchPair.right().add(searchPair.left() + 1); TreeNode targetNode = getTarget(person, targetPath); String id = targetNode.getAttributes().getString("text"); idList = idList.cons(id); } return idList.iterator(); } public Iterator<String> concurrentRoleIds(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"); if (!pairPersonIterator.hasNext()) return new NullIterator(); TreeNode person = pairPersonIterator.next().left(); Iterator<Pair<TreeNode,NodePath>> targetPairIterator = ifTraverser.find( (TreeNode node) -> { String nodeElement = node.getAttributes().getString("element"); if (nodeElement == null) return false; if (!nodeElement.equals("priority")) return false; String priority = node.getAttributes().getString("text"); if (priority == null) return false; if (!priority.equals("0")) return true; return false; } ,person); List<String> idList = List.nil(); for (;targetPairIterator.hasNext();) { NodePath searchPath = targetPairIterator.next().right(); Pair<Integer, NodePath> searchPair = searchPath.last(); NodePath targetPath = searchPair.right().add(searchPair.left() + 1); TreeNode targetNode = getTarget(person, targetPath); String id = targetNode.getAttributes().getString("text"); idList = idList.cons(id); } return idList.iterator(); } public TreeNode getTarget(TreeNode node , NodePath path){ TreeNode target; Pair<Integer, NodePath> pathNode = path.pop(); int num = pathNode.left(); NodePath newPath = pathNode.right(); if (num == -1 && newPath.size() != 0) return getTarget(node, newPath); Either<Error, TreeNode> either = node.getChildren().at(num); if (either.isA()) return node; TreeNode child = either.b(); if (pathNode.right().size() == 0) return child; target = getTarget(child,pathNode.right()); return target; } class NullIterator implements Iterator<String>{ @Override public boolean hasNext() { return false; } @Override public String next() { return null; } } }