package edu.harvard.iq.dataverse.engine.command.impl; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.DvObject; import edu.harvard.iq.dataverse.authorization.Permission; 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; /** * A command that creates an explicit group in the context of a {@link Dataverse}. * * @author michael */ @RequiredPermissions( Permission.ManageDataversePermissions ) public class CreateExplicitGroupCommand extends AbstractCommand<ExplicitGroup>{ public class GroupAliasExistsException extends CommandException { private final String alias; public GroupAliasExistsException(String anAlias) { super("Alias '" + anAlias + "' already exists in context of Dataverse" + CreateExplicitGroupCommand.this.getAffectedDvObjects().get("").accept(DvObject.NamePrinter), CreateExplicitGroupCommand.this); alias = anAlias; } public String getAlias() { return alias; } } private final ExplicitGroup eg; private final Dataverse dv; public CreateExplicitGroupCommand(DataverseRequest aRequest, Dataverse aDataverse, ExplicitGroup anExplicitGroup) { super(aRequest, aDataverse); dv = aDataverse; eg = anExplicitGroup; } @Override public ExplicitGroup execute(CommandContext ctxt) throws CommandException { // make sure alias in owner is unique eg.setOwner(dv); eg.updateAlias(); ExplicitGroup existing = eg.getGroupProvider().get( eg.getAlias() ); if ( existing != null ) { throw new GroupAliasExistsException( eg.getGroupAliasInOwner() ); } // persist return ctxt.explicitGroups().persist(eg); } }