package org.ovirt.engine.core.bll;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.core.bll.context.EngineContext;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmPool;
import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class GetAllVmsAndVmPoolsQuery<P extends VdcQueryParametersBase> extends QueriesCommandBase<P> {
public GetAllVmsAndVmPoolsQuery(P parameters) {
super(parameters);
}
public GetAllVmsAndVmPoolsQuery(P parameters, EngineContext engineContext) {
super(parameters, engineContext);
}
@Override
protected void executeQueryCommand() {
boolean isSucceeded = true;
List<Object> retValList = new ArrayList<>();
// Add all VMs that the user has direct or indirect privileges on
// that do not belong to a VM Pool
VdcQueryReturnValue queryResult =
runInternalQuery(VdcQueryType.GetAllVms, getParameters());
if (queryResult != null && queryResult.getSucceeded()) {
for (VM vm : queryResult.<List<VM>>getReturnValue()) {
if (Guid.isNullOrEmpty(vm.getVmPoolId())) {
retValList.add(vm);
}
}
} else {
isSucceeded = false;
}
// Query for all VMs the user has direct permissions on, if
// a user has taken a VM from VM Pool it should be returned here
queryResult = runInternalQuery(VdcQueryType.GetAllVmsForUser, getParameters());
if (queryResult != null && queryResult.getSucceeded()) {
for (VM vm : queryResult.<List<VM>>getReturnValue()) {
if (!retValList.contains(vm)) {
retValList.add(vm);
}
}
} else {
isSucceeded = false;
}
if (isSucceeded) {
queryResult =
runInternalQuery(VdcQueryType.GetAllVmPoolsAttachedToUser,
new VdcQueryParametersBase());
if (queryResult != null && queryResult.getSucceeded()) {
retValList.addAll(queryResult.<List<VmPool>>getReturnValue());
} else {
isSucceeded = false;
}
}
if (!isSucceeded) {
getQueryReturnValue().setSucceeded(false);
return;
}
getQueryReturnValue().setReturnValue(retValList);
}
}