/** * return the parent role name, null if role has no parent * * @param roleName */ public String getParent(String roleName) { checkRole(roleName); String parentRole = parentMappings.get(roleName); if (roleName.equals(parentRole)) cycleDetected(roleName, null); return parentRole; }
/** * recursive method to fill the ancestor list * * @param roleName * @param ancestors */ protected void fillAncestors(String roleName, List<String> ancestors) { if (roleName == null || roleName.length() == 0) return; // end recursion ancestors.add(roleName); String parentName = parentMappings.get(roleName); if (ancestors.contains(parentName)) { cycleDetected(roleName, parentName); } fillAncestors(parentMappings.get(roleName), ancestors); }
/** * Return child roles * * @param roleName */ public List<String> getChildren(String roleName) { checkRole(roleName); List<String> children = new ArrayList<String>(); for (Entry<String, String> entry : parentMappings.entrySet()) { if (entry.getValue() != null && entry.getValue().equals(roleName)) { if (roleName.equals(entry.getKey())) cycleDetected(roleName, null); children.add(entry.getKey()); } } return children; }
/** * recursive method to fill the descendant list * * @param children * @param descendants */ protected void fillDescendents(List<String> children, Set<String> descendants) { if (children == null || children.size() == 0) return; // end recursion for (String childName : children) { if (descendants.contains(childName)) // cycle cycleDetected(childName, null); descendants.add(childName); } for (String childName : children) { List<String> grandchildren = getChildren(childName); fillDescendents(grandchildren, descendants); } }