package org.arquillian.cube.docker.impl.client.config; public class Image { private String name; private String tag; public Image(String name, String tag) { this.name = name; this.tag = tag; } public static Image valueOf(String image) { String name = null; String tag = null; // <repositoryurl>:<port>/<organization_namespace>(/*)/<image_name>:<tag> String[] parts = image.split(":"); switch (parts.length) { case 1: { // <image_name> // <organization_namespace>(/*)/<image_name> // <repositoryurl>/<organization_namespace>(/*)/<image_name>[:<tag>] name = image; break; } case 2: { // <image_name>[:<tag>] // <organization_namespace>(/*)/<image_name>[:<tag>] // <repositoryurl>:<port>/<organization_namespace>(/*)/<image_name> if (isPort(parts[1])) { name = parts[0] + ":" + parts[1]; } else { name = parts[0]; tag = parts[1]; } break; } case 3: { // <repositoryurl>:<port>/<organization_namespace>(/*)/<image_name>:tag name = parts[0] + ":" + parts[1]; tag = parts[2]; break; } } return new Image(name, tag); } private static boolean isPort(String postColonPart) { return postColonPart.contains("/"); } public String getName() { return name; } public String getTag() { return tag; } public String toImageRef() { return toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((tag == null) ? 0 : tag.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } Image other = (Image) obj; if (name == null) { if (other.name != null) { return false; } } else if (!name.equals(other.name)) { return false; } if (tag == null) { if (other.tag != null) { return false; } } else if (!tag.equals(other.tag)) { return false; } return true; } @Override public String toString() { return name + (tag != null ? ":" + tag : ""); } }