package edu.harvard.iq.dataverse.engine.command.impl; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.RoleAssignee; import edu.harvard.iq.dataverse.authorization.groups.GroupException; import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroup; import edu.harvard.iq.dataverse.engine.command.AbstractCommand; import edu.harvard.iq.dataverse.engine.command.CommandContext; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.engine.command.RequiredPermissions; import edu.harvard.iq.dataverse.engine.command.exception.CommandException; import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException; import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJBException; /** * * @author michael */ @RequiredPermissions( Permission.ManageDataversePermissions ) public class AddRoleAssigneesToExplicitGroupCommand extends AbstractCommand<ExplicitGroup> { private final Set<String> roleAssigneeIdentifiers; private final ExplicitGroup explicitGroup; public AddRoleAssigneesToExplicitGroupCommand(DataverseRequest aRequest, ExplicitGroup anExplicitGroup, Set<String> someRoleAssigneeIdentifiers) { super(aRequest, anExplicitGroup.getOwner()); roleAssigneeIdentifiers = someRoleAssigneeIdentifiers; explicitGroup = anExplicitGroup; } @Override public ExplicitGroup execute(CommandContext ctxt) throws CommandException { List<String> nonexistentRAs = new LinkedList<>(); for ( String rai : roleAssigneeIdentifiers ) { RoleAssignee ra = null; try { ra = ctxt.roleAssignees().getRoleAssignee(rai); } catch ( EJBException iae ) { if ( iae.getCausedByException() instanceof IllegalArgumentException ) { throw new IllegalCommandException("Bad role assignee name:" + rai, this); } } if ( ra == null ) { nonexistentRAs.add( rai ); } else { try { explicitGroup.add(ra); } catch (GroupException ex) { Logger.getLogger(AddRoleAssigneesToExplicitGroupCommand.class.getName()) .log(Level.WARNING, "Error adding role assignee " + rai + " to group" + " " + explicitGroup.getIdentifier(), ex); throw new IllegalCommandException("Error adding " + rai + " to group " + explicitGroup.getIdentifier() + ": " + ex.getMessage(), this ); } } } if ( nonexistentRAs.isEmpty() ) { return ctxt.explicitGroups().persist(explicitGroup); } else { StringBuilder sb = new StringBuilder(); for ( String s : nonexistentRAs ) { sb.append(s).append(", "); } sb.setLength( sb.length()-2); throw new IllegalCommandException("The following role assignees were not found: " + sb.toString(), this ); } } }