Package io.fathom.cloud.image.api.os.resources

Source Code of io.fathom.cloud.image.api.os.resources.ImageResourceBase

package io.fathom.cloud.image.api.os.resources;

import io.fathom.cloud.Clock;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.image.ImageServiceImpl.ImageImpl;
import io.fathom.cloud.image.api.os.model.Image;
import io.fathom.cloud.protobuf.ImageModel.ImageData;
import io.fathom.cloud.server.auth.Auth;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.server.resources.OpenstackResourceBase;
import io.fathom.cloud.services.ImageService;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response.Status;

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

import com.fathomdb.utils.Hex;
import com.google.common.collect.Maps;

public class ImageResourceBase extends OpenstackResourceBase {
    private static final Logger log = LoggerFactory.getLogger(ImageResourceBase.class);

    private Project project;

    protected Project getProject() throws CloudException {
        Auth auth = null;
        if (project == null) {
            auth = findAuth();
            if (auth != null) {
                project = auth.getProject();
            }
        }
        if (project == null) {
            log.debug("No project found for auth: {}", auth);
            log.debug("X-Auth-Token: {}", httpRequest.getHeader("X-Auth-Token"));
            throw new WebApplicationException(Status.UNAUTHORIZED);
        }
        return project;
    }

    protected Image toModel(ImageService.Image image) {
        return toModel(((ImageImpl) image).getData());
    }

    protected Image toModel(ImageData data) {
        Image image = new Image();

        image.isPublic = data.getIsPublic();
        if (data.getIsPublic()) {
            image.visibility = "public";
        } else {
            image.visibility = "private";
        }

        image.name = data.getName();
        image.id = "" + data.getId();

        // These are sort of deprecated in V2...
        image.diskFormat = data.getDiskFormat();
        image.containerFormat = data.getContainerFormat();

        image.properties = Maps.newHashMap();
        image.owner = "" + data.getOwnerProject();

        image.isProtected = false;

        String baseUrl = getBaseUrl();

        image.self = baseUrl + "/v1/images/" + data.getId();
        image.file = image.self + "/file";
        image.schema = "/v2/schemas/image";

        if (data.hasImageSize()) {
            image.size = data.getImageSize();
        }

        if (data.hasImageChecksum()) {
            image.checksum = Hex.toHex(data.getImageChecksum().toByteArray());
        }

        switch (data.getImageState()) {
        case ACTIVE:
            image.status = "active";
            break;
        case DELETED:
            image.status = "deleted";
            break;
        case KILLED:
            image.status = "killed";
            break;
        case QUEUED:
            image.status = "queued";
            break;
        case PENDING_DELETE:
            image.status = "pending_delete";
            break;
        case SAVING:
            image.status = "saving";
            break;

        default:
            log.warn("Unknown image state: " + data);
            break;
        }

        if (data.hasCreatedAt()) {
            image.createdAt = Clock.toDate(data.getCreatedAt());
        }
        if (data.hasUpdatedAt()) {
            image.updatedAt = Clock.toDate(data.getUpdatedAt());
        }

        return image;
    }

}
TOP

Related Classes of io.fathom.cloud.image.api.os.resources.ImageResourceBase

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.