package org.ovirt.engine.core.bll;
import javax.inject.Inject;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.bll.host.provider.HostProviderProxy;
import org.ovirt.engine.core.bll.provider.ProviderProxyFactory;
import org.ovirt.engine.core.common.businessentities.ErrataData;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.common.queries.GetErrataCountsParameters;
import org.ovirt.engine.core.dao.VmDao;
import org.ovirt.engine.core.dao.provider.ProviderDao;
public class GetErrataCountsForVmQuery<P extends GetErrataCountsParameters> extends QueriesCommandBase<P> {
@Inject
private VmDao vmDao;
@Inject
private ProviderDao providerDao;
public GetErrataCountsForVmQuery(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
VM vm = vmDao.get(getParameters().getId());
if (vm == null) {
failWith(EngineMessage.ACTION_TYPE_FAILED_VM_NOT_EXIST);
return;
}
Provider<?> provider = getHostProvider(vm);
if (provider == null) {
failWith(EngineMessage.NO_FOREMAN_PROVIDER_FOR_VM);
return;
}
HostProviderProxy proxy = getHostProviderProxy(provider);
String vmHostName = vm.getDynamicData().getVmHost();
if (StringUtils.isBlank(vmHostName)) {
failWith(EngineMessage.NO_HOST_NAME_FOR_VM);
}
ErrataData errataForVm = proxy.getErrataForHost(vmHostName, getParameters().getErrataFilter());
setReturnValue(errataForVm.getErrataCounts());
}
private void failWith(EngineMessage failure) {
getQueryReturnValue().setExceptionString(failure.name());
getQueryReturnValue().setSucceeded(false);
}
HostProviderProxy getHostProviderProxy(Provider<?> provider) {
return (HostProviderProxy) ProviderProxyFactory.getInstance().create(provider);
}
private Provider<?> getHostProvider(VM vm) {
return vm.getProviderId() == null ? null : providerDao.get(vm.getProviderId());
}
}