Class Url

java.lang.Object
io.inversion.utils.Url

public class Url extends Object
Utility class for parsing and working with HTTP(S) URLs.

Not for use with non HTTP(S) urls.

A number of different utility methods are provided to make it simple to find or remove different query string keys.

  • Field Details

    • original

      protected final String original
      The url string as supplied to the constructor, with 'http://localhost/' prepended if the constructor url arg did not contain a host
    • protocol

      protected String protocol
      The url protocol, either http or https
    • host

      protected String host
      The url host.
    • port

      protected int port
      The url port number if a custom port was provided
    • path

      protected Path path
      The part of the url after the host/port before the query string.
    • params

      protected JSNode params
      A case insensitive map of query string name/value pairs that preserves iteration order

      Implementation Node: paramsis not actually JSON, JSNode is used as the map implementation here simply because it is an affective case insensitive map that preserves the original key case key iteration order.

  • Constructor Details

    • Url

      public Url(String url)
      Parses url into its protocol, host, port, path and query string param parts.

      If url does not start with "http://" or "https://" then "http://localhost/" will be prepended.

      Parameters:
      url - url string
  • Method Details

    • toQueryString

      public static String toQueryString(Map params)
      Creates a UTF-8 url encoded query string, not including a leading "?" with key value pairs separated by a '&'
      Parameters:
      params - the key/value pairs to encode
      Returns:
      a UTF-8 url encoded query string
      See Also:
    • toString

      public String toString()
      Generates a string string representation of this url with any query string parameters URL encoded and port number included only if it differs from the standard protocol port.
      Overrides:
      toString in class Object
      Returns:
      the string representation of this url
    • equals

      public boolean equals(Object url)
      Checks url equality based on type and toString equality
      Overrides:
      equals in class Object
      Returns:
      true if url is a Url with a matching toString
    • getDomain

      public String getDomain()
    • getQueryString

      public String getQueryString()
      Generates a URL encode query string for params
      Returns:
      a URL encoded query string if params.size() is @gt; 0 else empty string
      See Also:
    • getQuery

      public String getQuery()
      Deprecated.
      replaced by getQueryString()
    • getHost

      public String getHost()
    • withHost

      public Url withHost(String host)
    • getPort

      public int getPort()
    • withPort

      public Url withPort(int port)
    • getProtocol

      public String getProtocol()
    • withProtocol

      public Url withProtocol(String protocol)
    • getPath

      public Path getPath()
    • withPath

      public Url withPath(Path path)
    • getFile

      public String getFile()
      Gets the last url path part if it exists
      Returns:
      path.last() if it exists otherwise null
    • withQueryString

      public Url withQueryString(String queryString)
      Parses queryString and replace params
      Parameters:
      queryString - query prams to add
      Returns:
      this
    • withParams

      public Url withParams(Map<String,String> newParams)
      Adds all key/value pairs from newParams to params overwriting any exiting keys on a case insensitive basis
      Parameters:
      newParams - name/value pairs to add to the query string params map
      Returns:
      this
    • withParam

      public Url withParam(String name, String value)
      Adds name/value to params overwriting any preexisting key/value pair on a key case insensitive basis.
      Parameters:
      name - the key to add or overwrite, may not be null
      value - the value, may be null
      Returns:
      this
    • withParams

      public Url withParams(String... nvpairs)
    • replaceParam

      public void replaceParam(String key, String value)
      Replaces any existing param that has key as a whole word case insensitive substring in its key.

      If the key/value pair "eq(dog,Fido)" = null is in the map replaceParam("DOG", "Fifi") would cause it to be removed and the pair "DOG" / "Fifi" would be added.

      Parameters:
      key - the key to add overwrite, may not be null, also used a a regex whole world case insensitive token to search for other keys to remove.
      value - the value, may be null
      See Also:
    • clearParams

      public String clearParams(String... tokens)
      Removes any param that has one of tokens as a whole word case insensitive substring in the key.
      Parameters:
      tokens - string tokens when found in a param key will cause them to be removed
      Returns:
      the first value found that contained any one of tokens
      See Also:
    • findKey

      public String findKey(String... tokens)
      Finds a key that has any one of tokens as a whole word case insensitive substring
      Parameters:
      tokens - substrings to search params.keySet() for
      Returns:
      the first param key that has anyone of tokens as a whole word case insensitive substring
    • findKeyValue

      public String findKeyValue(String... tokens)
      Finds the value associated with findKey(tokens)
      Parameters:
      tokens - substrings to search params.keySet() for
      Returns:
      the value for the first param key that has anyone of tokens as a whole word case insensitive substring
      See Also:
    • getParam

      public String getParam(String key)
      Gets the param value with key based on a case insensitive match.
      Parameters:
      key - the key to get
      Returns:
      the param value for key based on a case insensitive match.
    • getParams

      public Map<String,String> getParams()
      Returns:
      a new case insensitive order preserving map copy of params
    • getOriginal

      public String getOriginal()
      Returns:
      the url string used in constructing this Url.