package io.fathom.cloud.image.imports; import io.fathom.cloud.blobs.TempFile; import io.fathom.cloud.openstack.client.RestClientException; import io.fathom.cloud.openstack.client.SimpleRestClient; import io.fathom.http.HttpClient; import io.fathom.http.HttpMethod; import io.fathom.http.HttpRequest; import io.fathom.http.HttpResponse; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import com.google.common.io.ByteStreams; public class ImportImageClient extends SimpleRestClient { public ImportImageClient(HttpClient httpClient, URI baseUri) { super(httpClient, baseUri); } public ImageImportMetadata getMetadata(URI uri) throws RestClientException { HttpRequest request = getHttpClient().buildRequest(HttpMethod.GET, uri); addHeaders(request); ImageImportMetadata metadata = doRequest(request, ImageImportMetadata.class); return metadata; } public TempFile downloadImage(URI metadataUri, ImageImportMetadata metadata) throws IOException, RestClientException { URI uri = metadataUri.resolve(metadata.image); HttpRequest request = getHttpClient().buildRequest(HttpMethod.GET, uri); addHeaders(request); HttpResponse response = executeRawRequest(request); try { try (InputStream is = response.getInputStream()) { if (is == null) { return null; } TempFile tempFile = TempFile.create(); try { try (FileOutputStream os = new FileOutputStream(tempFile.getFile())) { ByteStreams.copy(is, os); } TempFile ret = tempFile; tempFile = null; return ret; } finally { if (tempFile != null) { tempFile.close(); } } } } finally { closeQuietly(response); } } }