package org.ovirt.engine.core.dao;
import java.util.List;
import javax.inject.Named;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.VdcObjectType;
import org.ovirt.engine.core.common.businessentities.ActionGroup;
import org.ovirt.engine.core.common.businessentities.Permission;
import org.ovirt.engine.core.common.businessentities.RoleType;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
/**
* {@code PermissionsDaoImpl} provides a concrete implementation of {@link PermissionDao}.
*/
@Named
@Singleton
public class PermissionDaoImpl extends BaseDao implements PermissionDao {
@Override
public Permission get(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("id", id);
return getCallsHandler().executeRead("GetPermissionsByid", permissionRowMapper, parameterSource);
}
@Override
public List<Permission> getConsumedPermissionsForQuotaId(Guid quotaId) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("quota_id", quotaId);
return getCallsHandler().executeReadList("GetConsumedPermissionsForQuotaId",
permissionRowMapper,
parameterSource);
}
@Override
public Permission getForRoleAndAdElementAndObject(Guid roleid,
Guid elementid, Guid objectid) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("role_id", roleid)
.addValue("ad_element_id", elementid)
.addValue("object_id", objectid);
return getCallsHandler().executeRead("GetPermissionsByRoleIdAndAdElementIdAndObjectId",
permissionRowMapper,
parameterSource);
}
@Override
public Permission getForRoleAndAdElementAndObjectWithGroupCheck(Guid roleid,
Guid elementid, Guid objectid) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("role_id", roleid)
.addValue("ad_element_id", elementid)
.addValue("object_id", objectid);
return getCallsHandler().executeRead("GetForRoleAndAdElementAndObject_wGroupCheck",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllForAdElement(Guid id) {
return getAllForAdElement(id, -1, false);
}
@Override
public List<Permission> getAllForAdElement(Guid id, long engineSessionSeqId, boolean isFiltered) {
int appMode = Config.<Integer> getValue(ConfigValues.ApplicationMode);
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("ad_element_id", id).
addValue("engine_session_seq_id", engineSessionSeqId).
addValue("is_filtered", isFiltered).
addValue("app_mode", appMode);
return getCallsHandler().executeReadList("GetPermissionsByAdElementId",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllDirectPermissionsForAdElement(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("ad_element_id", id);
return getCallsHandler().executeReadList("GetDirectPermissionsByAdElementId",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllForRole(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("role_id", id);
return getCallsHandler().executeReadList("GetPermissionsByRoleId",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllForRoleAndAdElement(Guid roleid,
Guid elementid) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("role_id", roleid).addValue("ad_element_id",
elementid);
return getCallsHandler().executeReadList("GetPermissionsByRoleIdAndAdElementId",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllForRoleAndObject(Guid roleid, Guid objectid) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("role_id", roleid).addValue("object_id", objectid);
return getCallsHandler().executeReadList("GetPermissionsByRoleIdAndObjectId",
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getAllForEntity(Guid id) {
return getAllForEntity(id, -1, false);
}
@Override
public List<Permission> getAllForEntity(Guid id, long engineSessionId, boolean isFiltered) {
return getAllForEntity(id, engineSessionId, isFiltered, false);
}
@Override
public List<Permission> getAllForEntity(Guid id, long engineSessionId, boolean isFiltered, boolean allUsersWithPermission) {
int appMode = Config.<Integer> getValue(ConfigValues.ApplicationMode);
return getAllForEntity(id, engineSessionId, isFiltered, allUsersWithPermission, appMode);
}
@Override
public List<Permission> getAllForEntity(Guid id, long engineSessionSeqId, boolean isFiltered, boolean allUsersWithPermission, int appMode) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("id", id)
.addValue("engine_session_seq_id", engineSessionSeqId)
.addValue("is_filtered", isFiltered)
.addValue("app_mode", appMode);
String functionName = "GetPermissionsByEntityId";
if (allUsersWithPermission) {
functionName = "GetAllUsersWithPermissionsOnEntityByEntityId";
}
return getCallsHandler().executeReadList(functionName,
permissionRowMapper,
parameterSource);
}
@Override
public List<Permission> getTreeForEntity(Guid id, VdcObjectType type) {
return getTreeForEntity(id, type, -1, false);
}
@Override
public List<Permission> getTreeForEntity(Guid id, VdcObjectType type, long engineSessionSeqId, boolean isFiltered) {
int appMode = Config.<Integer> getValue(ConfigValues.ApplicationMode);
return getTreeForEntity(id, type, engineSessionSeqId, isFiltered, appMode);
}
@Override
public List<Permission> getTreeForEntity(Guid id, VdcObjectType type, long engineSessionSeqId, boolean isFiltered, int appMode) {
MapSqlParameterSource parameterSource =
getCustomMapSqlParameterSource()
.addValue("id", id)
.addValue("object_type_id", type.getValue())
.addValue("engine_session_seq_id", engineSessionSeqId)
.addValue("is_filtered", isFiltered)
.addValue("app_mode", appMode);
return getCallsHandler().executeReadList("GetPermissionsTreeByEntityId",
permissionRowMapper,
parameterSource);
}
@Override
public Guid getEntityPermissions(Guid adElementId, ActionGroup actionGroup, Guid objectId,
VdcObjectType vdcObjectType) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("user_id", adElementId)
.addValue("action_group_id", actionGroup.getId()).addValue("object_id", objectId).addValue(
"object_type_id", vdcObjectType.getValue());
return getCallsHandler().executeRead("get_entity_permissions",
createGuidMapper(),
parameterSource);
}
@Override
public Guid getEntityPermissionsForUserAndGroups(Guid userId,
String groupIds,
ActionGroup actionGroup,
Guid objectId,
VdcObjectType vdcObjectType,
boolean ignoreEveryone) {
MapSqlParameterSource parameterSource =
getCustomMapSqlParameterSource().addValue("user_id", userId)
.addValue("group_ids", groupIds)
.addValue("action_group_id", actionGroup.getId())
.addValue("object_id", objectId)
.addValue("object_type_id", vdcObjectType.getValue())
.addValue("ignore_everyone", ignoreEveryone);
return getCallsHandler().executeRead("get_entity_permissions_for_user_and_groups",
createGuidMapper(),
parameterSource);
}
@Override
public void save(Permission permission) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("ad_element_id", permission.getAdElementId())
.addValue("id", permission.getId())
.addValue("role_id", permission.getRoleId())
.addValue("object_id", permission.getObjectId())
.addValue("object_type_id",
permission.getObjectType().getValue());
getCallsHandler().executeModification("InsertPermission", parameterSource);
}
@Override
public void remove(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("id", id);
getCallsHandler().executeModification("DeletePermission", parameterSource);
}
@Override
public void removeForEntity(Guid id) {
MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource()
.addValue("id", id);
getCallsHandler().executeModification("DeletePermissionsByEntityId", parameterSource);
}
@Override
public List<Permission> getAll() {
throw new UnsupportedOperationException();
}
@Override
public void update(Permission entity) {
throw new UnsupportedOperationException();
}
private static final RowMapper<Permission> permissionRowMapper = (rs, rowNum) -> {
Permission entity = new Permission();
entity.setAdElementId(getGuidDefaultEmpty(rs, "ad_element_id"));
entity.setId(getGuidDefaultEmpty(rs, "id"));
entity.setRoleId(getGuidDefaultEmpty(rs, "role_id"));
entity.setObjectId(getGuidDefaultEmpty(rs, "object_id"));
entity.setObjectType(VdcObjectType.forValue(rs
.getInt("object_type_id")));
entity.setRoleName(rs.getString("role_name"));
entity.setObjectName(rs.getString("object_name"));
entity.setOwnerName(rs.getString("owner_name"));
entity.setNamespace(rs.getString("namespace"));
entity.setAuthz(rs.getString("authz"));
entity.setRoleType(RoleType.getById(rs.getInt("role_type")));
entity.setCreationDate(rs.getLong("creation_date"));
return entity;
};
}