DockerImage.java

package org.entando.kubernetes.model.bundle.descriptor;

import java.util.regex.Pattern;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import org.entando.kubernetes.service.digitalexchange.BundleUtilities;

@Getter
@Setter
@Builder
public class DockerImage {

    private static final String orgGroup = "o";
    private static final String nameGroup = "n";
    private static final String versGroup = "v";
    private static final Pattern imagePattern = Pattern
            .compile("(?<o>[a-z0-9]{4,30})/(?<n>[a-zA-Z0-9_.\\-]+)(?::(?<v>.*))?");


    private String organization;
    private String name;
    private String version;

    public static DockerImage fromString(String s) {
        var m = imagePattern.matcher(s);
        if (!m.find()) {
            throw new MalformedDockerImageException("Impossible to read DockerImage from " + s);
        }
        String name = m.group(nameGroup);
        String organization = m.group(orgGroup);
        String version = m.group(versGroup);
        if (version == null || version.isEmpty()) {
            version = BundleUtilities.LATEST_VERSION;
        }

        return DockerImage.builder()
                .name(name)
                .organization(organization)
                .version(version)
                .build();
    }

    public String toString() {
        return String.format("%s/%s:%s", organization, name, version);
    }

    public static class MalformedDockerImageException extends RuntimeException {

        public MalformedDockerImageException(String s) {
            super(s);
        }
    }
}