package org.js.model.workflow.util; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.js.graph.transform.stagemodel.Stage; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.Group; import org.js.model.rbac.Role; import org.js.model.rbac.RoleType; public final class AccessControlModelUtil { public static Role getRole(String id, AccessControlModel accessControlModel) { Role result = null; EList<Role> roles = accessControlModel.getRoles(); for (Role role : roles) { if (id.equals(role.getId())) { result = role; } } return result; } public static Group getRoleGroupForOwner(Role owner, AccessControlModel accessControlModel) { Group result = null; EList<Group> groups = accessControlModel.getGroups(); for (Group group : groups) { if (owner.equals(group.getOwner())) { result = group; break; } } return result; } public static Group getRoleGroupForMember(Role member, AccessControlModel accessControlModel) { Group result = null; EList<Group> groups = accessControlModel.getGroups(); for (Group group : groups) { EList<Role> members = group.getMembers(); if (members.contains(member)) { result = group; break; } } return result; } public static Role getCorrespondingAbstractRole(Stage stage, AccessControlModel accessControlModel) { Role role = null; String stageId = stage.getId(); EList<Role> roles = accessControlModel.getRoles(); for (Role acRole : roles) { String roleId = acRole.getId(); if (roleId.equals(stageId)) { role = acRole; break; } } return role; } public static void removeRoleGroupAndRole(Role role, AccessControlModel accessControlModel) { Group group = AccessControlModelUtil.getRoleGroupForOwner(role, accessControlModel); if (group != null) { EList<Role> members = group.getMembers(); List<Role> copy = new ArrayList<Role>(members.size()); copy.addAll(members); for (Role memberRole : copy) { removeRoleGroupAndRole(memberRole, accessControlModel); } accessControlModel.getGroups().remove(group); } removeRoleFromParents(role); Group memberGroup = AccessControlModelUtil.getRoleGroupForMember(role, accessControlModel); if (memberGroup != null) { memberGroup.getMembers().remove(role); } accessControlModel.getRoles().remove(role); } public static void removeRoleFromParents(Role role) { EList<Role> parentRoles = role.getParentRoles(); Set<Role> copy = new HashSet<Role>(parentRoles.size()); copy.addAll(parentRoles); for (Role parentRole : copy) { parentRole.getChildRoles().remove(role); } } public static Set<Role> getConcreteRoles(AccessControlModel accessControlModel) { EList<Role> roles = accessControlModel.getRoles(); Set<Role> concreteRoles = new HashSet<Role>(); for (Role role : roles) { if (RoleType.CONCRETE.equals(role.getType())) { concreteRoles.add(role); } } return concreteRoles; } }