Interface Mount

All Known Subinterfaces:
ContextualizableMount, MutableMount

public interface Mount

A Mount object is the mount from a prefix to some (sub)site *or* content location: when the isMapped() property returns true or missing, the Mount is linked to a HstSite that uses a HstSiteMap. When isMapped() property returns false, the Mount won't use a URL mapping through the HstSiteMap

Mount is a Composite pattern: Each Mount can contain any descendant child Mount tree. A Mount 'lives' below a VirtualHost. The Mount directly below a VirtualHost must be called hst:root by definition. The hst:root Mount is where the Mount matching starts. Once a virtual host is matched for the incoming HttpServletRequest, we inspect the request path (the path after the context path and before the query string) and try to match the request path as deep as possible to the Mount tree: note that we try to map to the best matching Mount: This means, that 'exact' matching names have precedence over wildcard names

Thus, suppose we have the following Mount tree configuration:
    +127.0.0.1
       +hst:root
           - hst:mountpoint = /content/documents/myproject
           - hst:ismapped = true
           + subsite
              - hst:mountpoint = /content/documents/subsite
              - hst:ismapped = true
 

The configuration above means, that below the host 127.0.0.1 we have of course the mandatory Mount hst:root, and below it, we have a Mount subsite. Every request path that starts with /subsite will be mapped to 'subsite' Mount, all other request path's that do not start with '/subsite' resolve to the hst:root item. While the request path does match the next Mount descendant in the tree, the matching is continued to descendant Mount items. Thus, in the current example, the request path /subsite/home will return the Mount with name 'subsite'.

Also, you can configure some of the same properties the VirtualHost also has:
  • hst:port (long)
  • hst:showcontextpath (boolean)
  • hst:showport(boolean)
  • hst:scheme (string)

One extra is possible, hst:namedpipeline, see below for an example.

Just as with the virtual hosts, properties are inherited by child Mount items as long as they are not defined by themselves

Obviously, the above configuration might not be desirable in some circumstances, for example, when on a production host, you do not want a preview available at all. Configuration then for example could be:
    +www.mycompany.com
        +hst:root
           - hst:mountpoint = /content/documents/myproject
    +sub.mycompany.com
        +hst:root
           - hst:mountpoint = /content/documents/subsite
 
Optionally, wildcard matching support can be implemented, where the wilcards can be used within the property values. For example:

  • Field Details

    • PROPERTY_NAME_MOUNT_PREFIX

      static final String PROPERTY_NAME_MOUNT_PREFIX
      the predefined property name prefix to indicates mount aliases
      See Also:
    • LIVE_NAME

      static final String LIVE_NAME
      the string value that indicates 'live'
      See Also:
    • PREVIEW_NAME

      static final String PREVIEW_NAME
      the string value that indicates 'preview'
      See Also:
  • Method Details

    • getName

      String getName()
      Returns:
      The name of this Mount item
    • getAlias

      String getAlias()
      Returns the alias of this Mount item. The alias of a Mount must be unique in combination with every type getTypes() within a single host group, also see (VirtualHost.getHostGroupName()). When there is no alias defined on the Mount, null is returned. The Mount can then not be used to lookup by alias
      Returns:
      The alias of this Mount item or null when it does not have one
    • isMapped

      boolean isMapped()
      When this Mount is not using a HstSiteMap for the request processing, this method returns false. When it returns false, then getNamedPipeline() should also be configured, and a pipeline should be invoked that is independent of the ResolvedSiteMapItem as their won't be one.
    • getParent

      Mount getParent()
      Returns:
      the parent Mount of this Mount and null if we are at the root Mount
    • getMountPoint

      String getMountPoint()

      Returns the mount point for this Mount object. The mount point can be the absolute jcr path to the root site node, for example something like '/hst:hst/hst:sites/mysite', but it can also be some jcr path to some virtual or canonical node in the repository. For example it can be '/content/gallery' , which might be the case for a Mount suited for REST gallery calls.

      Returns:
      the mountPoint for this Mount and null if there is no mountPoint configured (nor inherited)
      See Also:
    • hasNoChannelInfo

      boolean hasNoChannelInfo()
      Returns:
      true when this Mount has no channel info. When a Mount doesn't have channel info, it won't show up in the channel manager.
    • getContentPath

      String getContentPath()

      Returns the content path for this Mount object. The content path is the absolute jcr path to the root site node content, for example something like '/content/documents/myproject'. The content path can be the same as getMountPoint(), but this is in general only for Mount's that have isMapped() returning false. When the Mount does have isMapped() equal to true, this method can return a different path than getMountPoint().

      Returns:
      the content path for this Mount. It will be null in case getMountPoint() returns null
    • getMountPath

      String getMountPath()

      Returns the mount path for this Mount object. The root Mount (mount with no parent mount) has an empty String ("") as mount path. A mountPath for a Mount that is not a root Mount is its own getName() plus all ancestors until the root and always starts with a "/" (except for the root, this one is empty). It can contain wildcards, for example /preview/*. Typically, these wildcards are replaced by their request specific values in the ResolvedMount.

      Note the difference with getMountPoint(): the getMountPoint() returns the jcr location of the (sub)site or of the content

      Returns:
      the mountPath for this Mount
      See Also:
    • getChildMounts

      List<Mount> getChildMounts()
      Returns:
      the unmodifiable List of all child Mounts and an empty List if there are no child Mounts
    • getChildMount

      Mount getChildMount(String name)
      Parameters:
      name - of the child Mount
      Returns:
      a Mount with getName() equal to name or null when there is no such item
    • getVirtualHost

      VirtualHost getVirtualHost()
      Returns:
      the virtualHost where this Mount belongs to
    • getHstSite

      HstSite getHstSite()
      Returns:
      the HstSite this Mount is pointing to or null when none found
    • isContextPathInUrl

      boolean isContextPathInUrl()
      Returns:
      true when the created url should have the contextpath in it
    • isPortInUrl

      boolean isPortInUrl()
      Returns:
      true when the created url should have contain the port number
    • getPort

      int getPort()
      Returns:
      the portnumber for this Mount
    • getContextPath

      String getContextPath()

      Returns the contextpath (webapp) for this Mount.

      Returns:
      the contextpath (webapp) for this Mount. The contextpath for the ROOT application must be an empty String. If non-empty, a path starting with a "/" character but that does not end with a "/" character must be returned. This method never returns null
    • getHomePage

      String getHomePage()
      Returns:
      the homepage for this Mount or null when not present
    • getPageNotFound

      String getPageNotFound()
      Returns:
      the pagenotfound for this Mount or null when not present
    • getScheme

      String getScheme()
      Returns:
      the scheme to use for creating external urls, for example http / https
    • getHstLinkUrlPrefix

      String getHstLinkUrlPrefix()

      Returns the 'Page Model API host' in case one is configured. In case non is configured, the one from the parent Mount is used and if no parent present, the one from VirtualHost.getHstLinkUrlPrefix() is used. If no valid configuration present, null is returned

      Returns:
      the baseURL for created link and null if not configured
    • isSchemeAgnostic

      boolean isSchemeAgnostic()
      If a Mount is scheme agnostic, the request gets served regardless whether it is http or https (assuming HstSiteMapItem does not override the value)
      Returns:
      true when this Mount is scheme agnostic
    • containsMultipleSchemes

      boolean containsMultipleSchemes()
      When this Mount has a HstSite attached to it that contains a HstSiteMap with HstSiteMapItem's that have multiple schemes (http/https) or that have a different scheme than the getScheme().
      Returns:
      true when this Mount can contain links with different schemes
    • getSchemeNotMatchingResponseCode

      int getSchemeNotMatchingResponseCode()

      the response code the HST sets when HttpServletRequest scheme does not match getScheme(). Default response code is HttpServletResponse.SC_MOVED_PERMANENTLY. The following response codes are supported and result in:

      1. 200 : no behavior, ignored
      2. 301 : when request has different scheme than getScheme(), permanent redirect to the correct scheme is done
      3. 302 | 303 | 307 : when request has different scheme than getScheme(), temporal redirect to the correct scheme is done
      4. 403 : when request has different scheme than getScheme(), a page forbidden is returned
      5. 404 : when request has different scheme than getScheme(), a page not found is returned

      Any other response code than above will result in inheriting the response code from parent Mount or VirtualHost

    • isPreview

      boolean isPreview()
      This method returns the same as isOfType(String type) with type="preview"
      Returns:
      true when this Mount is configured to be a preview Mount.
    • isOfType

      boolean isOfType(String type)
      When a this Mount is of type type this returns true. A Mount can be of multiple types at once.
      Parameters:
      type - the type to test
      Returns:
      true when this Mount is of type type
    • getType

      String getType()
      Returns:
      the primary type of this Mount
    • getTypes

      List<String> getTypes()
      Returns:
      the list of all types this Mount belongs to, including the primary type getType(). The primary type is the first item in the List
    • isVersionInPreviewHeader

      boolean isVersionInPreviewHeader()
      When this Mount has isPreview() return false, this method always returns false. When the Mount is preview, and the Mount is configured to have the hst version number in preview, then this method returns true
      Returns:
      true when for this Mount the current hst version should be added as a response header
    • getNamedPipeline

      String getNamedPipeline()
      Note that if an ancestor Mount contains a namedPipeline, this value is inherited unless this Mount explicitly defines its own
      Returns:
      the named pipeline to be used for this Mount or null when the default pipeline is to be used
    • isFinalPipeline

      boolean isFinalPipeline()

      Expert: when isFinalPipeline() returns true, it indicates that a matched HstSiteMapItem cannot override the configured pipeline. Typically this is useful in case for example the mount is configured to be some 'rest representation'. In that case, you do not want a site map item to configure a pipeline that doesn't render a rest representation at all. In general, for normal site development, isFinalPipeline() returns false.

      Note that final only applies to the site map items that might have a different explicitly configured pipeline which then gets ignored. If this Mount has a child Mount ,the child Mount can have a different pipeline value (and can be non-final)

      Returns:
      true indicates that a specific value for the named pipeline on a HstSiteMapItem is ignored
    • getLocale

      String getLocale()
      the locale for this Mount or null when it does not contain one. Note that if an ancestor Mount contains a locale, this value is inherited unless this Mount explicitly defines its own. The root Mount inherits the value from the VirtualHost if the virtual host contains a locale
      Returns:
      the locale for this Mount or null when it does not contain one.
    • getHstSiteMapMatcher

      HstSiteMapMatcher getHstSiteMapMatcher()
      This is a shortcut method fetching the HstSiteMapMatcher from the backing HstManager
      Returns:
      the HstSiteMapMatcher implementation
    • isAuthenticated

      boolean isAuthenticated()
      If this method returns true, then only if the user is explicitly allowed or servletRequest.isUserInRole(role) returns true this Mount is accessible for the request. If a Mount does not have a configuration for authenticated, the value from the parent item is taken.
      Returns:
      true if the Mount is authenticated.
    • getRoles

      Set<String> getRoles()
      Returns the roles that are allowed to access this Mount when isAuthenticated() is true. If the Mount does not have any roles defined by itself, it inherits them from the parent. If it defines roles, the roles from any ancestor are ignored. An empty set of roles in combination with isAuthenticated() return true means nobody has access to the item
      Returns:
      The set of roles that are allowed to access this Mount. When no roles defined, the roles from the parent item are inherited. If none of the parent items have a role defined, an empty set is returned
    • getUsers

      Set<String> getUsers()
      Returns the users that are allowed to access this Mount when isAuthenticated() is true. If the Mount does not have any users defined by itself, it inherits them from the parent. If it defines users, the users from any ancestor are ignored. An empty set of users in combination with isAuthenticated() return true means nobody has access to the item
      Returns:
      The set of users that are allowed to access this Mount. When no users defined, the users from the parent item are inherited. If none of the parent items have a user defined, an empty set is returned
    • isSubjectBasedSession

      boolean isSubjectBasedSession()
      Returns:
      Returns true if subject based jcr session should be used for this Mount
    • isSessionStateful

      boolean isSessionStateful()
      Returns:
      Returns true if subject based jcr session should be statefully managed.
    • getFormLoginPage

      String getFormLoginPage()
      Returns FORM Login Page
      Returns:
      the FORM Login Page and null if not configured
    • getProperty

      String getProperty(String name)
      the string value of the property or null when the property is not present. When the property value is not of type String, we'll return the Object.toString() value
      Parameters:
      name - the name of the property
      Returns:
      the value of the property or null when the property is not present
    • getPropertyNames

      List<String> getPropertyNames()
      Returns the unmodifiable List of all properties names and EMPTY list if no properties available. Through getProperty(String) the value of a property can be retrieved.
      Returns:
      the unmodifiable List of all properties names and EMPTY list if no properties available
    • getMountProperties

      Map<String,String> getMountProperties()

      Returns all the properties that start with "hst:mount" and have value of type String. This map has as key the propertyname after "hst:mount".

      Note The property called hst:mountpoint is excluded from this map, as it has a complete different purpose

      Returns:
      all the mount properties and an empty map if there where no mount properties
    • getParameter

      String getParameter(String name)
      The String value of the mount parameter.
      Parameters:
      name - the parameter name
      Returns:
      the parameter value, null if not present
    • getParameters

      Map<String,String> getParameters()
      Returns an unmodifiable map of all mount parameters, empty map if none.
      Returns:
      map of all mount parameters
    • getIdentifier

      String getIdentifier()
      Returns:
      the identifier of this Mount
    • getChannelInfo

      <T extends ChannelInfo> T getChannelInfo()
      Type Parameters:
      T - Type of the channel info. Only checked at runtime on assignment.
      Returns:
      A channel properties instance or null in case getChannel() returns null or when the ChannelInfo interface cannot be loaded by the current classLoader
    • getChannel

      Channel getChannel()
      Returns:
      The Channel object instance to which this Mount belongs, or null if this Mount does not contain a Channel or if this Mount belongs to a different webapp (contextPath) than the current webapp (contextPath)
    • getDefaultSiteMapItemHandlerIds

      String[] getDefaultSiteMapItemHandlerIds()
      Returns:
      the String[] of defaultSiteMapItemHandlerIds which all HstSiteMapItem's get or null if non configured
    • isCacheable

      boolean isCacheable()
      Returns:
      true if rendering / resource requests can have their entire page http responses cached.
    • getDefaultResourceBundleIds

      String[] getDefaultResourceBundleIds()
      Returns:
      default resource bundle IDs for all sites below this mount to use, for example, { "org.example.resources.MyResources" }. Returns an empty array when not configured on this Mount and empty from ancestor Mount or when root host from VirtualHost.getDefaultResourceBundleIds()
    • getResponseHeaders

      Map<String,String> getResponseHeaders()

      Return a non-null unmodifiable map of the configuration values of HTTP Response headers which should be set in any responses by the requests on this. They keys from the returned map are the header names.

      Note that the header names returned by this method overwrites any already set headers during request processing with the same name

      Returns:
      a non-null unmodifiable map of the configuration values of HTTP Response headers which should be set in any responses by the requests on this.
    • isExplicit

      boolean isExplicit()
      Returns:
      true if the configuration behind this Mount is explicitly configured. It returns false for Mount objects that are an implicit result, for example when the Mount is auto-created via Spring wiring. Note that auto created mounts that decorate or wrap an explicit mount might choose to return true for isExplicit(), thus true does not perse mean that the Mount instance is not a runtime created Mount or not.
    • getPageModelApi

      String getPageModelApi()
      if non-null, the name of the autocreated PMA child mount