From 3a74ec78beb49d908cc9bc9a696a38d4f73eebe3 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Sat, 5 Mar 2022 08:22:53 +0530 Subject: [PATCH] api: Fix search by name (#6032) * Search by name * add keyword search for projectroles * remove unnecessary arg --- .../cloudstack/acl/ProjectRoleService.java | 3 ++- .../acl/project/ListProjectRolesCmd.java | 6 +++--- .../cloudstack/acl/dao/ProjectRoleDao.java | 2 +- .../acl/dao/ProjectRoleDaoImpl.java | 20 ++++++++++++------- .../com/cloud/api/query/QueryManagerImpl.java | 16 +++++++-------- .../lb/LoadBalancingRulesManagerImpl.java | 4 ++-- .../cloud/server/ManagementServerImpl.java | 8 ++++---- .../storage/snapshot/SnapshotManagerImpl.java | 4 ++-- .../acl/ProjectRoleManagerImpl.java | 4 ++-- 9 files changed, 37 insertions(+), 30 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/acl/ProjectRoleService.java b/api/src/main/java/org/apache/cloudstack/acl/ProjectRoleService.java index 2bdc9fff96c..e35000d78b8 100644 --- a/api/src/main/java/org/apache/cloudstack/acl/ProjectRoleService.java +++ b/api/src/main/java/org/apache/cloudstack/acl/ProjectRoleService.java @@ -74,9 +74,10 @@ public interface ProjectRoleService { /** * * @param projectId ID of the project whosr project roles are to be listed + * @param keyword * @return List of all available project roles */ - List findProjectRoles(Long projectId); + List findProjectRoles(Long projectId, String keyword); /** * Creates a project role permission to be mapped to a project role. diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java index 8c4be4d8a60..68ee8714d7f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/ListProjectRolesCmd.java @@ -25,7 +25,7 @@ import org.apache.cloudstack.acl.ProjectRole; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; 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.response.ListResponse; 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, requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, since = "4.15.0", authorized = { RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User}) -public class ListProjectRolesCmd extends BaseCmd { +public class ListProjectRolesCmd extends BaseListCmd { public static final String APINAME = "listProjectRoles"; ///////////////////////////////////////////////////// @@ -79,7 +79,7 @@ public class ListProjectRolesCmd extends BaseCmd { } else if (StringUtils.isNotBlank(getRoleName())) { projectRoles = projRoleService.findProjectRolesByName(getProjectId(), getRoleName()); } else { - projectRoles = projRoleService.findProjectRoles(getProjectId()); + projectRoles = projRoleService.findProjectRoles(getProjectId(), getKeyword()); } final ListResponse response = new ListResponse<>(); final List roleResponses = new ArrayList<>(); diff --git a/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDao.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDao.java index 89f93f6bf48..69c3a8703bf 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDao.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDao.java @@ -25,5 +25,5 @@ import com.cloud.utils.db.GenericDao; public interface ProjectRoleDao extends GenericDao { List findByName(String name, Long projectId); - List findAllRoles(Long projectId); + List findAllRoles(Long projectId, String keyword); } diff --git a/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDaoImpl.java index b88e1b52104..40cf7dc2255 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDaoImpl.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/acl/dao/ProjectRoleDaoImpl.java @@ -17,15 +17,14 @@ 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.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import org.apache.cloudstack.acl.ProjectRoleVO; import org.apache.commons.lang3.StringUtils; +import java.util.List; + public class ProjectRoleDaoImpl extends GenericDaoBase implements ProjectRoleDao{ private final SearchBuilder ProjectRoleSearch; @@ -33,8 +32,9 @@ public class ProjectRoleDaoImpl extends GenericDaoBase imp super(); 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("keyword", ProjectRoleSearch.entity().getName(), SearchCriteria.Op.LIKE); ProjectRoleSearch.done(); } @@ -42,20 +42,26 @@ public class ProjectRoleDaoImpl extends GenericDaoBase imp public List findByName(String name, Long projectId) { SearchCriteria sc = ProjectRoleSearch.create(); if (StringUtils.isNotEmpty(name)) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (projectId != null) { sc.setParameters("project_id", projectId); } + return listBy(sc); } @Override - public List findAllRoles(Long projectId) { + public List findAllRoles(Long projectId, String keyword) { SearchCriteria sc = ProjectRoleSearch.create(); if (projectId != null) { sc.setParameters("project_id", projectId); } + if (StringUtils.isNotEmpty(keyword)) { + SearchCriteria ssc = createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } return listBy(sc); } } diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java index 9cae5cc076e..278347a3812 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -897,7 +897,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); 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 sc = sb.create(); _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); @@ -913,7 +913,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q } if (name != null) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } 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("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("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ); sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN); @@ -1160,7 +1160,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q } if (name != null) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (state != null) { @@ -1410,7 +1410,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q // pagination _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("accountId", sb.entity().getAccountId(), SearchCriteria.Op.IN); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); @@ -1470,7 +1470,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q } if (name != null) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (id != null) { @@ -1892,7 +1892,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct // ids 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("status", sb.entity().getStatus(), 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) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (type != null) { sc.setParameters("type", "%" + type); diff --git a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 09b68082043..d7dcb915206 100644 --- a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -2338,7 +2338,7 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); 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("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ); sb.and("scheme", sb.entity().getScheme(), SearchCriteria.Op.EQ); @@ -2379,7 +2379,7 @@ public class LoadBalancingRulesManagerImpl extends ManagerBase implements } if (name != null) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (id != null) { diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 8a68bb4b385..c707b1cb575 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -1739,7 +1739,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe final SearchBuilder sb = _hostDao.createSearchBuilder(); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); 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("status", sb.entity().getStatus(), 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) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (type != null) { 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 SearchBuilder sb = _hostPodDao.createSearchBuilder(); 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("allocationState", sb.entity().getAllocationState(), SearchCriteria.Op.EQ); @@ -1849,7 +1849,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } if (podName != null) { - sc.setParameters("name", "%" + podName + "%"); + sc.setParameters("name", podName); } if (zoneId != null) { diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java index c96f6517864..368265ef3f8 100755 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -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("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("idIN", sb.entity().getId(), 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); if (name != null) { - sc.setParameters("name", "%" + name + "%"); + sc.setParameters("name", name); } if (id != null) { diff --git a/server/src/main/java/org/apache/cloudstack/acl/ProjectRoleManagerImpl.java b/server/src/main/java/org/apache/cloudstack/acl/ProjectRoleManagerImpl.java index 6daae8d6383..ad5c5d071e5 100644 --- a/server/src/main/java/org/apache/cloudstack/acl/ProjectRoleManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/acl/ProjectRoleManagerImpl.java @@ -169,12 +169,12 @@ public class ProjectRoleManagerImpl extends ManagerBase implements ProjectRoleSe } @Override - public List findProjectRoles(Long projectId) { + public List findProjectRoles(Long projectId, String keyword) { if (projectId == null || projectId < 1L || projectDao.findById(projectId) == null) { LOGGER.warn("Invalid project ID provided"); return null; } - return ListUtils.toListOfInterface(projRoleDao.findAllRoles(projectId)); + return ListUtils.toListOfInterface(projRoleDao.findAllRoles(projectId, keyword)); } @Override