package org.ovirt.engine.core.bll;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
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.RoleGroupMap;
import org.ovirt.engine.core.common.businessentities.roles;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields;
@CustomLogFields({ @CustomLogField("RoleName") })
public abstract class RolesCommandBase<T extends RolesParameterBase> extends CommandBase<T> {
private roles _role;
/**
* Constructor for command creation when compensation is applied on startup
*
* @param commandId
*/
public RolesCommandBase(Guid commandId) {
super(commandId);
}
public RolesCommandBase(T parameters) {
super(parameters);
}
protected roles getRole() {
if (_role == null) {
_role = DbFacade.getInstance().getRoleDAO().get(getParameters().getRoleId());
}
return _role;
}
public String getRoleName() {
return getRole().getname();
}
protected boolean CheckIfRoleIsReadOnly(java.util.ArrayList<String> CanDoActionMessages) {
boolean result = false;
if (DbFacade.getInstance().getRoleDAO().get(getParameters().getRoleId()).getis_readonly()) {
result = true;
CanDoActionMessages.add(VdcBllMessages.ACTION_TYPE_FAILED_ROLE_IS_READ_ONLY.toString());
}
return result;
}
@Override
public Map<Guid, VdcObjectType> getPermissionCheckSubjects() {
return Collections.singletonMap(getParameters().getRoleId(), VdcObjectType.Role);
}
protected ArrayList<ActionGroup> getActionGroupsByRoleId(Guid roleId) {
ArrayList<ActionGroup> allGroups = new ArrayList<ActionGroup>();
List<RoleGroupMap> allGroupsMaps = DbFacade.getInstance().getRoleGroupMapDAO().getAllForRole(roleId);
for (RoleGroupMap map : allGroupsMaps) {
allGroups.add(map.getActionGroup());
}
return allGroups;
}
}