package org.ovirt.engine.core.bll;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.VmPoolDao;
public class GetVmDataByPoolIdQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> {
@Inject
private VmHandler vmHandler;
@Inject
private VmPoolDao vmPoolDao;
public GetVmDataByPoolIdQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
VM vm = vmPoolDao.getVmDataFromPoolByPoolGuid(getParameters().getId(), getUserID(), getParameters().isFiltered());
if (vm != null) {
boolean isLatestLoad = vm.isUseLatestVersion();
boolean loadTemplateData = false;
Guid vmtGuid = vm.getVmtGuid();
if (vm.isNextRunConfigurationExists()) {
VdcQueryReturnValue nextRunRet = backend.runInternalQuery(VdcQueryType.GetVmNextRunConfiguration, new IdQueryParameters(vm.getId()));
if (nextRunRet != null) {
VM nextRunVm = nextRunRet.getReturnValue();
if (nextRunVm != null) { // template version was changed -> load data from template
isLatestLoad = nextRunVm.isUseLatestVersion();
vmtGuid = nextRunVm.getVmtGuid();
loadTemplateData = true;
}
}
}
VmTemplate templateData = null;
if (isLatestLoad) {
VdcQueryReturnValue latestRet = backend.runInternalQuery(VdcQueryType.GetLatestTemplateInChain, new IdQueryParameters(vmtGuid));
if (latestRet != null) {
templateData = latestRet.getReturnValue();
}
} else if (loadTemplateData) {
VdcQueryReturnValue templateRet = backend.runInternalQuery(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(vmtGuid));
if (templateRet != null) {
templateData = templateRet.getReturnValue();
}
}
if (templateData != null) {
VmStatic temp = vm.getStaticData();
temp.setVmtGuid(vmtGuid);
temp.setUseLatestVersion(isLatestLoad);
VmHandler.copyData(templateData, temp);
vm.setStaticData(temp);
}
vmHandler.updateDisksFromDb(vm);
vmHandler.updateVmInitFromDB(vm.getStaticData(), true);
}
getQueryReturnValue().setReturnValue(vm);
}
}