package org.ovirt.engine.api.restapi.resource;
import static java.util.stream.Collectors.toList;
import static org.ovirt.engine.api.restapi.resource.BackendStorageDomainResource.isIsoDomain;
import java.util.List;
import org.ovirt.engine.api.model.File;
import org.ovirt.engine.api.model.Files;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.resource.FileResource;
import org.ovirt.engine.api.resource.FilesResource;
import org.ovirt.engine.core.common.businessentities.storage.ImageFileType;
import org.ovirt.engine.core.common.businessentities.storage.RepoImage;
import org.ovirt.engine.core.common.queries.GetImagesListParameters;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
public class BackendFilesResource
extends AbstractBackendCollectionResource<File, String>
implements FilesResource {
protected String storageDomainId;
public BackendFilesResource(String storageDomainId) {
super(File.class, String.class);
this.storageDomainId = storageDomainId;
}
@Override
public Files list() {
if (isIsoDomain(getEntity(org.ovirt.engine.core.common.businessentities.StorageDomain.class,
VdcQueryType.GetStorageDomainById,
new IdQueryParameters(asGuid(storageDomainId)),
"storage_domain"))) {
return mapCollection(listFiles());
} else {
return notFound(Files.class);
}
}
@Override
public FileResource getFileResource(String id) {
return new BackendFileResource(id, this);
}
@Override
protected File addParents(File file) {
file.setStorageDomain(new StorageDomain());
file.getStorageDomain().setId(storageDomainId);
return file;
}
protected Files mapCollection(List<String> entities) {
Files files = new Files();
for (String name : entities) {
files.getFiles().add(addLinks(map(name)));
}
return files;
}
public File lookupFile(String name) {
if (listFiles().contains(name)) {
return addLinks(map(name));
} else {
return notFound();
}
}
protected List<String> listFiles() {
GetImagesListParameters queryParams = new GetImagesListParameters(asGuid(storageDomainId), ImageFileType.All);
queryParams.setForceRefresh(true);
List<RepoImage> files = getBackendCollection(RepoImage.class, VdcQueryType.GetImagesList,
queryParams);
return files.stream().map(RepoImage::getRepoImageId).collect(toList());
}
}