package org.ovirt.engine.core.bll;
import java.util.List;
import org.ovirt.engine.core.common.businessentities.ServerCpu;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
import org.ovirt.engine.core.common.queries.GetAvailableClustersByServerCpuParameters;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.linq.Function;
import org.ovirt.engine.core.utils.linq.LinqUtils;
import org.ovirt.engine.core.utils.linq.Predicate;
public class GetAvailableClustersByServerCpuQuery<P extends GetAvailableClustersByServerCpuParameters>
extends QueriesCommandBase<P> {
public GetAvailableClustersByServerCpuQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
// get all clusters
List<VDSGroup> allClusters = DbFacade.getInstance().getVdsGroupDAO().getAll();
// get all available cpu names
// LINQ 29456
// List<string> availableCpus =
// CpuFlagsManagerHandler.GetAllServerCpusBelowCpu(
// GetParameters.CpuName, GetParameters.Version)
// .Select(a => a.CpuName).ToList();
// QueryReturnValue.ReturnValue = allClusters.Where(a =>
// availableCpus.Contains(a.cpu_name)).ToList();
String cpuName = getParameters().getCpuName();
Version version = getParameters().getVersion();
final List<String> availableCpus = LinqUtils.foreach(
CpuFlagsManagerHandler.GetAllServerCpusBelowCpu(cpuName, version), new Function<ServerCpu, String>() {
@Override
public String eval(ServerCpu serverCpu) {
return serverCpu.getCpuName();
}
});
getQueryReturnValue().setReturnValue(LinqUtils.filter(allClusters, new Predicate<VDSGroup>() {
@Override
public boolean eval(VDSGroup vdsGroup) {
return availableCpus.contains(vdsGroup.getcpu_name());
}
}));
}
}