api: Fix search by name (#6032)

* Search by name

* add keyword search for projectroles

* remove unnecessary arg
This commit is contained in:
Pearl Dsilva 2022-03-05 08:22:53 +05:30 committed by GitHub
parent 648f2c1d82
commit 3a74ec78be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 37 additions and 30 deletions

View File

@ -74,9 +74,10 @@ public interface ProjectRoleService {
/** /**
* *
* @param projectId ID of the project whosr project roles are to be listed * @param projectId ID of the project whosr project roles are to be listed
* @param keyword
* @return List of all available project roles * @return List of all available project roles
*/ */
List<ProjectRole> findProjectRoles(Long projectId); List<ProjectRole> findProjectRoles(Long projectId, String keyword);
/** /**
* Creates a project role permission to be mapped to a project role. * Creates a project role permission to be mapped to a project role.

View File

@ -25,7 +25,7 @@ import org.apache.cloudstack.acl.ProjectRole;
import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd;
import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ProjectResponse;
@ -36,7 +36,7 @@ import org.apache.commons.lang3.StringUtils;
@APICommand(name = ListProjectRolesCmd.APINAME, description = "Lists Project roles in CloudStack", responseObject = ProjectRoleResponse.class, @APICommand(name = ListProjectRolesCmd.APINAME, description = "Lists Project roles in CloudStack", responseObject = ProjectRoleResponse.class,
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, since = "4.15.0", authorized = { requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, since = "4.15.0", authorized = {
RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User}) RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
public class ListProjectRolesCmd extends BaseCmd { public class ListProjectRolesCmd extends BaseListCmd {
public static final String APINAME = "listProjectRoles"; public static final String APINAME = "listProjectRoles";
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
@ -79,7 +79,7 @@ public class ListProjectRolesCmd extends BaseCmd {
} else if (StringUtils.isNotBlank(getRoleName())) { } else if (StringUtils.isNotBlank(getRoleName())) {
projectRoles = projRoleService.findProjectRolesByName(getProjectId(), getRoleName()); projectRoles = projRoleService.findProjectRolesByName(getProjectId(), getRoleName());
} else { } else {
projectRoles = projRoleService.findProjectRoles(getProjectId()); projectRoles = projRoleService.findProjectRoles(getProjectId(), getKeyword());
} }
final ListResponse<ProjectRoleResponse> response = new ListResponse<>(); final ListResponse<ProjectRoleResponse> response = new ListResponse<>();
final List<ProjectRoleResponse> roleResponses = new ArrayList<>(); final List<ProjectRoleResponse> roleResponses = new ArrayList<>();

View File

@ -25,5 +25,5 @@ import com.cloud.utils.db.GenericDao;
public interface ProjectRoleDao extends GenericDao<ProjectRoleVO, Long> { public interface ProjectRoleDao extends GenericDao<ProjectRoleVO, Long> {
List<ProjectRoleVO> findByName(String name, Long projectId); List<ProjectRoleVO> findByName(String name, Long projectId);
List<ProjectRoleVO> findAllRoles(Long projectId); List<ProjectRoleVO> findAllRoles(Long projectId, String keyword);
} }

View File

@ -17,15 +17,14 @@
package org.apache.cloudstack.acl.dao; package org.apache.cloudstack.acl.dao;
import java.util.List;
import org.apache.cloudstack.acl.ProjectRoleVO;
import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria;
import org.apache.cloudstack.acl.ProjectRoleVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class ProjectRoleDaoImpl extends GenericDaoBase<ProjectRoleVO, Long> implements ProjectRoleDao{ public class ProjectRoleDaoImpl extends GenericDaoBase<ProjectRoleVO, Long> implements ProjectRoleDao{
private final SearchBuilder<ProjectRoleVO> ProjectRoleSearch; private final SearchBuilder<ProjectRoleVO> ProjectRoleSearch;
@ -33,8 +32,9 @@ public class ProjectRoleDaoImpl extends GenericDaoBase<ProjectRoleVO, Long> imp
super(); super();
ProjectRoleSearch = createSearchBuilder(); ProjectRoleSearch = createSearchBuilder();
ProjectRoleSearch.and("name", ProjectRoleSearch.entity().getName(), SearchCriteria.Op.LIKE); ProjectRoleSearch.and("name", ProjectRoleSearch.entity().getName(), SearchCriteria.Op.EQ);
ProjectRoleSearch.and("project_id", ProjectRoleSearch.entity().getProjectId(), SearchCriteria.Op.EQ); ProjectRoleSearch.and("project_id", ProjectRoleSearch.entity().getProjectId(), SearchCriteria.Op.EQ);
ProjectRoleSearch.and("keyword", ProjectRoleSearch.entity().getName(), SearchCriteria.Op.LIKE);
ProjectRoleSearch.done(); ProjectRoleSearch.done();
} }
@ -42,20 +42,26 @@ public class ProjectRoleDaoImpl extends GenericDaoBase<ProjectRoleVO, Long> imp
public List<ProjectRoleVO> findByName(String name, Long projectId) { public List<ProjectRoleVO> findByName(String name, Long projectId) {
SearchCriteria<ProjectRoleVO> sc = ProjectRoleSearch.create(); SearchCriteria<ProjectRoleVO> sc = ProjectRoleSearch.create();
if (StringUtils.isNotEmpty(name)) { if (StringUtils.isNotEmpty(name)) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (projectId != null) { if (projectId != null) {
sc.setParameters("project_id", projectId); sc.setParameters("project_id", projectId);
} }
return listBy(sc); return listBy(sc);
} }
@Override @Override
public List<ProjectRoleVO> findAllRoles(Long projectId) { public List<ProjectRoleVO> findAllRoles(Long projectId, String keyword) {
SearchCriteria<ProjectRoleVO> sc = ProjectRoleSearch.create(); SearchCriteria<ProjectRoleVO> sc = ProjectRoleSearch.create();
if (projectId != null) { if (projectId != null) {
sc.setParameters("project_id", projectId); sc.setParameters("project_id", projectId);
} }
if (StringUtils.isNotEmpty(keyword)) {
SearchCriteria<ProjectRoleVO> ssc = createSearchCriteria();
ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
sc.addAnd("name", SearchCriteria.Op.SC, ssc);
}
return listBy(sc); return listBy(sc);
} }
} }

View File

@ -897,7 +897,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
SearchCriteria<InstanceGroupJoinVO> sc = sb.create(); SearchCriteria<InstanceGroupJoinVO> sc = sb.create();
_accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
@ -913,7 +913,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
return _vmGroupJoinDao.searchAndCount(sc, searchFilter); return _vmGroupJoinDao.searchAndCount(sc, searchFilter);
@ -1012,7 +1012,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE); sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE);
sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN); sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("stateEQ", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("stateEQ", sb.entity().getState(), SearchCriteria.Op.EQ);
sb.and("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ); sb.and("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ);
sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN); sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN);
@ -1160,7 +1160,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (state != null) { if (state != null) {
@ -1410,7 +1410,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
// pagination // pagination
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("name", sb.entity().getInstanceName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getInstanceName(), SearchCriteria.Op.EQ);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.IN); sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.IN);
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
@ -1470,7 +1470,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (id != null) { if (id != null) {
@ -1892,7 +1892,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct
// ids // ids
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE); sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ); sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
@ -1931,7 +1931,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (type != null) { if (type != null) {
sc.setParameters("type", "%" + type); sc.setParameters("type", "%" + type);

View File

@ -2338,7 +2338,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("sourceIpAddress", sb.entity().getSourceIpAddressId(), SearchCriteria.Op.EQ); sb.and("sourceIpAddress", sb.entity().getSourceIpAddressId(), SearchCriteria.Op.EQ);
sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ);
sb.and("scheme", sb.entity().getScheme(), SearchCriteria.Op.EQ); sb.and("scheme", sb.entity().getScheme(), SearchCriteria.Op.EQ);
@ -2379,7 +2379,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase implements
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (id != null) { if (id != null) {

View File

@ -1739,7 +1739,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder(); final SearchBuilder<HostVO> sb = _hostDao.createSearchBuilder();
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("idsNotIn", sb.entity().getId(), SearchCriteria.Op.NOTIN); sb.and("idsNotIn", sb.entity().getId(), SearchCriteria.Op.NOTIN);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE); sb.and("type", sb.entity().getType(), SearchCriteria.Op.LIKE);
sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ); sb.and("status", sb.entity().getStatus(), SearchCriteria.Op.EQ);
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
@ -1784,7 +1784,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
} }
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (type != null) { if (type != null) {
sc.setParameters("type", "%" + type); sc.setParameters("type", "%" + type);
@ -1831,7 +1831,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
final Filter searchFilter = new Filter(HostPodVO.class, "dataCenterId", true, cmd.getStartIndex(), cmd.getPageSizeVal()); final Filter searchFilter = new Filter(HostPodVO.class, "dataCenterId", true, cmd.getStartIndex(), cmd.getPageSizeVal());
final SearchBuilder<HostPodVO> sb = _hostPodDao.createSearchBuilder(); final SearchBuilder<HostPodVO> sb = _hostPodDao.createSearchBuilder();
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ); sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
sb.and("allocationState", sb.entity().getAllocationState(), SearchCriteria.Op.EQ); sb.and("allocationState", sb.entity().getAllocationState(), SearchCriteria.Op.EQ);
@ -1849,7 +1849,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
} }
if (podName != null) { if (podName != null) {
sc.setParameters("name", "%" + podName + "%"); sc.setParameters("name", podName);
} }
if (zoneId != null) { if (zoneId != null) {

View File

@ -670,7 +670,7 @@ public class SnapshotManagerImpl extends MutualExclusiveIdsManagerBase implement
sb.and("statusNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ); //exclude those Destroyed snapshot, not showing on UI sb.and("statusNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ); //exclude those Destroyed snapshot, not showing on UI
sb.and("volumeId", sb.entity().getVolumeId(), SearchCriteria.Op.EQ); sb.and("volumeId", sb.entity().getVolumeId(), SearchCriteria.Op.EQ);
sb.and("name", sb.entity().getName(), SearchCriteria.Op.LIKE); sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN); sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
sb.and("snapshotTypeEQ", sb.entity().getSnapshotType(), SearchCriteria.Op.IN); sb.and("snapshotTypeEQ", sb.entity().getSnapshotType(), SearchCriteria.Op.IN);
@ -715,7 +715,7 @@ public class SnapshotManagerImpl extends MutualExclusiveIdsManagerBase implement
setIdsListToSearchCriteria(sc, ids); setIdsListToSearchCriteria(sc, ids);
if (name != null) { if (name != null) {
sc.setParameters("name", "%" + name + "%"); sc.setParameters("name", name);
} }
if (id != null) { if (id != null) {

View File

@ -169,12 +169,12 @@ public class ProjectRoleManagerImpl extends ManagerBase implements ProjectRoleSe
} }
@Override @Override
public List<ProjectRole> findProjectRoles(Long projectId) { public List<ProjectRole> findProjectRoles(Long projectId, String keyword) {
if (projectId == null || projectId < 1L || projectDao.findById(projectId) == null) { if (projectId == null || projectId < 1L || projectDao.findById(projectId) == null) {
LOGGER.warn("Invalid project ID provided"); LOGGER.warn("Invalid project ID provided");
return null; return null;
} }
return ListUtils.toListOfInterface(projRoleDao.findAllRoles(projectId)); return ListUtils.toListOfInterface(projRoleDao.findAllRoles(projectId, keyword));
} }
@Override @Override