package org.ovirt.engine.core.bll.storage.repoimage;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.inject.Inject;
import org.ovirt.engine.core.bll.QueriesCommandBase;
import org.ovirt.engine.core.bll.storage.domain.IsoDomainListSynchronizer;
import org.ovirt.engine.core.common.businessentities.storage.RepoImage;
import org.ovirt.engine.core.common.queries.GetImagesListParametersBase;
import org.ovirt.engine.core.compat.Guid;
public abstract class GetImagesListQueryBase<P extends GetImagesListParametersBase> extends QueriesCommandBase<P> {
@Inject
private IsoDomainListSynchronizer isoDomainListSynchronizer;
public GetImagesListQueryBase(P parameters) {
super(parameters);
}
@Override
protected void executeQueryCommand() {
// Fetch all the Iso files of a given type for storage pool with active storage domain of this domain Id.
try {
getQueryReturnValue().setReturnValue(getUserRequestForStorageDomainRepoFileList());
} catch (Exception e) {
String message = Optional.of(e.getCause()).map(Throwable::getMessage).orElse("");
log.error("Failed to retrieve image list: {}", message);
getQueryReturnValue().setExceptionString(message);
getQueryReturnValue().setSucceeded(false);
}
}
/**
* @return The storage domain to get the images from
*/
protected abstract Guid getStorageDomainIdForQuery();
protected List<RepoImage> getUserRequestForStorageDomainRepoFileList() {
Guid storageDomainId = getStorageDomainIdForQuery();
if (Guid.Empty.equals(storageDomainId)) {
return new ArrayList<>();
}
return isoDomainListSynchronizer.getUserRequestForStorageDomainRepoFileList
(storageDomainId, getParameters().getImageType(), getParameters().getForceRefresh());
}
}