package org.ovirt.engine.core.bll.storage.disk.cinder; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; import org.ovirt.engine.core.bll.context.EngineContext; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.DiskDao; import com.woorea.openstack.cinder.model.Volume; public class GetUnregisteredCinderDisksByStorageDomainIdQuery<P extends IdQueryParameters> extends CinderQueryBase<P> { @Inject private DiskDao diskDao; public GetUnregisteredCinderDisksByStorageDomainIdQuery(P parameters) { super(parameters); } public GetUnregisteredCinderDisksByStorageDomainIdQuery(P parameters, EngineContext context) { super(parameters, context); } @Override protected void executeQueryCommand() { final List<Volume> allVolumes = getVolumeProviderProxy().getVolumes(); final List<Disk> registeredDisks = diskDao.getAllFromDisksByDiskStorageType(DiskStorageType.CINDER, getUserID(), getParameters().isFiltered()); Set<String> registeredIDs = registeredDisks.stream().map(d -> d.getId().toString()).collect(Collectors.toSet()); List<Volume> unregisteredVolumes = allVolumes.stream().filter(v -> !registeredIDs.contains(v.getId())).collect(Collectors.toList()); Guid storageDomainId = getParameters().getId(); List<CinderDisk> unregisteredDisks = CinderBroker.volumesToCinderDisks(unregisteredVolumes, storageDomainId); getQueryReturnValue().setReturnValue(unregisteredDisks); } }