package org.ovirt.engine.core.bll.storage.disk;
import java.util.Collection;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
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.DiskVmElement;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.DiskDao;
import org.ovirt.engine.core.dao.DiskImageDao;
import org.ovirt.engine.core.dao.DiskVmElementDao;
@Singleton
public class DiskHandler {
@Inject
private DiskDao diskDao;
@Inject
private DiskImageDao diskImageDao;
@Inject
private DiskVmElementDao diskVmElementDao;
/**
* loads the disk info for the active snapshot, for luns the lun disk will be returned.
*/
public Disk loadActiveDisk(Guid diskId) {
return diskDao.get(diskId);
}
/**
* Loads a disk info for selected snapshot, if no snapshot ID was specified it will load the active snapshot
*/
public Disk loadDiskFromSnapshot(Guid diskId, Guid snapshotId) {
return snapshotId == null ? loadActiveDisk(diskId) :
diskImageDao.getDiskSnapshotForVmSnapshot(diskId, snapshotId);
}
public Map<Disk, DiskVmElement> getDiskToDiskVmElementMap(Guid vmId, Map<Guid, ? extends Disk> disksMap) {
return getDiskToDiskVmElementMap(disksMap, diskVmElementDao.getAllForVm(vmId));
}
public Map<Disk, DiskVmElement> getDiskToDiskVmElementMap(Collection<DiskImage> disks,
Collection<DiskVmElement> diskVmElements) {
return getDiskToDiskVmElementMap(disks.stream().collect(Collectors.toMap(Disk::getId, Function.identity())),
diskVmElements);
}
private Map<Disk, DiskVmElement> getDiskToDiskVmElementMap(Map<Guid, ? extends Disk> disksMap,
Collection<DiskVmElement> diskVmElements) {
return diskVmElements.stream()
.filter(dve -> disksMap.keySet().contains(dve.getDiskId()))
.collect(Collectors.toMap(diskVmElement ->
disksMap.get(diskVmElement.getId().getDeviceId()), Function.identity()));
}
}