mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Clean up ListVMsCmd implementation to not using Criteria class.
This commit is contained in:
parent
8428f49e46
commit
f59e47b263
@ -69,10 +69,6 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
|
||||
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType=ZoneResponse.class, description="the availability zone ID")
|
||||
private Long zoneId;
|
||||
|
||||
@Parameter(name=ApiConstants.FOR_VIRTUAL_NETWORK, type=CommandType.BOOLEAN,
|
||||
description="list by network type; true if need to list vms using Virtual Network, false otherwise")
|
||||
private Boolean forVirtualNetwork;
|
||||
|
||||
@Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.UUID, entityType=NetworkResponse.class,
|
||||
description="list by network id")
|
||||
private Long networkId;
|
||||
@ -125,13 +121,6 @@ public class ListVMsCmd extends BaseListTaggedResourcesCmd {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
public Boolean getForVirtualNetwork() {
|
||||
return forVirtualNetwork;
|
||||
}
|
||||
|
||||
public void setForVirtualNetwork(Boolean forVirtualNetwork) {
|
||||
this.forVirtualNetwork = forVirtualNetwork;
|
||||
}
|
||||
|
||||
public Long getNetworkId() {
|
||||
return networkId;
|
||||
|
||||
@ -690,11 +690,6 @@ public class ApiDBUtils {
|
||||
return _ms.getVersion();
|
||||
}
|
||||
|
||||
public static List<UserVmJoinVO> searchForUserVMs(Criteria c, List<Long> permittedAccounts) {
|
||||
return _userVmMgr.searchForUserVMs(c, _accountDao.findById(Account.ACCOUNT_ID_SYSTEM),
|
||||
null, false, permittedAccounts, false, null, null).first();
|
||||
}
|
||||
|
||||
public static List<? extends StoragePoolVO> searchForStoragePools(Criteria c) {
|
||||
return _ms.searchForStoragePools(c).first();
|
||||
}
|
||||
|
||||
@ -162,7 +162,6 @@ import com.cloud.projects.ProjectManager;
|
||||
import com.cloud.projects.dao.ProjectAccountDao;
|
||||
import com.cloud.projects.dao.ProjectDao;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.server.Criteria;
|
||||
import com.cloud.server.ResourceMetaDataService;
|
||||
import com.cloud.server.ResourceTag;
|
||||
import com.cloud.server.ResourceTag.TaggedResourceType;
|
||||
@ -730,11 +729,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsInternal(ListVMsCmd cmd) {
|
||||
Account caller = CallContext.current().getCallingAccount();
|
||||
List<Long> permittedAccounts = new ArrayList<Long>();
|
||||
String hypervisor = cmd.getHypervisor();
|
||||
|
||||
boolean listAll = cmd.listAll();
|
||||
Long id = cmd.getId();
|
||||
Map<String, String> tags = cmd.getTags();
|
||||
|
||||
Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(
|
||||
cmd.getDomainId(), cmd.isRecursive(), null);
|
||||
_accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts,
|
||||
@ -743,54 +740,8 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
Boolean isRecursive = domainIdRecursiveListProject.second();
|
||||
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
|
||||
|
||||
Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal());
|
||||
// Criteria c = new Criteria(null, Boolean.FALSE, cmd.getStartIndex(),
|
||||
// cmd.getPageSizeVal()); //version without default sorting
|
||||
c.addCriteria(Criteria.KEYWORD, cmd.getKeyword());
|
||||
c.addCriteria(Criteria.ID, cmd.getId());
|
||||
c.addCriteria(Criteria.NAME, cmd.getName());
|
||||
c.addCriteria(Criteria.STATE, cmd.getState());
|
||||
c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId());
|
||||
c.addCriteria(Criteria.GROUPID, cmd.getGroupId());
|
||||
c.addCriteria(Criteria.FOR_VIRTUAL_NETWORK, cmd.getForVirtualNetwork());
|
||||
c.addCriteria(Criteria.NETWORKID, cmd.getNetworkId());
|
||||
c.addCriteria(Criteria.TEMPLATE_ID, cmd.getTemplateId());
|
||||
c.addCriteria(Criteria.ISO_ID, cmd.getIsoId());
|
||||
c.addCriteria(Criteria.VPC_ID, cmd.getVpcId());
|
||||
c.addCriteria(Criteria.AFFINITY_GROUP_ID, cmd.getAffinityGroupId());
|
||||
|
||||
if (domainId != null) {
|
||||
c.addCriteria(Criteria.DOMAINID, domainId);
|
||||
}
|
||||
|
||||
if (HypervisorType.getType(hypervisor) != HypervisorType.None) {
|
||||
c.addCriteria(Criteria.HYPERVISOR, hypervisor);
|
||||
} else if (hypervisor != null) {
|
||||
throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
|
||||
}
|
||||
|
||||
// ignore these search requests if it's not an admin
|
||||
if (cmd instanceof ListVMsCmdByAdmin) {
|
||||
ListVMsCmdByAdmin adCmd = (ListVMsCmdByAdmin)cmd;
|
||||
c.addCriteria(Criteria.PODID, adCmd.getPodId());
|
||||
c.addCriteria(Criteria.HOSTID, adCmd.getHostId());
|
||||
c.addCriteria(Criteria.STORAGE_ID, adCmd.getStorageId());
|
||||
}
|
||||
|
||||
if (!permittedAccounts.isEmpty()) {
|
||||
c.addCriteria(Criteria.ACCOUNTID, permittedAccounts.toArray());
|
||||
}
|
||||
c.addCriteria(Criteria.ISADMIN, _accountMgr.isAdmin(caller.getType()));
|
||||
|
||||
return searchForUserVMsByCriteria(c, caller, domainId, isRecursive, permittedAccounts, listAll,
|
||||
listProjectResourcesCriteria, tags);
|
||||
}
|
||||
|
||||
private Pair<List<UserVmJoinVO>, Integer> searchForUserVMsByCriteria(Criteria c, Account caller, Long domainId,
|
||||
boolean isRecursive, List<Long> permittedAccounts, boolean listAll,
|
||||
ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
|
||||
Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(),
|
||||
c.getLimit());
|
||||
Filter searchFilter = new Filter(UserVmJoinVO.class, "id", true, cmd.getStartIndex(),
|
||||
cmd.getPageSizeVal());
|
||||
|
||||
// first search distinct vm id by using query criteria and pagination
|
||||
SearchBuilder<UserVmJoinVO> sb = _userVmJoinDao.createSearchBuilder();
|
||||
@ -799,25 +750,35 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts,
|
||||
listProjectResourcesCriteria);
|
||||
|
||||
Object id = c.getCriteria(Criteria.ID);
|
||||
Object name = c.getCriteria(Criteria.NAME);
|
||||
Object state = c.getCriteria(Criteria.STATE);
|
||||
Object notState = c.getCriteria(Criteria.NOTSTATE);
|
||||
Object zoneId = c.getCriteria(Criteria.DATACENTERID);
|
||||
Object pod = c.getCriteria(Criteria.PODID);
|
||||
Object hostId = c.getCriteria(Criteria.HOSTID);
|
||||
Object hostName = c.getCriteria(Criteria.HOSTNAME);
|
||||
Object keyword = c.getCriteria(Criteria.KEYWORD);
|
||||
Object isAdmin = c.getCriteria(Criteria.ISADMIN);
|
||||
assert c.getCriteria(Criteria.IPADDRESS) == null : "We don't support search by ip address on VM any more. If you see this assert, it means we have to find a different way to search by the nic table.";
|
||||
Object groupId = c.getCriteria(Criteria.GROUPID);
|
||||
Object networkId = c.getCriteria(Criteria.NETWORKID);
|
||||
Object hypervisor = c.getCriteria(Criteria.HYPERVISOR);
|
||||
Object storageId = c.getCriteria(Criteria.STORAGE_ID);
|
||||
Object templateId = c.getCriteria(Criteria.TEMPLATE_ID);
|
||||
Object isoId = c.getCriteria(Criteria.ISO_ID);
|
||||
Object vpcId = c.getCriteria(Criteria.VPC_ID);
|
||||
Object affinityGroupId = c.getCriteria(Criteria.AFFINITY_GROUP_ID);
|
||||
Map<String, String> tags = cmd.getTags();
|
||||
String hypervisor = cmd.getHypervisor();
|
||||
Object name = cmd.getName();
|
||||
Object state = cmd.getState();
|
||||
Object zoneId = cmd.getZoneId();
|
||||
Object keyword = cmd.getKeyword();
|
||||
boolean isAdmin = false;
|
||||
if (_accountMgr.isAdmin(caller.getType())) {
|
||||
isAdmin = true;
|
||||
}
|
||||
Object groupId = cmd.getGroupId();
|
||||
Object networkId = cmd.getNetworkId();
|
||||
if (HypervisorType.getType(hypervisor) == HypervisorType.None && hypervisor != null) {
|
||||
// invalid hypervisor type input
|
||||
throw new InvalidParameterValueException("Invalid HypervisorType " + hypervisor);
|
||||
}
|
||||
Object templateId = cmd.getTemplateId();
|
||||
Object isoId = cmd.getIsoId();
|
||||
Object vpcId = cmd.getVpcId();
|
||||
Object affinityGroupId = cmd.getAffinityGroupId();
|
||||
Object pod = null;
|
||||
Object hostId = null;
|
||||
Object storageId = null;
|
||||
if (cmd instanceof ListVMsCmdByAdmin) {
|
||||
ListVMsCmdByAdmin adCmd = (ListVMsCmdByAdmin)cmd;
|
||||
pod = adCmd.getPodId();
|
||||
hostId = adCmd.getHostId();
|
||||
storageId = adCmd.getStorageId();
|
||||
}
|
||||
|
||||
sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
@ -829,7 +790,6 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostName", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("templateId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ);
|
||||
sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ);
|
||||
sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
|
||||
@ -882,7 +842,6 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("state", SearchCriteria.Op.EQ, keyword);
|
||||
|
||||
sc.addAnd("displayName", SearchCriteria.Op.SC, ssc);
|
||||
}
|
||||
|
||||
@ -911,11 +870,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
}
|
||||
|
||||
if (state != null) {
|
||||
if (notState != null && (Boolean) notState == true) {
|
||||
sc.setParameters("stateNEQ", state);
|
||||
} else {
|
||||
sc.setParameters("stateEQ", state);
|
||||
}
|
||||
sc.setParameters("stateEQ", state);
|
||||
}
|
||||
|
||||
if (hypervisor != null) {
|
||||
@ -923,7 +878,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
}
|
||||
|
||||
// Don't show Destroyed and Expunging vms to the end user
|
||||
if ((isAdmin != null) && ((Boolean) isAdmin != true)) {
|
||||
if (!isAdmin) {
|
||||
sc.setParameters("stateNIN", "Destroyed", "Expunging");
|
||||
}
|
||||
|
||||
@ -935,7 +890,13 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
}
|
||||
}
|
||||
|
||||
if (pod != null) {
|
||||
if (affinityGroupId != null) {
|
||||
sc.setParameters("affinityGroupId", affinityGroupId);
|
||||
}
|
||||
|
||||
if (cmd instanceof ListVMsCmdByAdmin) {
|
||||
ListVMsCmdByAdmin aCmd = (ListVMsCmdByAdmin)cmd;
|
||||
if (aCmd.getPodId() != null) {
|
||||
sc.setParameters("podId", pod);
|
||||
|
||||
if (state == null) {
|
||||
@ -945,18 +906,11 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
|
||||
|
||||
if (hostId != null) {
|
||||
sc.setParameters("hostIdEQ", hostId);
|
||||
} else {
|
||||
if (hostName != null) {
|
||||
sc.setParameters("hostName", hostName);
|
||||
}
|
||||
}
|
||||
|
||||
if (storageId != null) {
|
||||
sc.setParameters("poolId", storageId);
|
||||
}
|
||||
|
||||
if (affinityGroupId != null) {
|
||||
sc.setParameters("affinityGroupId", affinityGroupId);
|
||||
}
|
||||
|
||||
// search vm details by ids
|
||||
|
||||
@ -24,14 +24,11 @@ import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import com.cloud.agent.api.VmDiskStatsEntry;
|
||||
import com.cloud.agent.api.VmStatsEntry;
|
||||
import com.cloud.api.query.vo.UserVmJoinVO;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.ManagementServerException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.exception.VirtualMachineMigrationException;
|
||||
import com.cloud.projects.Project.ListProjectResourcesCriteria;
|
||||
import com.cloud.server.Criteria;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.Pair;
|
||||
@ -88,21 +85,6 @@ public interface UserVmManager extends UserVmService {
|
||||
|
||||
boolean expunge(UserVmVO vm, long callerUserId, Account caller);
|
||||
|
||||
/**
|
||||
* Obtains a list of virtual machines by the specified search criteria.
|
||||
* Can search by: "userId", "name", "state", "dataCenterId", "podId", "hostId"
|
||||
* @param c
|
||||
* @param caller TODO
|
||||
* @param domainId TODO
|
||||
* @param isRecursive TODO
|
||||
* @param permittedAccounts TODO
|
||||
* @param listAll TODO
|
||||
* @param listProjectResourcesCriteria TODO
|
||||
* @param tags TODO
|
||||
* @return List of UserVMs + count
|
||||
*/
|
||||
Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive, List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags);
|
||||
|
||||
Pair<UserVmVO, Map<VirtualMachineProfile.Param, Object>> startVirtualMachine(long vmId, Long hostId, Map<VirtualMachineProfile.Param, Object> additionalParams) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException;
|
||||
|
||||
boolean upgradeVirtualMachine(Long id, Long serviceOfferingId) throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException, VirtualMachineMigrationException;
|
||||
|
||||
@ -93,7 +93,6 @@ import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.alert.AlertManager;
|
||||
import com.cloud.api.ApiDBUtils;
|
||||
import com.cloud.api.query.dao.UserVmJoinDao;
|
||||
import com.cloud.api.query.vo.UserVmJoinVO;
|
||||
import com.cloud.capacity.CapacityManager;
|
||||
import com.cloud.configuration.Config;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
@ -174,12 +173,10 @@ import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.org.Cluster;
|
||||
import com.cloud.org.Grouping;
|
||||
import com.cloud.projects.Project.ListProjectResourcesCriteria;
|
||||
import com.cloud.projects.ProjectManager;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceState;
|
||||
import com.cloud.server.ConfigurationServer;
|
||||
import com.cloud.server.Criteria;
|
||||
import com.cloud.service.ServiceOfferingVO;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import com.cloud.service.dao.ServiceOfferingDetailsDao;
|
||||
@ -235,11 +232,8 @@ import com.cloud.utils.concurrency.NamedThreadFactory;
|
||||
import com.cloud.utils.crypt.RSAHelper;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.EntityManager;
|
||||
import com.cloud.utils.db.Filter;
|
||||
import com.cloud.utils.db.GlobalLock;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.exception.ExecutionException;
|
||||
@ -3548,185 +3542,6 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Pair<List<UserVmJoinVO>, Integer> searchForUserVMs(Criteria c, Account caller, Long domainId, boolean isRecursive,
|
||||
List<Long> permittedAccounts, boolean listAll, ListProjectResourcesCriteria listProjectResourcesCriteria, Map<String, String> tags) {
|
||||
Filter searchFilter = new Filter(UserVmJoinVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit());
|
||||
|
||||
//first search distinct vm id by using query criteria and pagination
|
||||
SearchBuilder<UserVmJoinVO> sb = _vmJoinDao.createSearchBuilder();
|
||||
sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct ids
|
||||
_accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
Object id = c.getCriteria(Criteria.ID);
|
||||
Object name = c.getCriteria(Criteria.NAME);
|
||||
Object state = c.getCriteria(Criteria.STATE);
|
||||
Object notState = c.getCriteria(Criteria.NOTSTATE);
|
||||
Object zone = c.getCriteria(Criteria.DATACENTERID);
|
||||
Object pod = c.getCriteria(Criteria.PODID);
|
||||
Object hostId = c.getCriteria(Criteria.HOSTID);
|
||||
Object hostName = c.getCriteria(Criteria.HOSTNAME);
|
||||
Object keyword = c.getCriteria(Criteria.KEYWORD);
|
||||
Object isAdmin = c.getCriteria(Criteria.ISADMIN);
|
||||
assert c.getCriteria(Criteria.IPADDRESS) == null : "We don't support search by ip address on VM any more. If you see this assert, it means we have to find a different way to search by the nic table.";
|
||||
Object groupId = c.getCriteria(Criteria.GROUPID);
|
||||
Object networkId = c.getCriteria(Criteria.NETWORKID);
|
||||
Object hypervisor = c.getCriteria(Criteria.HYPERVISOR);
|
||||
Object storageId = c.getCriteria(Criteria.STORAGE_ID);
|
||||
Object templateId = c.getCriteria(Criteria.TEMPLATE_ID);
|
||||
Object isoId = c.getCriteria(Criteria.ISO_ID);
|
||||
Object vpcId = c.getCriteria(Criteria.VPC_ID);
|
||||
|
||||
sb.and("displayName", sb.entity().getDisplayName(),
|
||||
SearchCriteria.Op.LIKE);
|
||||
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
|
||||
sb.and("name", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
|
||||
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);
|
||||
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||
sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hypervisorType", sb.entity().getHypervisorType(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
|
||||
sb.and("hostName", sb.entity().getHostName(), SearchCriteria.Op.LIKE);
|
||||
sb.and("templateId", sb.entity().getTemplateId(), SearchCriteria.Op.EQ);
|
||||
sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ);
|
||||
sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
|
||||
|
||||
if (groupId != null && (Long) groupId != -1) {
|
||||
sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
for (int count=0; count < tags.size(); count++) {
|
||||
sb.or().op("key" + String.valueOf(count), sb.entity().getTagKey(), SearchCriteria.Op.EQ);
|
||||
sb.and("value" + String.valueOf(count), sb.entity().getTagValue(), SearchCriteria.Op.EQ);
|
||||
sb.cp();
|
||||
}
|
||||
}
|
||||
|
||||
if (networkId != null) {
|
||||
sb.and("networkId", sb.entity().getNetworkId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if(vpcId != null && networkId == null){
|
||||
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
if (storageId != null) {
|
||||
sb.and("poolId", sb.entity().getPoolId(), SearchCriteria.Op.EQ);
|
||||
}
|
||||
|
||||
// populate the search criteria with the values passed in
|
||||
SearchCriteria<UserVmJoinVO> sc = sb.create();
|
||||
|
||||
// building ACL condition
|
||||
_accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
|
||||
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
int count = 0;
|
||||
for (String key : tags.keySet()) {
|
||||
sc.setParameters("key" + String.valueOf(count), key);
|
||||
sc.setParameters("value" + String.valueOf(count), tags.get(key));
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (groupId != null && (Long)groupId != -1) {
|
||||
sc.setParameters("instanceGroupId", groupId);
|
||||
}
|
||||
|
||||
if (keyword != null) {
|
||||
SearchCriteria<UserVmJoinVO> ssc = _vmJoinDao.createSearchCriteria();
|
||||
ssc.addOr("displayName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("hostName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
|
||||
ssc.addOr("instanceName", SearchCriteria.Op.LIKE, "%" + keyword
|
||||
+ "%");
|
||||
ssc.addOr("state", SearchCriteria.Op.EQ, keyword);
|
||||
|
||||
sc.addAnd("displayName", SearchCriteria.Op.SC, ssc);
|
||||
}
|
||||
|
||||
if (id != null) {
|
||||
sc.setParameters("id", id);
|
||||
}
|
||||
|
||||
if (templateId != null) {
|
||||
sc.setParameters("templateId", templateId);
|
||||
}
|
||||
|
||||
if (isoId != null) {
|
||||
sc.setParameters("isoId", isoId);
|
||||
}
|
||||
|
||||
if (networkId != null) {
|
||||
sc.setParameters("networkId", networkId);
|
||||
}
|
||||
|
||||
if(vpcId != null && networkId == null){
|
||||
sc.setParameters("vpcId", vpcId);
|
||||
}
|
||||
|
||||
if (name != null) {
|
||||
sc.setParameters("name", "%" + name + "%");
|
||||
}
|
||||
|
||||
if (state != null) {
|
||||
if (notState != null && (Boolean) notState == true) {
|
||||
sc.setParameters("stateNEQ", state);
|
||||
} else {
|
||||
sc.setParameters("stateEQ", state);
|
||||
}
|
||||
}
|
||||
|
||||
if (hypervisor != null) {
|
||||
sc.setParameters("hypervisorType", hypervisor);
|
||||
}
|
||||
|
||||
// Don't show Destroyed and Expunging vms to the end user
|
||||
if ((isAdmin != null) && ((Boolean) isAdmin != true)) {
|
||||
sc.setParameters("stateNIN", "Destroyed", "Expunging");
|
||||
}
|
||||
|
||||
if (zone != null) {
|
||||
sc.setParameters("dataCenterId", zone);
|
||||
}
|
||||
if (pod != null) {
|
||||
sc.setParameters("podId", pod);
|
||||
|
||||
if (state == null) {
|
||||
sc.setParameters("stateNEQ", "Destroyed");
|
||||
}
|
||||
}
|
||||
|
||||
if (hostId != null) {
|
||||
sc.setParameters("hostIdEQ", hostId);
|
||||
} else {
|
||||
if (hostName != null) {
|
||||
sc.setParameters("hostName", hostName);
|
||||
}
|
||||
}
|
||||
|
||||
if (storageId != null) {
|
||||
sc.setParameters("poolId", storageId);
|
||||
}
|
||||
|
||||
// search vm details by ids
|
||||
Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = _vmJoinDao.searchAndCount(sc, searchFilter);
|
||||
Integer count = uniqueVmPair.second();
|
||||
if ( count.intValue() == 0 ){
|
||||
// handle empty result cases
|
||||
return uniqueVmPair;
|
||||
}
|
||||
List<UserVmJoinVO> uniqueVms = uniqueVmPair.first();
|
||||
Long[] vmIds = new Long[uniqueVms.size()];
|
||||
int i = 0;
|
||||
for (UserVmJoinVO v : uniqueVms ){
|
||||
vmIds[i++] = v.getId();
|
||||
}
|
||||
List<UserVmJoinVO> vms = _vmJoinDao.searchByIds(vmIds);
|
||||
return new Pair<List<UserVmJoinVO>, Integer>(vms, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HypervisorType getHypervisorTypeOfUserVM(long vmId) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user