package org.ovirt.engine.core.bll.storage.disk; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.ovirt.engine.core.bll.QueriesCommandBase; import org.ovirt.engine.core.bll.context.EngineContext; import org.ovirt.engine.core.common.businessentities.VmDeviceId; import org.ovirt.engine.core.common.businessentities.storage.BaseDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskVmElement; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.dao.DiskDao; import org.ovirt.engine.core.dao.DiskImageDao; import org.ovirt.engine.core.dao.DiskVmElementDao; public class GetAllDisksByVmIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> { @Inject private DiskDao diskDao; @Inject private DiskVmElementDao diskVmElementDao; @Inject DiskImageDao diskImageDao; public GetAllDisksByVmIdQuery(P parameters) { super(parameters); } public GetAllDisksByVmIdQuery(P parameters, EngineContext context) { super(parameters, context); } @Override protected void executeQueryCommand() { List<Disk> allDisks = diskDao.getAllForVm(getParameters().getId(), getUserID(), getParameters().isFiltered()); List<Disk> disks = new ArrayList<>(); for (Disk disk : allDisks) { if (disk.getDiskStorageType() == DiskStorageType.IMAGE || disk.getDiskStorageType() == DiskStorageType.CINDER) { DiskImage diskImage = (DiskImage) disk; diskImage.getSnapshots().addAll(diskImageDao.getAllSnapshotsForLeaf(diskImage.getImageId())); } disk.setDiskVmElements(Collections.singletonList(getDiskVmElement(disk))); disks.add(disk); } getQueryReturnValue().setReturnValue(disks); } private DiskVmElement getDiskVmElement(BaseDisk disk) { return diskVmElementDao.get(new VmDeviceId(disk.getId(), getParameters().getId())); } }