package edu.harvard.iq.dataverse.authorization; import edu.harvard.iq.dataverse.RoleAssignment; import edu.harvard.iq.dataverse.util.BitSet; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * A set of assignment for a given {@link RoleAssignee} user has. * * LATER: we could probably refactor this class out. * @author michael */ public class RoleAssignmentSet implements Iterable<RoleAssignment> { private final RoleAssignee roas; private final Set<RoleAssignment> assignments = new HashSet<>(); public RoleAssignmentSet( RoleAssignee aRoleAssignee) { roas = aRoleAssignee; } public void add( Iterable<RoleAssignment> ras ) { for ( RoleAssignment ra : ras ) { assignments.add(ra); } } public void add( RoleAssignment ra ) { assignments.add( ra ); } public Set<Permission> getPermissions() { BitSet acc = new BitSet(); for ( RoleAssignment ra : assignments ) { acc.union( new BitSet(ra.getRole().getPermissionsBits()) ); } return acc.asSetOf( Permission.class ); } public RoleAssignee getRoleAssignee() { return roas; } public Set<RoleAssignment> getAssignments() { return assignments; } @Override public Iterator<RoleAssignment> iterator() { return assignments.iterator(); } public boolean isEmpty() { return assignments.isEmpty(); } }