Search in sources :

Example 51 with Filter

use of com.cloud.utils.db.Filter in project cloudstack by apache.

the class QueryManagerImpl method listAffinityGroupsByVM.

private Pair<List<AffinityGroupJoinVO>, Integer> listAffinityGroupsByVM(long vmId, long pageInd, long pageSize) {
    Filter sf = new Filter(SecurityGroupVMMapVO.class, null, true, pageInd, pageSize);
    Pair<List<AffinityGroupVMMapVO>, Integer> agVmMappingPair = _affinityGroupVMMapDao.listByInstanceId(vmId, sf);
    Integer count = agVmMappingPair.second();
    if (count.intValue() == 0) {
        // handle empty result cases
        return new Pair<List<AffinityGroupJoinVO>, Integer>(new ArrayList<AffinityGroupJoinVO>(), count);
    }
    List<AffinityGroupVMMapVO> agVmMappings = agVmMappingPair.first();
    Long[] agIds = new Long[agVmMappings.size()];
    int i = 0;
    for (AffinityGroupVMMapVO agVm : agVmMappings) {
        agIds[i++] = agVm.getAffinityGroupId();
    }
    List<AffinityGroupJoinVO> ags = _affinityGroupJoinDao.searchByIds(agIds);
    return new Pair<List<AffinityGroupJoinVO>, Integer>(ags, count);
}
Also used : AffinityGroupVMMapVO(org.apache.cloudstack.affinity.AffinityGroupVMMapVO) TemplateFilter(com.cloud.template.VirtualMachineTemplate.TemplateFilter) Filter(com.cloud.utils.db.Filter) ArrayList(java.util.ArrayList) List(java.util.List) AffinityGroupJoinVO(com.cloud.api.query.vo.AffinityGroupJoinVO) Pair(com.cloud.utils.Pair)

Example 52 with Filter

use of com.cloud.utils.db.Filter in project cloudstack by apache.

the class QueryManagerImpl method searchForVolumesInternal.

private Pair<List<VolumeJoinVO>, Integer> searchForVolumesInternal(ListVolumesCmd cmd) {
    Account caller = CallContext.current().getCallingAccount();
    List<Long> permittedAccounts = new ArrayList<Long>();
    Long id = cmd.getId();
    Long vmInstanceId = cmd.getVirtualMachineId();
    String name = cmd.getVolumeName();
    String keyword = cmd.getKeyword();
    String type = cmd.getType();
    Map<String, String> tags = cmd.getTags();
    Long storageId = cmd.getStorageId();
    Long diskOffId = cmd.getDiskOfferingId();
    Boolean display = cmd.getDisplay();
    Long zoneId = cmd.getZoneId();
    Long podId = cmd.getPodId();
    List<Long> ids = getIdsListFromCmd(cmd.getId(), cmd.getIds());
    Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
    _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
    Long domainId = domainIdRecursiveListProject.first();
    Boolean isRecursive = domainIdRecursiveListProject.second();
    ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
    Filter searchFilter = new Filter(VolumeJoinVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
    // hack for now, this should be done better but due to needing a join I
    // opted to
    // do this quickly and worry about making it pretty later
    SearchBuilder<VolumeJoinVO> sb = _volumeJoinDao.createSearchBuilder();
    // select distinct
    sb.select(null, Func.DISTINCT, sb.entity().getId());
    // ids to get
    // number of
    // records with
    // pagination
    _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    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("volumeType", sb.entity().getVolumeType(), SearchCriteria.Op.LIKE);
    sb.and("instanceId", sb.entity().getVmId(), SearchCriteria.Op.EQ);
    sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
    sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
    sb.and("storageId", sb.entity().getPoolId(), SearchCriteria.Op.EQ);
    sb.and("diskOfferingId", sb.entity().getDiskOfferingId(), SearchCriteria.Op.EQ);
    sb.and("display", sb.entity().isDisplayVolume(), SearchCriteria.Op.EQ);
    // Only return volumes that are not destroyed
    sb.and("state", sb.entity().getState(), SearchCriteria.Op.NEQ);
    sb.and("systemUse", sb.entity().isSystemUse(), SearchCriteria.Op.NEQ);
    // display UserVM volumes only
    sb.and().op("type", sb.entity().getVmType(), SearchCriteria.Op.NIN);
    sb.or("nulltype", sb.entity().getVmType(), SearchCriteria.Op.NULL);
    sb.cp();
    // now set the SC criteria...
    SearchCriteria<VolumeJoinVO> sc = sb.create();
    _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    if (keyword != null) {
        SearchCriteria<VolumeJoinVO> ssc = _volumeJoinDao.createSearchCriteria();
        ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("volumeType", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("name", SearchCriteria.Op.SC, ssc);
    }
    if (name != null) {
        sc.setParameters("name", name);
    }
    if (display != null) {
        sc.setParameters("display", display);
    }
    setIdsListToSearchCriteria(sc, ids);
    sc.setParameters("systemUse", 1);
    if (tags != null && !tags.isEmpty()) {
        SearchCriteria<VolumeJoinVO> tagSc = _volumeJoinDao.createSearchCriteria();
        for (String key : tags.keySet()) {
            SearchCriteria<VolumeJoinVO> tsc = _volumeJoinDao.createSearchCriteria();
            tsc.addAnd("tagKey", SearchCriteria.Op.EQ, key);
            tsc.addAnd("tagValue", SearchCriteria.Op.EQ, tags.get(key));
            tagSc.addOr("tagKey", SearchCriteria.Op.SC, tsc);
        }
        sc.addAnd("tagKey", SearchCriteria.Op.SC, tagSc);
    }
    if (diskOffId != null) {
        sc.setParameters("diskOfferingId", diskOffId);
    }
    if (id != null) {
        sc.setParameters("id", id);
    }
    if (type != null) {
        sc.setParameters("volumeType", "%" + type + "%");
    }
    if (vmInstanceId != null) {
        sc.setParameters("instanceId", vmInstanceId);
    }
    if (zoneId != null) {
        sc.setParameters("dataCenterId", zoneId);
    }
    if (podId != null) {
        sc.setParameters("podId", podId);
    }
    if (storageId != null) {
        sc.setParameters("storageId", storageId);
    }
    // Don't return DomR and ConsoleProxy volumes
    sc.setParameters("type", VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm, VirtualMachine.Type.DomainRouter);
    // Only return volumes that are not destroyed
    sc.setParameters("state", Volume.State.Destroy);
    // search Volume details by ids
    Pair<List<VolumeJoinVO>, Integer> uniqueVolPair = _volumeJoinDao.searchAndCount(sc, searchFilter);
    Integer count = uniqueVolPair.second();
    if (count.intValue() == 0) {
        // empty result
        return uniqueVolPair;
    }
    List<VolumeJoinVO> uniqueVols = uniqueVolPair.first();
    Long[] vrIds = new Long[uniqueVols.size()];
    int i = 0;
    for (VolumeJoinVO v : uniqueVols) {
        vrIds[i++] = v.getId();
    }
    List<VolumeJoinVO> vrs = _volumeJoinDao.searchByIds(vrIds);
    return new Pair<List<VolumeJoinVO>, Integer>(vrs, count);
}
Also used : Account(com.cloud.user.Account) Ternary(com.cloud.utils.Ternary) ArrayList(java.util.ArrayList) ListProjectResourcesCriteria(com.cloud.projects.Project.ListProjectResourcesCriteria) TemplateFilter(com.cloud.template.VirtualMachineTemplate.TemplateFilter) Filter(com.cloud.utils.db.Filter) ArrayList(java.util.ArrayList) List(java.util.List) VolumeJoinVO(com.cloud.api.query.vo.VolumeJoinVO) Pair(com.cloud.utils.Pair)

Example 53 with Filter

use of com.cloud.utils.db.Filter in project cloudstack by apache.

the class QueryManagerImpl method listProjectAccountsInternal.

public Pair<List<ProjectAccountJoinVO>, Integer> listProjectAccountsInternal(ListProjectAccountsCmd cmd) {
    long projectId = cmd.getProjectId();
    String accountName = cmd.getAccountName();
    String role = cmd.getRole();
    Long startIndex = cmd.getStartIndex();
    Long pageSizeVal = cmd.getPageSizeVal();
    // long projectId, String accountName, String role, Long startIndex,
    // Long pageSizeVal) {
    Account caller = CallContext.current().getCallingAccount();
    // check that the project exists
    Project project = _projectDao.findById(projectId);
    if (project == null) {
        throw new InvalidParameterValueException("Unable to find the project id=" + projectId);
    }
    // project's account
    if (!_accountMgr.isAdmin(caller.getId()) && _projectAccountDao.findByProjectIdAccountId(projectId, caller.getAccountId()) == null) {
        throw new PermissionDeniedException("Account " + caller + " is not authorized to list users of the project id=" + projectId);
    }
    Filter searchFilter = new Filter(ProjectAccountJoinVO.class, "id", false, startIndex, pageSizeVal);
    SearchBuilder<ProjectAccountJoinVO> sb = _projectAccountJoinDao.createSearchBuilder();
    sb.and("accountRole", sb.entity().getAccountRole(), Op.EQ);
    sb.and("projectId", sb.entity().getProjectId(), Op.EQ);
    if (accountName != null) {
        sb.and("accountName", sb.entity().getAccountName(), Op.EQ);
    }
    SearchCriteria<ProjectAccountJoinVO> sc = sb.create();
    sc.setParameters("projectId", projectId);
    if (role != null) {
        sc.setParameters("accountRole", role);
    }
    if (accountName != null) {
        sc.setParameters("accountName", accountName);
    }
    return _projectAccountJoinDao.searchAndCount(sc, searchFilter);
}
Also used : Account(com.cloud.user.Account) Project(com.cloud.projects.Project) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) TemplateFilter(com.cloud.template.VirtualMachineTemplate.TemplateFilter) Filter(com.cloud.utils.db.Filter) ProjectAccountJoinVO(com.cloud.api.query.vo.ProjectAccountJoinVO) PermissionDeniedException(com.cloud.exception.PermissionDeniedException)

Example 54 with Filter

use of com.cloud.utils.db.Filter in project cloudstack by apache.

the class QueryManagerImpl method searchForImageStoresInternal.

private Pair<List<ImageStoreJoinVO>, Integer> searchForImageStoresInternal(ListImageStoresCmd cmd) {
    Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(), cmd.getZoneId());
    Object id = cmd.getId();
    Object name = cmd.getStoreName();
    String provider = cmd.getProvider();
    String protocol = cmd.getProtocol();
    Object keyword = cmd.getKeyword();
    Long startIndex = cmd.getStartIndex();
    Long pageSize = cmd.getPageSizeVal();
    Filter searchFilter = new Filter(ImageStoreJoinVO.class, "id", Boolean.TRUE, startIndex, pageSize);
    SearchBuilder<ImageStoreJoinVO> sb = _imageStoreJoinDao.createSearchBuilder();
    // select distinct
    sb.select(null, Func.DISTINCT, sb.entity().getId());
    // ids
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
    sb.and("dataCenterId", sb.entity().getZoneId(), SearchCriteria.Op.EQ);
    sb.and("protocol", sb.entity().getProtocol(), SearchCriteria.Op.EQ);
    sb.and("provider", sb.entity().getProviderName(), SearchCriteria.Op.EQ);
    sb.and("role", sb.entity().getRole(), SearchCriteria.Op.EQ);
    SearchCriteria<ImageStoreJoinVO> sc = sb.create();
    sc.setParameters("role", DataStoreRole.Image);
    if (keyword != null) {
        SearchCriteria<ImageStoreJoinVO> ssc = _imageStoreJoinDao.createSearchCriteria();
        ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("providerName", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("name", SearchCriteria.Op.SC, ssc);
    }
    if (id != null) {
        sc.setParameters("id", id);
    }
    if (name != null) {
        sc.setParameters("name", name);
    }
    if (zoneId != null) {
        sc.setParameters("dataCenterId", zoneId);
    }
    if (provider != null) {
        sc.setParameters("provider", provider);
    }
    if (protocol != null) {
        sc.setParameters("protocol", protocol);
    }
    // search Store details by ids
    Pair<List<ImageStoreJoinVO>, Integer> uniqueStorePair = _imageStoreJoinDao.searchAndCount(sc, searchFilter);
    Integer count = uniqueStorePair.second();
    if (count.intValue() == 0) {
        // empty result
        return uniqueStorePair;
    }
    List<ImageStoreJoinVO> uniqueStores = uniqueStorePair.first();
    Long[] vrIds = new Long[uniqueStores.size()];
    int i = 0;
    for (ImageStoreJoinVO v : uniqueStores) {
        vrIds[i++] = v.getId();
    }
    List<ImageStoreJoinVO> vrs = _imageStoreJoinDao.searchByIds(vrIds);
    return new Pair<List<ImageStoreJoinVO>, Integer>(vrs, count);
}
Also used : ImageStoreJoinVO(com.cloud.api.query.vo.ImageStoreJoinVO) TemplateFilter(com.cloud.template.VirtualMachineTemplate.TemplateFilter) Filter(com.cloud.utils.db.Filter) ArrayList(java.util.ArrayList) List(java.util.List) Pair(com.cloud.utils.Pair)

Example 55 with Filter

use of com.cloud.utils.db.Filter in project cloudstack by apache.

the class VMSnapshotManagerImpl method listVMSnapshots.

@Override
public Pair<List<? extends VMSnapshot>, Integer> listVMSnapshots(ListVMSnapshotCmd cmd) {
    Account caller = getCaller();
    List<Long> permittedAccounts = new ArrayList<Long>();
    boolean listAll = cmd.listAll();
    Long id = cmd.getId();
    Long vmId = cmd.getVmId();
    String state = cmd.getState();
    String keyword = cmd.getKeyword();
    String name = cmd.getVmSnapshotName();
    String accountName = cmd.getAccountName();
    List<Long> ids = getIdsListFromCmd(cmd.getId(), cmd.getIds());
    Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
    _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, false);
    Long domainId = domainIdRecursiveListProject.first();
    Boolean isRecursive = domainIdRecursiveListProject.second();
    ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
    Filter searchFilter = new Filter(VMSnapshotVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal());
    SearchBuilder<VMSnapshotVO> sb = _vmSnapshotDao.createSearchBuilder();
    _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    sb.and("vm_id", sb.entity().getVmId(), SearchCriteria.Op.EQ);
    sb.and("domain_id", sb.entity().getDomainId(), SearchCriteria.Op.EQ);
    sb.and("status", sb.entity().getState(), SearchCriteria.Op.IN);
    sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
    sb.and("display_name", sb.entity().getDisplayName(), SearchCriteria.Op.EQ);
    sb.and("account_id", sb.entity().getAccountId(), SearchCriteria.Op.EQ);
    sb.done();
    SearchCriteria<VMSnapshotVO> sc = sb.create();
    _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    if (accountName != null && cmd.getDomainId() != null) {
        Account account = _accountMgr.getActiveAccountByName(accountName, cmd.getDomainId());
        sc.setParameters("account_id", account.getId());
    }
    if (vmId != null) {
        sc.setParameters("vm_id", vmId);
    }
    setIdsListToSearchCriteria(sc, ids);
    if (domainId != null) {
        sc.setParameters("domain_id", domainId);
    }
    if (state == null) {
        VMSnapshot.State[] status = { VMSnapshot.State.Ready, VMSnapshot.State.Creating, VMSnapshot.State.Allocated, VMSnapshot.State.Error, VMSnapshot.State.Expunging, VMSnapshot.State.Reverting };
        sc.setParameters("status", (Object[]) status);
    } else {
        sc.setParameters("state", state);
    }
    if (name != null) {
        sc.setParameters("display_name", name);
    }
    if (keyword != null) {
        SearchCriteria<VMSnapshotVO> ssc = _vmSnapshotDao.createSearchCriteria();
        ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("display_name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        ssc.addOr("description", SearchCriteria.Op.LIKE, "%" + keyword + "%");
        sc.addAnd("name", SearchCriteria.Op.SC, ssc);
    }
    if (id != null) {
        sc.setParameters("id", id);
    }
    Pair<List<VMSnapshotVO>, Integer> searchAndCount = _vmSnapshotDao.searchAndCount(sc, searchFilter);
    return new Pair<List<? extends VMSnapshot>, Integer>(searchAndCount.first(), searchAndCount.second());
}
Also used : Account(com.cloud.user.Account) Ternary(com.cloud.utils.Ternary) ArrayList(java.util.ArrayList) ListProjectResourcesCriteria(com.cloud.projects.Project.ListProjectResourcesCriteria) Filter(com.cloud.utils.db.Filter) State(com.cloud.vm.VirtualMachine.State) List(java.util.List) ArrayList(java.util.ArrayList) Pair(com.cloud.utils.Pair)

Aggregations

Filter (com.cloud.utils.db.Filter)114 ArrayList (java.util.ArrayList)68 List (java.util.List)64 Pair (com.cloud.utils.Pair)58 Account (com.cloud.user.Account)46 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)33 ListProjectResourcesCriteria (com.cloud.projects.Project.ListProjectResourcesCriteria)30 Ternary (com.cloud.utils.Ternary)30 TemplateFilter (com.cloud.template.VirtualMachineTemplate.TemplateFilter)27 DomainVO (com.cloud.domain.DomainVO)13 ExcludeList (com.cloud.deploy.DeploymentPlanner.ExcludeList)12 SSHKeyPair (com.cloud.user.SSHKeyPair)12 ResourceTagVO (com.cloud.tags.ResourceTagVO)11 Date (java.util.Date)10 PermissionDeniedException (com.cloud.exception.PermissionDeniedException)9 IPAddressVO (com.cloud.network.dao.IPAddressVO)8 VMTemplateVO (com.cloud.storage.VMTemplateVO)5 SearchCriteria (com.cloud.utils.db.SearchCriteria)5 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)5 CloudAuthenticationException (com.cloud.exception.CloudAuthenticationException)4