You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/10/09 00:12:12 UTC
git commit: updated refs/heads/rbac to f59e47b
Updated Branches:
refs/heads/rbac 8428f49e4 -> f59e47b26
Clean up ListVMsCmd implementation to not using Criteria class.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f59e47b2
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f59e47b2
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f59e47b2
Branch: refs/heads/rbac
Commit: f59e47b2636049a1e95f689c34f4dc6c7388c00e
Parents: 8428f49
Author: Min Chen <mi...@citrix.com>
Authored: Tue Oct 8 15:11:56 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Oct 8 15:11:56 2013 -0700
----------------------------------------------------------------------
.../api/command/user/vm/ListVMsCmd.java | 11 --
server/src/com/cloud/api/ApiDBUtils.java | 5 -
.../com/cloud/api/query/QueryManagerImpl.java | 128 ++++---------
server/src/com/cloud/vm/UserVmManager.java | 18 --
server/src/com/cloud/vm/UserVmManagerImpl.java | 185 -------------------
5 files changed, 41 insertions(+), 306 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59e47b2/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
index a08b359..a031c03 100644
--- a/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/vm/ListVMsCmd.java
@@ -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;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59e47b2/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 1409961..96db8b7 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -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();
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59e47b2/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 9022070..3f27915 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -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
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59e47b2/server/src/com/cloud/vm/UserVmManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManager.java b/server/src/com/cloud/vm/UserVmManager.java
index e1bee8d..ce882cb 100755
--- a/server/src/com/cloud/vm/UserVmManager.java
+++ b/server/src/com/cloud/vm/UserVmManager.java
@@ -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;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59e47b2/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 84c8919..fb00f91 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -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) {