package org.ovirt.engine.core.common.businessentities.comparators;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Map;
import java.util.WeakHashMap;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
public class VmTemplateComparerByDiskSize implements Comparator<VmTemplate>, Serializable {
private static final long serialVersionUID = -1620249078971769528L;
private Map<VmTemplate, Double> actualDiskSizeCache = new WeakHashMap<>();
private double getCachedActualDiskSize(VmTemplate template) {
final Double cacheSize = actualDiskSizeCache.get(template);
if (cacheSize != null) {
return cacheSize;
}
final double computedSize = template.getActualDiskSize();
actualDiskSizeCache.put(template, computedSize);
return computedSize;
}
@Override
public int compare(VmTemplate x, VmTemplate y) {
return (int) (getCachedActualDiskSize(x) - getCachedActualDiskSize(y));
}
}