Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
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;
Expand All @@ -36,7 +36,7 @@
@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";

/////////////////////////////////////////////////////
Expand Down Expand Up @@ -79,7 +79,7 @@ public void execute() {
} 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<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@

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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,45 +17,51 @@

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;

public ProjectRoleDaoImpl() {
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();

}
@Override
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();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Pearl1594
why not use

sc.setParameters("keyword", keyword);

ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
sc.addAnd("name", SearchCriteria.Op.SC, ssc);
}
return listBy(sc);
}
}
16 changes: 8 additions & 8 deletions server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -897,7 +897,7 @@ private Pair<List<InstanceGroupJoinVO>, Integer> searchForVmGroupsInternal(ListV
_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);
Expand All @@ -913,7 +913,7 @@ private Pair<List<InstanceGroupJoinVO>, Integer> searchForVmGroupsInternal(ListV
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}

return _vmGroupJoinDao.searchAndCount(sc, searchFilter);
Expand Down Expand Up @@ -1012,7 +1012,7 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm

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);
Expand Down Expand Up @@ -1160,7 +1160,7 @@ private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cm
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}

if (state != null) {
Expand Down Expand Up @@ -1410,7 +1410,7 @@ private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(BaseLis
// 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);
Expand Down Expand Up @@ -1470,7 +1470,7 @@ private Pair<List<DomainRouterJoinVO>, Integer> searchForRoutersInternal(BaseLis
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}

if (id != null) {
Expand Down Expand Up @@ -1892,7 +1892,7 @@ public Pair<List<HostJoinVO>, Integer> searchForServersInternal(ListHostsCmd cmd
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);
Expand Down Expand Up @@ -1931,7 +1931,7 @@ public Pair<List<HostJoinVO>, Integer> searchForServersInternal(ListHostsCmd cmd
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}
if (type != null) {
sc.setParameters("type", "%" + type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2338,7 +2338,7 @@ public Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLo
_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);
Expand Down Expand Up @@ -2379,7 +2379,7 @@ public Pair<List<? extends LoadBalancer>, Integer> searchForLoadBalancers(ListLo
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}

if (id != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1739,7 +1739,7 @@ private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, fina
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);
Expand Down Expand Up @@ -1784,7 +1784,7 @@ private Pair<List<HostVO>, Integer> searchForServers(final Long startIndex, fina
}

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}
if (type != null) {
sc.setParameters("type", "%" + type);
Expand Down Expand Up @@ -1831,7 +1831,7 @@ public Pair<List<? extends Pod>, Integer> searchForPods(final ListPodsByCmd cmd)
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);

Expand All @@ -1849,7 +1849,7 @@ public Pair<List<? extends Pod>, Integer> searchForPods(final ListPodsByCmd cmd)
}

if (podName != null) {
sc.setParameters("name", "%" + podName + "%");
sc.setParameters("name", podName);
}

if (zoneId != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ public Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cm

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);
Expand Down Expand Up @@ -715,7 +715,7 @@ public Pair<List<? extends Snapshot>, Integer> listSnapshots(ListSnapshotsCmd cm
setIdsListToSearchCriteria(sc, ids);

if (name != null) {
sc.setParameters("name", "%" + name + "%");
sc.setParameters("name", name);
}

if (id != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,12 @@ public ProjectRole findProjectRole(Long roleId, Long projectId) {
}

@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
Expand Down