Package io.fathom.cloud.image.imports

Source Code of io.fathom.cloud.image.imports.ImageImportsImpl

package io.fathom.cloud.image.imports;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.blobs.BlobData;
import io.fathom.cloud.blobs.TempFile;
import io.fathom.cloud.image.ImageMetadata;
import io.fathom.cloud.openstack.client.RestClientException;
import io.fathom.cloud.services.ImageImports;
import io.fathom.cloud.services.ImageService;
import io.fathom.cloud.services.ImageService.Image;
import io.fathom.http.HttpClient;
import io.fathom.http.jre.JreHttpClient;

import java.io.IOException;
import java.net.URI;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Singleton;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Singleton
public class ImageImportsImpl implements ImageImports {

    private static final Logger log = LoggerFactory.getLogger(ImageImportsImpl.class);

    @Inject
    ImageService imageService;

    @Override
    public Metadata getImageMetadata(String imageUrl) throws Exception {
        HttpClient httpClient = JreHttpClient.create();
        URI imageUri = URI.create(imageUrl);
        ImportImageClient imageClient = new ImportImageClient(httpClient, imageUri);

        final ImageImportMetadata imageMetadata = imageClient.getMetadata(imageUri);

        return new Metadata() {
            @Override
            public String getChecksum() {
                return imageMetadata.checksum;
            }
        };
    }

    @Override
    public Image importImage(long projectId, String imageUrl) throws IOException, CloudException, RestClientException {
        HttpClient httpClient = JreHttpClient.create();
        URI imageUri = URI.create(imageUrl);
        ImportImageClient imageClient = new ImportImageClient(httpClient, imageUri);

        log.info("Downloading metadata {}", imageUri);

        ImageImportMetadata imageMetadata = imageClient.getMetadata(imageUri);

        Map<String, String> metadata = imageMetadata.metadata;

        metadata.put(ImageMetadata.KEY_IMAGE_SOURCE, imageUri.toString());

        log.info("Downloading image {}", imageMetadata.image);

        // TODO: It would be nice to avoid re-downloading the same image.
        // But... the metadata may be different. Punt for now!
        // Image found = null;
        // for (Image image : imageService.listImages(project))) {
        // String checksum = image.getChecksum();
        // if (checksum.equalsIgnoreCase(imageMetadata.checksum)) {
        // log.warn("Found matching image: {}", found);
        //
        // // TODO: Compare metadata??
        // found = image;
        //
        // break;
        // }
        // }

        try (TempFile tempImage = imageClient.downloadImage(imageUri, imageMetadata)) {
            log.info("Creating image record");
            Image image = imageService.createImage(projectId, metadata);

            log.info("Uploading image data");
            BlobData blobData = BlobData.build(tempImage.getFile());
            image = imageService.uploadData(image, blobData);

            return image;
        }
    }
}
TOP

Related Classes of io.fathom.cloud.image.imports.ImageImportsImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.