package org.ovirt.engine.core.vdsbroker; import static java.util.stream.Collectors.toMap; import java.util.Comparator; import java.util.Map; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.VmStaticDao; /** * Sort VMs that are running on a given host by their priority, * from the VM with the highest priority to the one with the lowest priority. */ public class VmsOnHostComparator implements Comparator<Guid> { private Guid hostId; private Map<Guid, Integer> vmIdToVmPriority; @Inject private VmStaticDao vmStaticDao; public VmsOnHostComparator(Guid hostId) { this.hostId = hostId; } @PostConstruct private void init() { vmIdToVmPriority = vmStaticDao.getAllRunningForVds(hostId) .stream() .collect(toMap(VmStatic::getId, VmStatic::getPriority)); } @Override public int compare(Guid vm1, Guid vm2) { return vmIdToVmPriority.get(vm2) - vmIdToVmPriority.get(vm1); } }