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