package org.eclipse.linuxtools.internal.docker.ui.wizards;
import java.util.regex.Matcher;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.linuxtools.internal.docker.core.DockerImage;
/**
* Validates that the image name matches
* [REGISTRY_HOST[:REGISTRY_PORT]/]IMAGE_NAME[:TAG]
*/
public class ImageNameValidator implements IValidator {
public static enum ImageNameStatus {
// status when image name is valid and complete
VALID,
// status when the image name is empty
EMPTY,
// status when the image name does not match the expected pattern
INVALID_FORMAT,
// status when the image name does not contain a tag
TAG_MISSING;
}
@Override
public IStatus validate(final Object value) {
final String imageName = (String) value;
final ImageNameStatus imageNameStatus = getStatus(imageName);
switch (imageNameStatus) {
case EMPTY:
return ValidationStatus
.cancel(WizardMessages.getString("ImagePull.desc")); //$NON-NLS-1$
case INVALID_FORMAT:
return ValidationStatus.warning(WizardMessages
.getString("ImagePull.name.invalidformat.msg")); //$NON-NLS-1$
case TAG_MISSING:
return ValidationStatus.warning(
WizardMessages.getString("ImagePull.assumeLatest.msg")); //$NON-NLS-1$
default:
return Status.OK_STATUS;
}
}
public static ImageNameStatus getStatus(final String imageName) {
if (imageName == null || imageName.isEmpty()) {
return ImageNameStatus.EMPTY;
}
final Matcher matcher = DockerImage.imageNamePattern.matcher(imageName);
if (!matcher.matches()) {
return ImageNameStatus.INVALID_FORMAT;
} else if (matcher.group("tag") == null) { //$NON-NLS-1$
return ImageNameStatus.TAG_MISSING;
}
return ImageNameStatus.VALID;
}
}