package org.ovirt.engine.core.bll;
import java.util.Collections;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.DiskImage;
import org.ovirt.engine.core.common.businessentities.ImagesComparerByName;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmsComparerByDiskSize;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.queries.StorageDomainQueryTopSizeVmsParameters;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
public class GetTopSizeVmsFromStorageDomainQuery<P extends StorageDomainQueryTopSizeVmsParameters>
extends QueriesCommandBase<P> {
public GetTopSizeVmsFromStorageDomainQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
List<VM> vms = DbFacade.getInstance().getVmDAO().getAllForStorageDomain(
getParameters().getStorageDomainId());
for (VM vm : vms) {
VmHandler.updateDisksFromDb(vm);
java.util.Collections.sort(vm.getDiskList(), new ImagesComparerByName());
for (DiskImage diskImage : vm.getDiskMap().values()) {
diskImage.getSnapshots().addAll(
ImagesHandler.getAllImageSnapshots(diskImage.getId(), diskImage.getit_guid()));
}
}
Collections.sort(vms, Collections.reverseOrder(new VmsComparerByDiskSize()));
/*
* BZ#700327 requires that we return a maximum entries according to the following logic:
* According to given parameter we are asked to
* (-1): means return all available entries.
* 0: means use whatever we have defined in the DB (vdc_options)
* otherwise: use the limitation we got in the parameter.
*/
int maxEntriesToReturn = getParameters().getMaxVmsToReturn();
switch (maxEntriesToReturn) {
case -1:
maxEntriesToReturn = vms.size();
break;
case 0:
maxEntriesToReturn = Math.min(vms.size(), Config.<Integer> GetValue(ConfigValues.NumberOfVmsForTopSizeVms));
break;
default:
maxEntriesToReturn = Math.min(vms.size(), maxEntriesToReturn);
break;
}
getQueryReturnValue().setReturnValue(vms.subList(0, maxEntriesToReturn));
}
}