limal::url::Url Class Reference

Url manipulation class. More...

#include <Url.hpp>

List of all members.

Public Types

typedef limal::url::EEncoding EEncoding
typedef limal::url::ViewOptions ViewOptions

Public Member Functions

 ~Url ()
 Url ()
 Url (const Url &url)
 Url (const limal::url::UrlRef &url)
 Url (const BLOCXX_NAMESPACE::String &urlString)
 Construct a Url object from percent-encoded URL string.
Urloperator= (const BLOCXX_NAMESPACE::String &urlString)
 Assigns parsed percent-encoded URL string to the object.
Urloperator= (const Url &url)
 Assign shared copy of url to the current object.
BLOCXX_NAMESPACE::StringArray getKnownSchemes () const
 Returns scheme names known to this object.
bool isValidScheme (const BLOCXX_NAMESPACE::String &scheme) const
 Verifies specified scheme name.
bool isValid () const
 Verifies the Url.
BLOCXX_NAMESPACE::String toString () const
BLOCXX_NAMESPACE::String toString (const ViewOptions &opts) const
BLOCXX_NAMESPACE::String toCompleteString () const
BLOCXX_NAMESPACE::String getScheme () const
BLOCXX_NAMESPACE::String getAuthority () const
BLOCXX_NAMESPACE::String getUsername (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getPassword (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getHost (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getPort () const
BLOCXX_NAMESPACE::String getPathData () const
BLOCXX_NAMESPACE::String getPathName (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getPathParams () const
BLOCXX_NAMESPACE::StringArray getPathParamsArray () const
limal::url::ParamMap getPathParamsMap (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getPathParam (const BLOCXX_NAMESPACE::String &param, EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getQueryString () const
BLOCXX_NAMESPACE::StringArray getQueryStringArray () const
limal::url::ParamMap getQueryStringMap (EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getQueryParam (const BLOCXX_NAMESPACE::String &param, EEncoding eflag=limal::url::E_DECODED) const
BLOCXX_NAMESPACE::String getFragment (EEncoding eflag=limal::url::E_DECODED) const
void setScheme (const BLOCXX_NAMESPACE::String &scheme)
 Set the scheme name in the URL.
void setAuthority (const BLOCXX_NAMESPACE::String &authority)
 Set the authority component in the URL.
void setUsername (const BLOCXX_NAMESPACE::String &user, EEncoding eflag=limal::url::E_DECODED)
 Set the username in the URL authority.
void setPassword (const BLOCXX_NAMESPACE::String &pass, EEncoding eflag=limal::url::E_DECODED)
 Set the password in the URL authority.
void setHost (const BLOCXX_NAMESPACE::String &host, EEncoding eflag=limal::url::E_DECODED)
 Set the hostname or IP in the URL authority.
void setPort (const BLOCXX_NAMESPACE::String &port)
 Set the port number in the URL authority.
void setPathData (const BLOCXX_NAMESPACE::String &pathdata)
 Set the path data component in the URL.
void setPathName (const BLOCXX_NAMESPACE::String &path, EEncoding eflag=limal::url::E_DECODED)
 Set the path name.
void setPathParams (const BLOCXX_NAMESPACE::String &params)
 Set the path parameters.
void setPathParamsArray (const BLOCXX_NAMESPACE::StringArray &parray)
 Set the path parameters.
void setPathParamsMap (const limal::url::ParamMap &pmap)
 Set the path parameters.
void setPathParam (const BLOCXX_NAMESPACE::String &param, const BLOCXX_NAMESPACE::String &value)
 Set or add value for the specified path parameter.
void setQueryString (const BLOCXX_NAMESPACE::String &querystr)
 Set the query string in the URL.
void setQueryStringArray (const BLOCXX_NAMESPACE::StringArray &qarray)
 Set the query parameters.
void setQueryStringMap (const limal::url::ParamMap &qmap)
 Set the query parameters.
void setQueryParam (const BLOCXX_NAMESPACE::String &param, const BLOCXX_NAMESPACE::String &value)
 Set or add value for the specified query parameter.
void setFragment (const BLOCXX_NAMESPACE::String &fragment, EEncoding eflag=limal::url::E_DECODED)
 Set the fragment string in the URL.
ViewOptions getViewOptions () const
void setViewOptions (const ViewOptions &vopts)

Static Public Member Functions

static url::UrlRef parseUrl (const BLOCXX_NAMESPACE::String &urlString)
 Parse a percent-encoded URL string.

Private Attributes

url::UrlRef m_impl

Friends

std::ostream & operator<< (std::ostream &os, const Url &url)

Detailed Description

Url manipulation class.

The generic URL (URI) syntax and its main components are defined in RFC3986 (http://rfc.net/rfc3986.html) Section 3, "Syntax Components". The scheme specific URL syntax and semantics is defined in the specification of the particular scheme. See also RFC1738 (http://rfc.net/rfc1738.html), that defines specific syntax for several URL schemes.

This class provides methods to access and manipulate generic and common scheme-specific URL components (or using the more general term, URI components). To consider the scheme-specifics of a URL, the Url class contains a reference object pointing to a UrlBase or derived object, that implements the scheme specifics.

Using the Url::registerScheme() method, it is possible to register a preconfigured or derived UrlBase object for a specific scheme name. The registered object will be cloned to handle all URL's containing the specified scheme name.

RFC3986, Syntax Components:

The generic URI syntax consists of a hierarchical sequence of components referred to as the scheme, authority, path, query, and fragment.

    URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

    hier-part   = "//" authority path-abempty
                / path-absolute
                / path-rootless
                / path-empty

The scheme and path components are required, though the path may be empty (no characters). When authority is present, the path must either be empty or begin with a slash ("/") character. When authority is not present, the path cannot begin with two slash characters ("//"). These restrictions result in five different ABNF rules for a path (Section 3.3), only one of which will match any given URI reference.

The following are two example URIs and their component parts:

      foo://example.com:8042/over/there?name=ferret#nose
      \_/   \______________/\_________/ \_________/ \__/
       |           |            |            |        |
    scheme     authority       path        query   fragment
       |   _____________________|__
      / \ /                        \
      urn:example:animal:ferret:nose

Member Typedef Documentation

Encoding flags.

View options.


Constructor & Destructor Documentation

limal::url::Url::~Url (  ) 
limal::url::Url::Url (  ) 
limal::url::Url::Url ( const Url url  ) 

Create a new Url object as shared copy of the given one.

Upon return, both objects will point to the same underlying object. This state will remain until one of the object is modified.

Parameters:
url The Url object to make a copy of.
Exceptions:
url::UrlException if copy fails (should not happen).
limal::url::Url::Url ( const limal::url::UrlRef url  ) 

Create a new Url object as shared copy of the given reference.

Upon return, both objects will point to the same underlying object. This state will remain until one of the object is modified.

Parameters:
url The URL implementation reference to make a copy of.
Exceptions:
url::UrlException if reference is empty.
limal::url::Url::Url ( const BLOCXX_NAMESPACE::String &  urlString  ) 

Construct a Url object from percent-encoded URL string.

Parses the urlString string using the parseUrl() method and assings the result to the new created object.

Parameters:
urlString A percent-encoded URL string.
Exceptions:
url::UrlParsingException if parsing of the url fails and may also contain an sub-exception - see parseUrl().

Member Function Documentation

BLOCXX_NAMESPACE ::String limal::url::Url::getAuthority (  )  const

Returns the encoded authority component of the URL.

The returned authority string does not contain the leading "//" separator characters, but just its "user:pass@host:port" content only.

Returns:
The encoded authority component string.
BLOCXX_NAMESPACE ::String limal::url::Url::getFragment ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns the encoded fragment component of the URL.

Parameters:
eflag Flag if the fragment should be percent-decoded or not.
Returns:
The encoded fragment component of the URL.
Exceptions:
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getHost ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns the hostname or IP from the URL authority.

In case the Url contains an IP number, it may be surrounded by "[" and "]" characters, for example "[::1]" for an IPv6 localhost address.

Parameters:
eflag Flag if the host should be percent-decoded or not.
Returns:
The host sub-component from the URL authority.
Exceptions:
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::StringArray limal::url::Url::getKnownSchemes (  )  const

Returns scheme names known to this object.

Returns:
An array with scheme names known by this object.
BLOCXX_NAMESPACE ::String limal::url::Url::getPassword ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns the password from the URL authority.

Parameters:
eflag Flag if the password should be percent-decoded or not.
Returns:
The password sub-component from the URL authority.
Exceptions:
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getPathData (  )  const

Returns the encoded path component of the URL.

The path data contains the path name, optionally followed by path parameters separated with a ";" character, for example "/foo/bar;version=1.1".

Returns:
The encoded path component of the URL.
BLOCXX_NAMESPACE ::String limal::url::Url::getPathName ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns the path name from the URL.

Parameters:
eflag Flag if the path should be decoded or not.
Returns:
The path name sub-component without path parameters from Path-Data component of the URL.
Exceptions:
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getPathParam ( const BLOCXX_NAMESPACE::String &  param,
EEncoding  eflag = limal::url::E_DECODED 
) const

Return the value for the specified path parameter.

For example, if the path parameters string is "foo=1,bar=2" the method will return the substring "1" for the param key "foo" and "2" for the param key "bar".

Parameters:
param The path parameter key.
eflag Flag if the path parameter keys and values should be decoded or not.
Returns:
The value for the path parameter key or empty string.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getPathParams (  )  const

Returns the path parameters from the URL.

Returns:
The encoded path parameters from the URL.
BLOCXX_NAMESPACE ::StringArray limal::url::Url::getPathParamsArray (  )  const

Returns an array with path parameter substrings.

The default path parameter separator is the ',' character. A schema specific object may overide the default separators.

For example, the path parameters string "foo=1,bar=2" is splited by default into an array containing the substrings "foo=1" and "bar=2".

Returns:
The path parameters splited into an array of substrings.
limal::url::ParamMap limal::url::Url::getPathParamsMap ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns a string map with path parameter keys and values.

The default path parameter separator is the ',' character, the default key/value separator for the path parameters is the '=' character. A schema specific object may overide the default separators.

For example, the path parameters string "foo=1,bar=2" is splited into a map containing "foo" = "1" and "bar" = "2" by default.

Parameters:
eflag Flag if the path parameter keys and values should be decoded or not.
Returns:
The path parameters key and values as a string map.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getPort (  )  const

Returns the port from the URL authority.

Returns:
The port sub-component from the URL authority.
BLOCXX_NAMESPACE ::String limal::url::Url::getQueryParam ( const BLOCXX_NAMESPACE::String &  param,
EEncoding  eflag = limal::url::E_DECODED 
) const

Return the value for the specified query parameter.

For example, if the query string is "foo=1,bar=2" the method will return the substring "1" for the param key "foo" and "2" for the param key "bar".

Parameters:
param The query parameter key.
eflag Flag if the query parameter keys and values should be decoded or not.
Returns:
The value for the query parameter key or empty string.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getQueryString (  )  const

Returns the encoded query string component of the URL.

The query string is returned without first "?" (separator) character. Further "?" characters as in e.g. LDAP URL's remains in the returned string.

Returns:
The encoded query string component of the URL.
BLOCXX_NAMESPACE ::StringArray limal::url::Url::getQueryStringArray (  )  const

Returns an array with query string parameter substrings.

The default query string parameter separator is the '&' character. A schema specific object may overide the default separators.

For example, the query string "foo=1&bar=2" is splited by default into an array containing the substrings "foo=1" and "bar=2".

Returns:
The query string splited into an array of substrings.
limal::url::ParamMap limal::url::Url::getQueryStringMap ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns a string map with query parameter and their values.

The default query string parameter separator is the ',' character, the default key/value separator the '=' character. A schema specific object may overide the default separators.

For example, the query string "foo=1&bar=2" is splited by default into a map containing "foo" = "1" and "bar" = "2".

Parameters:
eflag Flag if the query string keys and values should be decoded or not.
Returns:
The query string as a key/value string map.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
BLOCXX_NAMESPACE ::String limal::url::Url::getScheme (  )  const

Returns the scheme name of the URL.

Returns:
Scheme name of the current Url object.
BLOCXX_NAMESPACE ::String limal::url::Url::getUsername ( EEncoding  eflag = limal::url::E_DECODED  )  const

Returns the username from the URL authority.

Parameters:
eflag Flag if the usename should be percent-decoded or not.
Returns:
The username sub-component from the URL authority.
Exceptions:
url::UrlDecodingException if the decoded result string would contain a '\0' character.
ViewOptions limal::url::Url::getViewOptions (  )  const

Return the view options of the current object.

This method is used to query the view options used by the asString() method.

Returns:
The current view option combination.
bool limal::url::Url::isValid (  )  const

Verifies the Url.

Verifies if the current object contains a non-empty scheme name. Additional semantical URL checks may be performed by derived UrlBase objects.

Returns:
True, if the Url seems to be valid.
bool limal::url::Url::isValidScheme ( const BLOCXX_NAMESPACE::String &  scheme  )  const

Verifies specified scheme name.

Verifies the generic syntax of the specified scheme name and if it is contained in the current object's list of known schemes (see getKnownSchemes()) if the list is not empty.

The default implementation in the UrlBase class returns an emtpy list of known schemes, causing a check of the generic syntax only.

Returns:
True, if generic scheme name syntax is valid and the scheme name is known to the current object.
Url& limal::url::Url::operator= ( const Url url  ) 

Assign shared copy of url to the current object.

Upon return, both objects will point to the same underlying object. This state will remain until one of the object is modified.

Parameters:
url The Url object to make a copy of.
Returns:
A reference to this Url object.
Url& limal::url::Url::operator= ( const BLOCXX_NAMESPACE::String &  urlString  ) 

Assigns parsed percent-encoded URL string to the object.

Parses urlString string using the parseUrl() method and assigns the result to the current object.

Parameters:
urlString A percent-encoded URL string.
Returns:
A reference to this Url object.
Exceptions:
url::UrlParsingException if parsing of the url fails and may also contain an sub-exception - see parseUrl().
static url::UrlRef limal::url::Url::parseUrl ( const BLOCXX_NAMESPACE::String &  urlString  )  [static]

Parse a percent-encoded URL string.

Trys to parses the given string into generic URL components and created a clone of a scheme-specialized object or a new UrlBase object.

Parameters:
urlString A percent-encoded URL string.
Returns:
A reference to a (derived) UrlBase object or empty reference if the urlString string does not match the generic URL syntax.
Exceptions:
url::UrlParsingException if parsing of the url fails and may also contain an chained url sub-exception, e.g. url::UrlNotAllowedException, url::UrlBadComponentException, url::UrlNotSupportedException.
void limal::url::Url::setAuthority ( const BLOCXX_NAMESPACE::String &  authority  ) 

Set the authority component in the URL.

The authority string shoud contain the "user:pass@host:port" sub-components without any leading "//" separator characters.

Parameters:
authority The encoded authority component string.
Exceptions:
url::UrlNotAllowedException if the authority has to be empty in for the current scheme.
url::UrlBadComponentException if the authority contains an invalid character.
url::UrlParsingException if authority parsing fails.
void limal::url::Url::setFragment ( const BLOCXX_NAMESPACE::String &  fragment,
EEncoding  eflag = limal::url::E_DECODED 
)

Set the fragment string in the URL.

Parameters:
fragment The new fragment string.
eflag If the fragment is encoded or not.
Exceptions:
url::UrlBadComponentException if the fragment contains an invalid character.
void limal::url::Url::setHost ( const BLOCXX_NAMESPACE::String &  host,
EEncoding  eflag = limal::url::E_DECODED 
)

Set the hostname or IP in the URL authority.

The host parameter may contain a hostname, an IPv4 address in dotted-decimal form or an IPv6 address literal encapsulated within square brackets (RFC3513, Sect. 2.2).

A hostname may contain national alphanumeric UTF8 characters (letters other than ASCII a-z0-9), that will be encoded. This function allows to specify both, a encoded or decoded hostname.

Other IP literals in "[v ... ]" square bracket format are not supported by the implementation in UrlBase class.

Parameters:
host The new hostname or IP address.
Exceptions:
url::UrlNotAllowedException if the host (authority) has to be empty in for the current scheme.
url::UrlBadComponentException if the host is invalid.
void limal::url::Url::setPassword ( const BLOCXX_NAMESPACE::String &  pass,
EEncoding  eflag = limal::url::E_DECODED 
)

Set the password in the URL authority.

Parameters:
pass The new password.
eflag If the password is encoded or not.
Exceptions:
url::UrlNotAllowedException if the pass has to be empty in for the current scheme.
url::UrlBadComponentException if the pass contains an invalid character.
void limal::url::Url::setPathData ( const BLOCXX_NAMESPACE::String &  pathdata  ) 

Set the path data component in the URL.

By default, the pathdata string may include path parameters separated by the ";" separator character.

Parameters:
pathdata The encoded path data component string.
Exceptions:
url::UrlBadComponentException if the pathdata contains an invalid character.
void limal::url::Url::setPathName ( const BLOCXX_NAMESPACE::String &  path,
EEncoding  eflag = limal::url::E_DECODED 
)

Set the path name.

Parameters:
path The new path name.
eflag If the path name is encoded or not.
Exceptions:
url::UrlBadComponentException if the path name contains an invalid character.
void limal::url::Url::setPathParam ( const BLOCXX_NAMESPACE::String &  param,
const BLOCXX_NAMESPACE::String &  value 
)

Set or add value for the specified path parameter.

Parameters:
param The decoded path parameter name.
value The decoded path parameter value.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
void limal::url::Url::setPathParams ( const BLOCXX_NAMESPACE::String &  params  ) 

Set the path parameters.

Parameters:
params The new encoded path parameter string.
Exceptions:
url::UrlBadComponentException if the path params contains an invalid character.
void limal::url::Url::setPathParamsArray ( const BLOCXX_NAMESPACE::StringArray &  parray  ) 

Set the path parameters.

Parameters:
parray The array with encoded path parameters.
Exceptions:
url::UrlBadComponentException if the parray contains an invalid character.
void limal::url::Url::setPathParamsMap ( const limal::url::ParamMap pmap  ) 

Set the path parameters.

Parameters:
pmap The map with decoded path parameters.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
void limal::url::Url::setPort ( const BLOCXX_NAMESPACE::String &  port  ) 

Set the port number in the URL authority.

Parameters:
port The new port number.
Exceptions:
url::UrlNotAllowedException if the port (authority) has to be empty in for the current scheme.
url::UrlBadComponentException if the port is invalid.
void limal::url::Url::setQueryParam ( const BLOCXX_NAMESPACE::String &  param,
const BLOCXX_NAMESPACE::String &  value 
)

Set or add value for the specified query parameter.

Parameters:
param The decoded query parameter name.
value The decoded query parameter value.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
url::UrlDecodingException if the decoded result string would contain a '\0' character.
void limal::url::Url::setQueryString ( const BLOCXX_NAMESPACE::String &  querystr  ) 

Set the query string in the URL.

Parameters:
querystr The new encoded query string.
Exceptions:
url::UrlBadComponentException if the querystr contains an invalid character.
void limal::url::Url::setQueryStringArray ( const BLOCXX_NAMESPACE::StringArray &  qarray  ) 

Set the query parameters.

Parameters:
qarray The array with encoded query parameters.
Exceptions:
url::UrlBadComponentException if the qarray contains an invalid character.
void limal::url::Url::setQueryStringMap ( const limal::url::ParamMap qmap  ) 

Set the query parameters.

Parameters:
qmap The map with decoded query parameters.
Exceptions:
url::UrlNotSupportedException if parameter parsing is not supported for a URL (scheme).
void limal::url::Url::setScheme ( const BLOCXX_NAMESPACE::String &  scheme  ) 

Set the scheme name in the URL.

Parameters:
scheme The new scheme name.
Exceptions:
url::UrlBadComponentException if the scheme contains an invalid character or is empty.
void limal::url::Url::setUsername ( const BLOCXX_NAMESPACE::String &  user,
EEncoding  eflag = limal::url::E_DECODED 
)

Set the username in the URL authority.

Parameters:
user The new username.
eflag If the username is encoded or not.
Exceptions:
url::UrlNotAllowedException if the user has to be empty in for the current scheme
url::UrlBadComponentException if the user contains an invalid character.
void limal::url::Url::setViewOptions ( const ViewOptions vopts  ) 

Change the view options of the current object.

This method is used to change the view options used by the asString() method.

Parameters:
vopts New view options combination.
BLOCXX_NAMESPACE ::String limal::url::Url::toCompleteString (  )  const

Returns a complete string representation of the Url object.

This function ignores the configuration of the view options in the current object (see setViewOption()) and forces to return an string with all URL components included.

Returns:
A complete string representation of the Url object.
BLOCXX_NAMESPACE ::String limal::url::Url::toString ( const ViewOptions opts  )  const

Returns a string representation of the Url object.

To include a password in the resulting Url string, use:

    url.toString(url.getViewOptions() +
                 url::ViewOptions::WITH_PASSWORD);
Parameters:
opts A combination of view options.
Returns:
A string representation of the Url object.
BLOCXX_NAMESPACE ::String limal::url::Url::toString (  )  const

Returns a default string representation of the Url object.

By default, a password in the URL will be hidden.

Returns:
A default string representation of the Url object.

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const Url url 
) [friend]

Stream output operator.

Parameters:
os The output stream reference.
url The Url object.
The output stream reference.

Member Data Documentation


The documentation for this class was generated from the following file:
Generated on Mon Jul 5 22:01:31 2010 for limal by  doxygen 1.6.3