package org.ovirt.engine.ui.uicommonweb.validation;
import java.util.HashSet;
import java.util.Set;
import org.ovirt.engine.ui.uicommonweb.Uri;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class UrlValidation implements IValidation {
private final Set<String> allowedSchemes = new HashSet<>();
public UrlValidation(String... allowedSchemes) {
if (allowedSchemes != null) {
for (String scheme : allowedSchemes) {
this.allowedSchemes.add(scheme.toLowerCase());
}
}
}
@Override
public ValidationResult validate(Object value) {
Uri uri = new Uri((String) value);
ValidationResult res = new ValidationResult();
if (!uri.isValid()) {
res.setSuccess(false);
res.getReasons().add(getUriMessage());
return res;
}
res = getHostValidation().validate(uri.getAuthority().getHost());
String scheme = uri.getScheme();
if (!allowedSchemes.contains(scheme)) {
res.setSuccess(false);
res.getReasons().add(getSchemeMessage(scheme));
}
return res;
}
protected String getUriMessage() {
return ConstantsManager.getInstance().getConstants().uriInvalidFormat();
}
protected String getSchemeMessage(String passedScheme) {
if (allowedSchemes.isEmpty()) {
return ConstantsManager.getInstance().getMessages().urlSchemeMustBeEmpty(passedScheme);
} else {
StringBuilder allowedSchemeList = new StringBuilder();
for (String scheme : allowedSchemes) {
allowedSchemeList.append("- ").append(scheme).append('\n'); // $NON-NLS-1$
}
return passedScheme.isEmpty() ? ConstantsManager.getInstance()
.getMessages()
.urlSchemeMustNotBeEmpty(allowedSchemeList.toString()) : ConstantsManager.getInstance()
.getMessages()
.urlSchemeInvalidScheme(passedScheme, allowedSchemeList.toString());
}
}
protected HostAddressValidation getHostValidation() {
return new UriHostAddressValidation();
}
}