Class URISupport


  • @Beta
    public final class URISupport
    extends Object
    Helper methods for building URIs and parsing some HTTP URL information.
    • Constructor Detail

      • URISupport

        private URISupport()
        Constructor.
    • Method Detail

      • setFragment

        public static URI setFragment​(URI prototype,
                                      String fragment)
        Sets the fragment of a URI.
        Parameters:
        prototype - prototype URI that provides information other than the fragment
        fragment - fragment for the new URI
        Returns:
        new URI built from the prototype URI and the given fragment
      • setHost

        public static URI setHost​(URI prototype,
                                  String host)
        Sets the host of a URI.
        Parameters:
        prototype - prototype URI that provides information other than the host
        host - host for the new URI
        Returns:
        new URI built from the prototype URI and the given host
      • setPath

        public static URI setPath​(URI prototype,
                                  String path)
        Sets the path of a URI.
        Parameters:
        prototype - prototype URI that provides information other than the path
        path - path for the new URI
        Returns:
        new URI built from the prototype URI and the given path
      • setPort

        public static URI setPort​(URI prototype,
                                  int port)
        Sets the port of a URI.
        Parameters:
        prototype - prototype URI that provides information other than the port
        port - port for the new URI
        Returns:
        new URI built from the prototype URI and the given port
      • setQuery

        public static URI setQuery​(URI prototype,
                                   String query)
        Sets the query of a URI.

        WARNING: If the supplied query parameter names and/or values contain '%' characters (for example because they are already Base64-encoded), then the approach of using URI instances to work with the URI/URL may not be appropriate. Per its documentation, the URI constructors always encode '%' characters, which can lead to cases of double-encoding. For an alternative way of manipulating URL's see URLBuilder.

        Parameters:
        prototype - prototype URI that provides information other than the query
        query - query for the new URI
        Returns:
        new URI built from the prototype URI and the given query
      • setQuery

        public static URI setQuery​(URI prototype,
                                   List<Pair<String,​String>> parameters)
        Sets the query of a URI.

        WARNING: If the supplied query parameter names and/or values contain '%' characters (for example because they are already Base64-encoded), then the approach of using URI instances to work with the URI/URL may not be appropriate. Per its documentation, the URI constructors always encode '%' characters, which can lead to cases of double-encoding. For an alternative way of manipulating URL's see URLBuilder.

        Parameters:
        prototype - prototype URI that provides information other than the query
        parameters - query parameters for the new URI
        Returns:
        new URI built from the prototype URI and the given query
      • setScheme

        public static URI setScheme​(URI prototype,
                                    String scheme)
        Sets the scheme of a URI.
        Parameters:
        prototype - prototype URI that provides information other than the scheme
        scheme - scheme for the new URI
        Returns:
        new URI built from the prototype URI and the given scheme
      • fileURIFromAbsolutePath

        public static URI fileURIFromAbsolutePath​(String path)
                                           throws URISyntaxException
        Create a file: URI from an absolute path, dealing with the Windows, non leading "/" issue.

        Windows absolute paths have a habit of starting with a "DosDeviceName" (such as C:\absolute\path if we blindly convert that to a file URI by prepending "file://", then we end up with a URI which has "C:" as the network segment. So if we need to have an absolute file path based URI (JAAS is the example) we call this method which hides the hideous implementation.

        Parameters:
        path - the absolute file path to convert
        Returns:
        a suitable URI
        Throws:
        URISyntaxException - if the URI contructor fails
      • buildQuery

        public static String buildQuery​(List<Pair<String,​String>> parameters)
        Builds an RFC-3968 encoded URL query component from a collection of parameters.
        Parameters:
        parameters - collection of parameters from which to build the URL query component, may be null or empty
        Returns:
        RFC-3968 encoded URL query or null if the parameter collection was null or empty
      • buildQueryMap

        @Nonnull
        public static Map<String,​String> buildQueryMap​(@Nullable
                                                             List<Pair<String,​String>> parameters)
        Builds a map from a collection of parameters.
        Parameters:
        parameters - collection of parameters from which to build the corresponding, may be null or empty
        Returns:
        a non-null map of query parameter name-> value. Keys will be non-null. Values may be null.
      • getRawQueryStringParameter

        @Nullable
        public static String getRawQueryStringParameter​(@Nullable
                                                        String queryString,
                                                        @Nullable
                                                        String paramName)
        Get the first raw (i.e.RFC-3968 encoded) query string component with the specified parameter name. This method assumes the common query string format of one or more 'paramName=paramValue' pairs separated by '&'. The component will be returned as a string in the form 'paramName=paramValue' (minus the quotes).
        Parameters:
        queryString - the URL encoded HTTP URL query string
        paramName - the URL decoded name of the parameter to find
        Returns:
        the found component, or null if query string or param name is null/empty or the parameter is not found
      • parseQueryString

        public static List<Pair<String,​String>> parseQueryString​(String queryString)
        Parses a RFC-3968 encoded query string in to a set of name/value pairs. This method assumes the common query string format of one or more 'paramName=paramValue' pairs separate by '&'. Both parameter names and values will be URL decoded. Parameters without values will be represented in the returned map as a key associated with the value null.
        Parameters:
        queryString - URL encoded query string
        Returns:
        the parameters from the query string, never null
      • trimOrNullPath

        public static String trimOrNullPath​(String path)
        Trims an RFC-3968 encoded URL path component. If the given path is null or empty then null is returned. If the given path ends with '?' then it is removed. If the given path ends with '#' then it is removed.
        Parameters:
        path - path to trim
        Returns:
        the trimmed path or null
      • trimOrNullQuery

        public static String trimOrNullQuery​(String query)
        Trims an RFC-3968 encoded URL query component. If the given query is null or empty then null is returned. If the given query starts with '?' then it is removed. If the given query ends with '#' then it is removed.
        Parameters:
        query - query to trim
        Returns:
        the trimmed query or null
      • trimOrNullFragment

        public static String trimOrNullFragment​(String fragment)
        Trims an RFC-3968 encoded URL fragment component. If the given fragment is null or empty then null is returned. If the given fragment starts with '#' then it is removed.
        Parameters:
        fragment - fragment to trim
        Returns:
        the trimmed fragment or null
      • doURLDecode

        public static String doURLDecode​(String value)
        Perform URL decoding on the given string.
        Parameters:
        value - the string to decode
        Returns:
        the decoded string
      • doURLEncode

        @Deprecated
        public static String doURLEncode​(String value)
        Deprecated.
        Perform URL encoding on the given string appropriate for form or query string parameters.

        This method is not appropriate for the encoding of data for other parts of a URL such as a path or fragment.

        Consider using Guava's UrlEscapers class for any future uses for this functionality.

        Parameters:
        value - the string to encode
        Returns:
        the encoded string