package org.ovirt.engine.core.bll.memory.sdcomparators;
import java.util.Collection;
import java.util.Comparator;
import java.util.Map;
import java.util.stream.Collectors;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.compat.Guid;
public class StorageDomainNumberOfVmDisksComparator implements Comparator<StorageDomain> {
private Map<Guid, Long> numOfVmDisksInStorageDomains;
public StorageDomainNumberOfVmDisksComparator(Collection<DiskImage> vmDisks) {
numOfVmDisksInStorageDomains = vmDisks.stream().collect(Collectors.groupingBy(
vmDisk -> vmDisk.getStorageIds().get(0), Collectors.counting()
));
}
@Override
public int compare(StorageDomain storageDomain, StorageDomain storageDomain2) {
Long numOfVmDisksInStorageDomain = numOfVmDisksInStorageDomains.getOrDefault(storageDomain.getId(), 0L);
Long numOfVmDisksInStorageDomain2 = numOfVmDisksInStorageDomains.getOrDefault(storageDomain2.getId(), 0L);
// Prefer the domain with more disks on it
return -1 * numOfVmDisksInStorageDomain.compareTo(numOfVmDisksInStorageDomain2);
}
}