Class DescriptiveURLs


  • public class DescriptiveURLs
    extends java.lang.Object
    Manages Descriptive URLs production and decoding.
    Since:
    jcms-5.7.0
    Author:
    Olivier Jaquemet
    • Constructor Summary

      Constructors 
      Constructor Description
      DescriptiveURLs()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String cleanDescriptiveURLText​(java.lang.String str, java.util.Locale locale)
      Clean the specified text for use in textual part of a descriptive URL.
      static java.lang.String getDescriptiveURL​(Data data, java.util.Locale locale)
      Retrieve an descriptive URL for the given Data in the given language.
      static java.lang.String getDescriptiveURLText​(Data data, java.util.Locale locale)
      Returns the textual part of a descriptive URL built for the given Data.
      static Category getFirstDescriptiveCategory​(Publication pub)
      Returns the first category of the given Publication belonging to one the root categories specified for descriptive urls.
      static java.lang.String getId​(java.lang.String path)
      Returns a Data id computed from the given requested path (servletPath + pathInfo).
      static java.lang.String getId​(javax.servlet.http.HttpServletRequest request)
      Returns a Data id computed from the URL of the requested url.
      static java.lang.String getLanguage​(java.lang.String path)
      Returns a ISO-639 language code extracted from the given requested path (servletPath + pathInfo).
      static java.lang.String getLanguage​(javax.servlet.http.HttpServletRequest request)
      Returns a ISO-639 language code computed from the URL of the specified request.
      static java.lang.String getServletPath()
      Returns the servlet path used for descriptive URL.
      static void init()
      Initialize or reinitialize Descriptive URLS.
      static boolean isEnabled()
      Check if descriptive URLs are enabled.
      static boolean isLanguagePartEnabled()
      Check if language part is enabled in descriptive URLs.
      static void removeURLCache​(Data data)
      Remove the cached Descriptive URL values for the given Data.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • FORCE_ORIGINAL_PORTAL

        public static final java.lang.String FORCE_ORIGINAL_PORTAL
        See Also:
        Constant Field Values
    • Constructor Detail

      • DescriptiveURLs

        public DescriptiveURLs()
    • Method Detail

      • init

        public static void init()
        Initialize or reinitialize Descriptive URLS. - read/reload properties. - initialize internal variable/caches. - initialize listener for cache management. - register ServletUtil hooks to provide custom behavior.
        Since:
        jcms-5.7.0
      • isEnabled

        public static boolean isEnabled()
        Check if descriptive URLs are enabled.
        Returns:
        true if enabled, false otherwise.
        Since:
        jcms-5.7.0
      • isLanguagePartEnabled

        public static boolean isLanguagePartEnabled()
        Check if language part is enabled in descriptive URLs.
        Returns:
        true if enabled, false otherwise.
        Since:
        jcms-8.0.3
      • getId

        public static java.lang.String getId​(javax.servlet.http.HttpServletRequest request)
        Returns a Data id computed from the URL of the requested url.
        Parameters:
        request - the request for which we want the id
        Returns:
        the Data's id extracted from the accessed path of the given request.
        Since:
        jcms-5.7.0
      • getId

        public static java.lang.String getId​(java.lang.String path)
        Returns a Data id computed from the given requested path (servletPath + pathInfo).
        Parameters:
        path - the requested path relative to the webapp. That is if an url is http://domain.tld+/contextPath+/servletPath+/pathInfo + ?querystring the requested path would be /servletPath/pathInfo (starting slash is optional)
        Returns:
        the Data's id extracted from the given path.
        Since:
        jcms-5.7.0
      • getLanguage

        public static java.lang.String getLanguage​(javax.servlet.http.HttpServletRequest request)
        Returns a ISO-639 language code computed from the URL of the specified request.
        Parameters:
        request - the request for which we want the language
        Returns:
        an ISO-639 language code extracted from the accessed path of the given request, or null if no valid value could be found.
        Since:
        jcms-7.1.0
      • getLanguage

        public static java.lang.String getLanguage​(java.lang.String path)
        Returns a ISO-639 language code extracted from the given requested path (servletPath + pathInfo).

        Returns only language configured in site (cf Channel.getLanguageList(), otherwise returns null.

        Parameters:
        path - the requested path relative to the webapp. That is if an url is http://domain.tld+/contextPath+/servletPath+/pathInfo + ?querystring the requested path would be /servletPath/pathInfo (starting slash is optional)
        Returns:
        the requested language extracted from the given path or null if no valid language could be found.
        Since:
        jcms-7.1.0
      • getServletPath

        public static java.lang.String getServletPath()
        Returns the servlet path used for descriptive URL.
        Returns:
        a path WITHOUT starting '/' and WITH traling '/', for example "jcms/".
        Since:
        jcms-5.7.0
      • getDescriptiveURL

        public static java.lang.String getDescriptiveURL​(Data data,
                                                         java.util.Locale locale)
        Retrieve an descriptive URL for the given Data in the given language. The returned descriptive URL will follow the following format : {prefix}/{id}[/text] where
        • {prefix} is the servlet mapping of the DisplayServlet
        • {id} is the id of the given Data
        • [/text] is an optional textual part retrieve from method getDescriptiveURLText(Data, Locale) if textual part has been enabled using property descriptive-urls.text.enabled
        Parameters:
        data - the Data for which create the URL (cannot be null)
        locale - the Locale to use for I18N and localized operations if null, the channel locale is used Channel.getLocale()
        Returns:
        a relative URL
        Throws:
        java.lang.IllegalArgumentException - if data is null
        Since:
        jcms-5.7.0
      • getDescriptiveURLText

        public static java.lang.String getDescriptiveURLText​(Data data,
                                                             java.util.Locale locale)
        Returns the textual part of a descriptive URL built for the given Data. As the textual part is optional, this method is called only when the property descriptive-urls.text.enabled is set to "true".
        Parameters:
        data - the Data for which the URL is built.
        locale - the Locale to use I18N and localized operation.
        Returns:
        the textual part of the descriptive URL.
        Since:
        jcms-5.7.0
      • getFirstDescriptiveCategory

        public static Category getFirstDescriptiveCategory​(Publication pub)
        Returns the first category of the given Publication belonging to one the root categories specified for descriptive urls.
        Parameters:
        pub - the publication for which we want the first Descriptive Category
        Returns:
        a Category or null if no category could be found
        Since:
        jcms-5.7.0
      • cleanDescriptiveURLText

        public static java.lang.String cleanDescriptiveURLText​(java.lang.String str,
                                                               java.util.Locale locale)
        Clean the specified text for use in textual part of a descriptive URL.

        Current implementation applies the following operation on the specified string :

        • unaccentuate
        • lowercase (using given Locale)
        • Replace characters as defined by regular expression in properties descriptive-urls.text.clean.{idx}-regex and its corresponding replacement pattern descriptive-urls.text.clean.{idx}-replace (where {idx} is a sequential number from 1).

          Default replacement :

          • replace whitespace and punctuation with dash character "-",
          • remove characters matching pattern [^0-9a-zA-Z/-],
          • remove multiple contiguous letters [/-]
          • limit length to 1024 characters
        Parameters:
        str - the string to clean
        locale - the Locale to use I18N and localized operation
        Returns:
        the converted string or null if the given string is null
        Since:
        jcms-5.7.0
      • removeURLCache

        public static void removeURLCache​(Data data)
        Remove the cached Descriptive URL values for the given Data.

        This method is automatically invoked during data update.

        Parameters:
        data - the Data for which descriptive URL have been modified and for which cache need to be removed
        Since:
        jcms-5.7.0