package org.ovirt.engine.core.bll;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.context.CommandContext;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.action.RolesParameterBase;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.common.businessentities.Role;
import org.ovirt.engine.core.common.businessentities.RoleGroupMap;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.RoleDao;
import org.ovirt.engine.core.dao.RoleGroupMapDao;
public abstract class RolesCommandBase<T extends RolesParameterBase> extends CommandBase<T> {
@Inject
private RoleDao roleDao;
@Inject
private RoleGroupMapDao roleGroupMapDao;
private Role _role;
/**
* Constructor for command creation when compensation is applied on startup
*/
public RolesCommandBase(Guid commandId) {
super(commandId);
}
public RolesCommandBase(T parameters, CommandContext commandContext) {
super(parameters, commandContext);
}
protected Role getRole() {
if (_role == null) {
_role = roleDao.get(getParameters().getRoleId());
}
return _role;
}
public String getRoleName() {
return getRole().getName();
}
protected boolean checkIfRoleIsReadOnly(List<String> validationMessages) {
boolean result = false;
if (getRole().isReadonly()) {
result = true;
validationMessages.add(EngineMessage.ACTION_TYPE_FAILED_ROLE_IS_READ_ONLY.toString());
}
return result;
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
List<PermissionSubject> permissionList = new ArrayList<>();
permissionList.add(new PermissionSubject(getParameters().getRoleId(),
VdcObjectType.Role,
getActionType().getActionGroup()));
return permissionList;
}
protected List<ActionGroup> getActionGroupsByRoleId(Guid roleId) {
List<ActionGroup> allGroups = new ArrayList<>();
List<RoleGroupMap> allGroupsMaps = roleGroupMapDao.getAllForRole(roleId);
for (RoleGroupMap map : allGroupsMaps) {
allGroups.add(map.getActionGroup());
}
return allGroups;
}
}