package org.ovirt.engine.api.restapi.resource; import java.util.LinkedList; import java.util.List; import javax.ws.rs.core.Response; 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.RepoFileMetaData; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.queries.GetAllIsoImagesListParameters; import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; import static org.ovirt.engine.api.restapi.resource.BackendStorageDomainResource.isIsoDomain; 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(storage_domains.class, VdcQueryType.GetStorageDomainById, new StorageDomainQueryParametersBase(asGuid(storageDomainId)), "storage_domain"))) { return mapCollection(listFiles()); } else { return notFound(Files.class); } } @Override @SingleEntityResource public FileResource getFileSubResource(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() { GetAllIsoImagesListParameters queryParams = new GetAllIsoImagesListParameters(asGuid(storageDomainId)); queryParams.setForceRefresh(true); List<RepoFileMetaData> files = getBackendCollection(RepoFileMetaData.class, VdcQueryType.GetAllIsoImagesList, queryParams); files.addAll(getBackendCollection(RepoFileMetaData.class, VdcQueryType.GetAllFloppyImagesList, queryParams)); List<String> fileNames = new LinkedList<String>(); for (RepoFileMetaData file : files) { fileNames.add(file.getRepoFileName()); } return fileNames; } @Override protected Response performRemove(String id) { throw new UnsupportedOperationException(); } }