package edu.harvard.iq.dataverse.engine.command.impl;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.authorization.Permission;
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.exception.CommandException;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
/**
* Updates the permission root-ness of a DvObjectContainer.
* @author michael
*/
// no annotations here, since permissions are dynamically decided
public class UpdatePermissionRootCommand extends AbstractCommand<Dataverse> {
private final boolean newValue;
private final Dataverse dvoc;
public UpdatePermissionRootCommand(boolean newValue, DataverseRequest aRequest, Dataverse anAffectedDataverse) {
super(aRequest, anAffectedDataverse);
this.newValue = newValue;
dvoc = anAffectedDataverse;
}
@Override
public Dataverse execute( final CommandContext ctxt) throws CommandException {
if ( dvoc.isPermissionRoot() == newValue ) {
return dvoc;
} else {
dvoc.setPermissionRoot(newValue);
return ctxt.dataverses().save(dvoc);
}
}
@Override
public Map<String, Set<Permission>> getRequiredPermissions() {
// for data file check permission on owning dataset
return Collections.singletonMap("",
dvoc instanceof Dataverse ? Collections.singleton(Permission.ManageDataversePermissions)
: Collections.singleton(Permission.ManageDatasetPermissions));
}
}