All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.distelli.gcr.models.GcrManifestV2Schema2List Maven / Gradle / Ivy

package com.distelli.gcr.models;

import java.util.List;
import java.util.Collections;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.stream.Collectors;

// See https://docs.docker.com/registry/spec/manifest-v2-2/

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GcrManifestV2Schema2List implements GcrManifest
{
    private static ObjectMapper OM = new ObjectMapper();
    public static final String MEDIA_TYPE = "application/vnd.docker.distribution.manifest.list.v2+json";

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ManifestItem {
        public static class ManifestItemBuilder {
            protected String mediaType = GcrManifestV2Schema2.MEDIA_TYPE;
        }
        // Reasonable default:
        protected String mediaType = GcrManifestV2Schema2.MEDIA_TYPE;
        protected int size;
        protected String digest;
        protected Platform platform;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Platform {
        protected String architecture;
        protected String os;
        @JsonProperty("os.version")
        protected String osVersion;
        @JsonProperty("os.features")
        protected List osFeatures;
        protected String variant;
        protected String features;
    }

    public static class GcrManifestV2Schema2ListBuilder {
        protected String mediaType = MEDIA_TYPE;
        protected List manifests = Collections.emptyList();
    }

    public int getSchemaVersion() {
        return 2;
    }
    public void setSchemaVersion(int ignored) {}

    protected String mediaType = MEDIA_TYPE;
    protected List manifests = Collections.emptyList();

    @JsonIgnore
    @Override
    public List getReferencedDigests() {
        return manifests.stream()
            .map((manifest) -> manifest.getDigest())
            .collect(Collectors.toList());
    }

    @Override
    public String toString() {
        try {
            return OM.writeValueAsString(this);
        } catch ( RuntimeException ex ) {
            throw ex;
        } catch ( Exception ex ) {
            throw new RuntimeException(ex);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy