You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by nv...@apache.org on 2022/03/05 02:53:21 UTC

[cloudstack] branch main updated: api: Fix search by name (#6032)

This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 3a74ec7  api: Fix search by name (#6032)
3a74ec7 is described below

commit 3a74ec78beb49d908cc9bc9a696a38d4f73eebe3
Author: Pearl Dsilva <pe...@gmail.com>
AuthorDate: Sat Mar 5 08:22:53 2022 +0530

    api: Fix search by name (#6032)
    
    * Search by name
    
    * add keyword search for projectroles
    
    * remove unnecessary arg
---
 .../apache/cloudstack/acl/ProjectRoleService.java    |  3 ++-
 .../admin/acl/project/ListProjectRolesCmd.java       |  6 +++---
 .../apache/cloudstack/acl/dao/ProjectRoleDao.java    |  2 +-
 .../cloudstack/acl/dao/ProjectRoleDaoImpl.java       | 20 +++++++++++++-------
 .../java/com/cloud/api/query/QueryManagerImpl.java   | 16 ++++++++--------
 .../network/lb/LoadBalancingRulesManagerImpl.java    |  4 ++--
 .../java/com/cloud/server/ManagementServerImpl.java  |  8 ++++----
 .../cloud/storage/snapshot/SnapshotManagerImpl.java  |  4 ++--
 .../cloudstack/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 2bdc9ff..e35000d 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<ProjectRole> findProjectRoles(Long projectId);
+    List<ProjectRole> 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 8c4be4d..68ee871 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<ProjectRoleResponse> response = new ListResponse<>();
         final List<ProjectRoleResponse> 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 89f93f6..69c3a87 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<ProjectRoleVO, Long> {
     List<ProjectRoleVO> findByName(String name, Long projectId);
-    List<ProjectRoleVO> findAllRoles(Long projectId);
+    List<ProjectRoleVO> 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 b88e1b5..40cf7dc 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<ProjectRoleVO, Long>  implements ProjectRoleDao{
     private final SearchBuilder<ProjectRoleVO>  ProjectRoleSearch;
 
@@ -33,8 +32,9 @@ public class ProjectRoleDaoImpl extends GenericDaoBase<ProjectRoleVO, Long>  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<ProjectRoleVO, Long>  imp
     public List<ProjectRoleVO> findByName(String name, Long projectId) {
         SearchCriteria<ProjectRoleVO> 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<ProjectRoleVO> findAllRoles(Long projectId) {
+    public List<ProjectRoleVO> findAllRoles(Long projectId, String keyword) {
         SearchCriteria<ProjectRoleVO> sc = ProjectRoleSearch.create();
         if (projectId != null) {
             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);
     }
 }
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 9cae5cc..278347a 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<InstanceGroupJoinVO> 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 09b6808..d7dcb91 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<Type> 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<Type> 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 8a68bb4..c707b1c 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<HostVO> 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<HostPodVO> 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 c96f651..368265e 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 6daae8d..ad5c5d0 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<ProjectRole> findProjectRoles(Long projectId) {
+    public List<ProjectRole> 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