package org.ovirt.engine.core.bll.storage.domain; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; import org.ovirt.engine.core.bll.context.EngineContext; import org.ovirt.engine.core.bll.storage.disk.GetVmTemplatesDisksQuery; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.StorageDomainDao; import org.ovirt.engine.core.dao.VmTemplateDao; public class GetStorageDomainsByVmTemplateIdQuery<P extends IdQueryParameters> extends GetVmTemplatesDisksQuery<P> { @Inject private VmTemplateDao vmTemplateDao; @Inject private StorageDomainDao storageDomainDao; private VmTemplate vmTemplate = null; public GetStorageDomainsByVmTemplateIdQuery(P parameters) { this(parameters, null); } public GetStorageDomainsByVmTemplateIdQuery(P parameters, EngineContext engineContext) { super(parameters, engineContext); } @Override protected void executeQueryCommand() { vmTemplate = vmTemplateDao.get(getParameters().getId(), getUserID(), getParameters().isFiltered()); ArrayList<StorageDomain> result = new ArrayList<>(); if (vmTemplate != null && vmTemplate.getStoragePoolId() != null) { List<Disk> templateDisks = getTemplateDisks(); if (templateDisks.size() > 0) { Set<Guid> domains = new HashSet<>(); for (Disk templateDisk : templateDisks) { domains.addAll(((DiskImage)templateDisk).getStorageIds()); } for (Guid domainId : domains) { StorageDomain domain = getStorageDomain(domainId); if (domain != null) { result.add(domain); } } } } getQueryReturnValue().setReturnValue(result); } protected StorageDomain getStorageDomain(Guid domainId) { return storageDomainDao.getForStoragePool(domainId, vmTemplate.getStoragePoolId()); } }