package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.action.RolesParameterBase;
import org.ovirt.engine.core.common.businessentities.roles;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class RemoveRoleCommand<T extends RolesParameterBase> extends RolesCommandBase<T> {
public RemoveRoleCommand(T parameters) {
super(parameters);
}
@Override
protected boolean canDoAction() {
boolean returnValue = true;
roles roles = DbFacade.getInstance().getRoleDAO().get(getParameters().getRoleId());
if (roles == null) {
returnValue = false;
addCanDoActionMessage(VdcBllMessages.ERROR_CANNOT_REMOVE_ROLE_INVALID_ROLE_ID);
} else {
if (CheckIfRoleIsReadOnly(getReturnValue().getCanDoActionMessages())) {
returnValue = false;
addCanDoActionMessage(VdcBllMessages.VAR__TYPE__ROLE);
addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REMOVE);
} else {
if (DbFacade.getInstance().getPermissionDAO().getAllForRole(getParameters().getRoleId()).size() != 0) {
returnValue = false;
addCanDoActionMessage(VdcBllMessages.ERROR_CANNOT_REMOVE_ROLE_ATTACHED_TO_PERMISSION);
}
}
}
return returnValue;
}
@Override
public AuditLogType getAuditLogTypeValue() {
return getSucceeded() ? AuditLogType.USER_REMOVE_ROLE : AuditLogType.USER_REMOVE_ROLE_FAILED;
}
@Override
protected void executeCommand() {
// cache role for logging
DbFacade.getInstance().getRoleDAO().remove(getRole().getId());
setSucceeded(true);
}
}