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 <min.c...@citrix.com> Authored: Tue Oct 8 15:11:56 2013 -0700 Committer: Min Chen <min.c...@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) {