Class CmsDefaultLinkSubstitutionHandler
- All Implemented Interfaces:
I_CmsLinkSubstitutionHandler
- Direct Known Subclasses:
CmsAdvancedLinkSubstitutionHandler
,CmsLocalePrefixLinkSubstitutionHandler
- Since:
- 7.0.2
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Request context attribute name to make the link substitution handler treat the link like an image link.static final String
Key for a request context attribute to control whether the getRootPath method uses the current site root for workplace requests.static final String
Prefix used for request context attributes to control whether a different site root should be used in appendServerPrefix. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaddVfsPrefix
(CmsObject cms, String vfsName, CmsSite targetSite, String parameters) Adds the VFS prefix to the VFS name and potentially adjusts request parametersprotected String
generateCacheKey
(CmsObject cms, String sourceSiteRoot, String targetSiteRoot, String detailPagePart, String absoluteLink) Generates the cache key for Online links.Returns the resource root path in the OpenCms VFS for the given link, ornull
in case the link points to an external site.Returns a link from the URI stored in the provided OpenCms user context to the VFS resource indicated by the givenlink
andsiteRoot
, for use on web pages.getRootPath
(CmsObject cms, String targetUri, String basePath) Returns the resource root path in the OpenCms VFS for the given target URI link, ornull
in case the link points to an external site.protected String
getRootPathForSite
(CmsObject cms, String path, String siteRoot, boolean isRootPath) Returns the root path for given site.protected String
getSimpleRootPath
(CmsObject cms, String targetUri, String basePath) Gets the root path without taking into account detail page links.protected boolean
isDetailPageLinkSecure
(CmsObject cms, String detailPage, CmsResource detailContent, CmsSite targetSite, boolean secureRequest) Checks whether a link to a detail page should be secure.protected boolean
isSecureLink
(CmsObject cms, String vfsName, CmsSite targetSite, boolean secureRequest) Checks if the link target is a secure link.<pprotected String
prepareExportParameters
(CmsObject cms, String vfsName, String parameters) Prepares the request parameters for the given resource.
-
Field Details
-
ATTR_IS_IMAGE_LINK
Request context attribute name to make the link substitution handler treat the link like an image link.- See Also:
-
DONT_USE_CURRENT_SITE_FOR_WORKPLACE_REQUESTS
Key for a request context attribute to control whether the getRootPath method uses the current site root for workplace requests. The getRootPath method clears this attribute when called.- See Also:
-
OVERRIDE_SITEROOT_PREFIX
Prefix used for request context attributes to control whether a different site root should be used in appendServerPrefix.- See Also:
-
-
Constructor Details
-
CmsDefaultLinkSubstitutionHandler
public CmsDefaultLinkSubstitutionHandler()
-
-
Method Details
-
getLink
Returns the resource root path in the OpenCms VFS for the given link, ornull
in case the link points to an external site.If the target URI contains no site information, but starts with the opencms context, the context is removed:
/opencms/opencms/system/further_path -> /system/further_path
If the target URI contains no site information, the path will be prefixed with the current site from the provided OpenCms user context:/folder/page.html -> /sites/mysite/folder/page.html
If the path of the target URI is relative, i.e. does not start with "/", the path will be prefixed with the current site and the given relative path, then normalized. If no relative path is given,null
is returned. If the normalized path is outsite a site, null is returned.page.html -> /sites/mysite/page.html ../page.html -> /sites/mysite/page.html ../../page.html -> null
If the target URI contains a scheme/server name that denotes an opencms site, it is replaced by the appropriate site path:http://www.mysite.de/folder/page.html -> /sites/mysite/folder/page.html
If the target URI contains a scheme/server name that does not match with any site, or if the URI is opaque or invalid,
null
is returned:http://www.elsewhere.com/page.html -> null mailto:someone@elsewhere.com -> null
- Specified by:
getLink
in interfaceI_CmsLinkSubstitutionHandler
- Parameters:
cms
- the current OpenCms user contextlink
- the link to process which is assumed to point to a VFS resource, with optional parameterssiteRoot
- the site root of thelink
forceSecure
- iftrue
generates always an absolute URL (with protocol and server name) for secure links- Returns:
- a link from the URI stored in the provided OpenCms user context
to the VFS resource indicated by the given
link
andsiteRoot
- See Also:
-
getLink
public String getLink(CmsObject cms, String link, String siteRoot, String targetDetailPage, boolean forceSecure) Description copied from interface:I_CmsLinkSubstitutionHandler
Returns a link from the URI stored in the provided OpenCms user context to the VFS resource indicated by the givenlink
andsiteRoot
, for use on web pages.The result should be an absolute link that contains the configured context path and servlet name, and in the case of the "online" project it will also be rewritten according to to the configured static export settings.
In case
link
is a relative URI, the current URI contained in the provided OpenCms user contextcms
is normally used to make the relativelink
absolute.The provided
siteRoot
is assumed to be the "home" of the link. In case the current site of the given OpenCms user contextcms
is different from the providedsiteRoot
, the full server prefix is appended to the result link.A server prefix is also added if
- the link is contained in a normal document and the link references a secure document
- the link is contained in a secure document and the link references a normal document
CmsDefaultLinkSubstitutionHandler
, which can be fully customized using this handler interface.- Specified by:
getLink
in interfaceI_CmsLinkSubstitutionHandler
- Parameters:
cms
- the current OpenCms user contextlink
- the link to process which is assumed to point to a VFS resource, with optional parameterssiteRoot
- the site root of thelink
targetDetailPage
- the target detail page, in case of linking to a specific detail pageforceSecure
- iftrue
generates always an absolute URL (with protocol and server name) for secure links- Returns:
- a link from the URI stored in the provided OpenCms user context
to the VFS resource indicated by the given
link
andsiteRoot
- See Also:
-
getRootPath
Description copied from interface:I_CmsLinkSubstitutionHandler
Returns the resource root path in the OpenCms VFS for the given target URI link, ornull
in case the link points to an external site.The default implementation applies the following transformations to the link:
- In case the link starts with a VFS prefix (for example
/opencms/opencms
, this prefix is removed from the result - In case the link is not a root path, the current site root is appended to the result.
- In case the link is relative, it will be made absolute using the given absolute
basePath
as starting point. - In case the link contains a server schema (for example
http://www.mysite.de/
), which points to a configured site in OpenCms, the server schema is replaced with the root path of the site. - In case the link points to an external site, or in case it is not a valid URI,
then
null
is returned.
CmsDefaultLinkSubstitutionHandler
, which can be fully customized using this handler interface.- Specified by:
getRootPath
in interfaceI_CmsLinkSubstitutionHandler
- Parameters:
cms
- the current users OpenCms contexttargetUri
- the target URI linkbasePath
- path to use as base in case the target URI is relative (can benull
)- Returns:
- the resource root path in the OpenCms VFS for the given target URI link, or
null
in case the link points to an external site - See Also:
- In case the link starts with a VFS prefix (for example
-
addVfsPrefix
protected CmsPair<String,String> addVfsPrefix(CmsObject cms, String vfsName, CmsSite targetSite, String parameters) Adds the VFS prefix to the VFS name and potentially adjusts request parametersThis method is required as a hook used in
CmsLocalePrefixLinkSubstitutionHandler
.- Parameters:
cms
- the cms contextvfsName
- the VFS nametargetSite
- the target siteparameters
- the request parameters- Returns:
- the path and the (adjusted) request parameters.
-
generateCacheKey
protected String generateCacheKey(CmsObject cms, String sourceSiteRoot, String targetSiteRoot, String detailPagePart, String absoluteLink) Generates the cache key for Online links.- Parameters:
cms
- the current CmsObjectsourceSiteRoot
- the source site root (where the content linked to is located)targetSiteRoot
- the target site rootdetailPagePart
- the detail page partabsoluteLink
- the absolute (site-relative) link to the resource- Returns:
- the cache key
-
getRootPathForSite
protected String getRootPathForSite(CmsObject cms, String path, String siteRoot, boolean isRootPath) Returns the root path for given site.This method is required as a hook used in
CmsLocalePrefixLinkSubstitutionHandler
.- Parameters:
cms
- the cms contextpath
- the pathsiteRoot
- the site root, will be null in case of the root siteisRootPath
- in case the path is already a root path- Returns:
- the root path
-
getSimpleRootPath
Gets the root path without taking into account detail page links.- Parameters:
cms
- - see the getRootPath() methodtargetUri
- - see the getRootPath() methodbasePath
- - see the getRootPath() method- Returns:
- - see the getRootPath() method
-
isDetailPageLinkSecure
protected boolean isDetailPageLinkSecure(CmsObject cms, String detailPage, CmsResource detailContent, CmsSite targetSite, boolean secureRequest) Checks whether a link to a detail page should be secure.- Parameters:
cms
- the current CMS contextdetailPage
- the detail page pathdetailContent
- the detail content resourcetargetSite
- the target site containing the detail pagesecureRequest
- true if the currently running request is secure- Returns:
- true if the link should be a secure link
-
isSecureLink
protected boolean isSecureLink(CmsObject cms, String vfsName, CmsSite targetSite, boolean secureRequest) Checks if the link target is a secure link.<p- Parameters:
cms
- the current CMS contextvfsName
- the path of the link targettargetSite
- the target site containing the detail pagesecureRequest
- true if the currently running request is secure- Returns:
- true if the link should be a secure link
-
prepareExportParameters
Prepares the request parameters for the given resource.This method is required as a hook used in
CmsLocalePrefixLinkSubstitutionHandler
.- Parameters:
cms
- the cms contextvfsName
- the vfs nameparameters
- the parameters to prepare- Returns:
- the root path
-