com.thaiopensource.util.Uri Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trang Show documentation
Show all versions of trang Show documentation
Jing/Trang - tools for validating and translating RelaxNG
The newest version!
package com.thaiopensource.util;
import java.net.URI;
import java.net.URISyntaxException;
public class Uri {
/**
* Tests whether a string is a valid URI reference.
* @param s the String to be tested
* @return true is s is a valid URI reference, false otherwise
*/
public static boolean isValid(String s) {
try {
new URI(UriEncoder.encode(s));
}
catch (URISyntaxException e) {
return false;
}
return true;
}
public static String escapeDisallowedChars(String s) {
return UriEncoder.encodeAsAscii(s);
}
public static String resolve(String base, String uriReference) {
if (!isAbsolute(uriReference) && base != null && isAbsolute(base)) {
try {
URI baseURI = new URI(UriEncoder.encode(base));
return baseURI.resolve(new URI(UriEncoder.encode(uriReference))).toString();
}
catch (URISyntaxException e) {
// fall back to returning uriReference
}
}
return uriReference;
}
/**
* Tests whether a valid URI reference has a fragment identifier. It is allowed to pass an invalid URI reference,
* but the result is not defined.
* @param uri the URI reference to be tested, must not be null
* @return true if the URI reference has a fragment identifier, false otherwise
*/
public static boolean hasFragmentId(String uri) {
return uri.indexOf('#') >= 0;
}
/**
* Tests whether a valid URI reference is absolute. It is allowed to pass an invalid URI reference,
* but the result is not defined. It is also allowed to pass a valid URI with leading
* and trailing whitespace.
* @param uri the URI to be tested, must not be null
* @return true if the URI reference is absolute, false otherwise
*/
public static boolean isAbsolute(String uri) {
int i = uri.indexOf(':');
if (i < 0)
return false;
while (--i >= 0) {
switch (uri.charAt(i)) {
case '#':
case '/':
case '?':
return false;
}
}
return true;
}
}