package org.ovirt.engine.core.bll.exportimport;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.QueriesCommandBase;
import org.ovirt.engine.core.bll.context.EngineContext;
import org.ovirt.engine.core.common.AuditLogType;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
import org.ovirt.engine.core.common.businessentities.StorageDomainType;
import org.ovirt.engine.core.common.queries.GetAllFromExportDomainQueryParameters;
import org.ovirt.engine.core.common.vdscommands.GetVmsInfoVDSCommandParameters;
import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl;
import org.ovirt.engine.core.dao.StorageDomainDao;
public abstract class GetAllFromExportDomainQuery <T, P extends GetAllFromExportDomainQueryParameters>
extends QueriesCommandBase<P> {
@Inject
private StorageDomainDao storageDomainDao;
public GetAllFromExportDomainQuery(P parameters) {
this(parameters, null);
}
public GetAllFromExportDomainQuery(P parameters, EngineContext engineContext) {
super(parameters, engineContext);
}
protected abstract T buildFromOVFs(List<String> ovfList);
@Override
protected final void executeQueryCommand() {
StorageDomain storage = getStorage();
T returnValue = getAllFromStorage(storage);
getQueryReturnValue().setReturnValue(returnValue);
}
private StorageDomain getStorage() {
return storageDomainDao.getForStoragePool(
getParameters().getStorageDomainId(),
getParameters().getStoragePoolId());
}
private T getAllFromStorage(StorageDomain storage) {
return buildFromOVFs(isValidExportDomain(storage) ?
(List<String>) executeVerb(storage.getStorageStaticData()).getReturnValue()
: Collections.emptyList());
}
private boolean isValidExportDomain(StorageDomain storage) {
return storage != null
&& storage.getStorageDomainType() == StorageDomainType.ImportExport;
}
private VDSReturnValue executeVerb(StorageDomainStatic storage) {
try {
return runVdsCommand(VDSCommandType.GetVmsInfo, buildGetVmsInfoParameters(storage));
} catch (RuntimeException e) {
AuditLogable logable = new AuditLogableImpl();
logable.setStorageDomainId(storage.getId());
logable.setStorageDomainName(storage.getName());
auditLogDirector.log(logable, AuditLogType.IMPORTEXPORT_GET_VMS_INFO_FAILED);
throw e;
}
}
private GetVmsInfoVDSCommandParameters buildGetVmsInfoParameters(StorageDomainStatic storage) {
GetVmsInfoVDSCommandParameters parameters =
new GetVmsInfoVDSCommandParameters(getParameters().getStoragePoolId());
parameters.setStorageDomainId(storage.getId());
parameters.setVmIdList(getParameters().getIds());
return parameters;
}
}