public class DefaultCommandResolver extends java.lang.Object implements CommandResolver
Default implementation for CommandResolver
PROP_SPECIALPAGE| Constructor and Description |
|---|
DefaultCommandResolver(Engine engine,
java.util.Properties properties)
Constructs a CommandResolver for a given Engine.
|
| Modifier and Type | Method and Description |
|---|---|
protected Command |
extractCommandFromPath(javax.servlet.http.HttpServletRequest request)
Extracts a Command based on the JSP path of an HTTP request.
|
java.lang.String |
extractPageFromParameter(java.lang.String requestContext,
javax.servlet.http.HttpServletRequest request)
Determines the correct wiki page based on a supplied request context and HTTP request.
|
Command |
findCommand(javax.servlet.http.HttpServletRequest request,
java.lang.String defaultContext)
Attempts to locate a Command for a supplied wiki context and HTTP request, incorporating the correct WikiPage into the command
if required.
|
java.lang.String |
getFinalPageName(java.lang.String page)
Returns the correct page name, or
null, if no such page can be found. |
java.lang.String |
getSpecialPageReference(java.lang.String page)
If the page is a special page, this method returns a direct URL to that page; otherwise, it returns
null. |
Page |
resolvePage(javax.servlet.http.HttpServletRequest request,
java.lang.String page)
Looks up and returns the correct, versioned WikiPage based on a supplied page name and optional
version parameter
passed in an HTTP request. |
protected boolean |
simplePageExists(java.lang.String page)
Determines whether a "page" exists by examining the list of special pages and querying the page manager.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitfindCommandpublic DefaultCommandResolver(Engine engine, java.util.Properties properties)
engine - the wiki engineproperties - the properties used to initialize the wikipublic Command findCommand(javax.servlet.http.HttpServletRequest request, java.lang.String defaultContext)
Attempts to locate a Command for a supplied wiki context and HTTP request, incorporating the correct WikiPage into the command
if required. This method will first determine what page the user requested by delegating to CommandResolver.extractPageFromParameter(String, HttpServletRequest).
If this page equates to a special page, we return the Command corresponding to that page. Otherwise, this method simply returns the
Command for the supplied request context.
The reason this method attempts to resolve against special pages is because some of them resolve to contexts that may be different from the one supplied. For example, a VIEW request context for the special page "UserPreferences" should return a PREFS context instead.
When the caller supplies a request context and HTTP request that specifies an actual wiki page (rather than a special page),
this method will return a "targeted" Command that includes the resolved WikiPage as the target. (See CommandResolver.resolvePage(HttpServletRequest, String)
for the resolution algorithm). Specifically, the Command will return a non-null value for
its AbstractCommand.getTarget() method.
Note: if this method determines that the Command is the VIEW PageCommand, then the Command returned will always be targeted to the front page.
findCommand in interface CommandResolverrequest - the HTTP request; if null, delegates to CommandResolver.findCommand(String)defaultContext - the request context to use by defaultpublic java.lang.String getFinalPageName(java.lang.String page) throws ProviderException
Returns the correct page name, or null, if no such page can be found. Aliases are considered.
In some cases, page names can refer to other pages. For example, when you have matchEnglishPlurals set, then a page name "Foobars" will be transformed into "Foobar", should a page "Foobars" not exist, but the page "Foobar" would. This method gives you the correct page name to refer to.
This facility can also be used to rewrite any page name, for example, by using aliases. It can also be used to check the existence of any page.
getFinalPageName in interface CommandResolverpage - the page name.null, if the page does not exist.ProviderException - if the underlyng page provider that locates pages throws an exceptionpublic java.lang.String getSpecialPageReference(java.lang.String page)
If the page is a special page, this method returns a direct URL to that page; otherwise, it returns null.
Special pages are non-existant references to other pages. For example, you could define a special page reference "RecentChanges" which would always be redirected to "RecentChanges.jsp" instead of trying to find a Wiki page called "RecentChanges".
getSpecialPageReference in interface CommandResolverpage - the page name ro search fornullprotected Command extractCommandFromPath(javax.servlet.http.HttpServletRequest request)
getJSP()
value, that Command is returned.request - the HTTP requestnull if not foundpublic java.lang.String extractPageFromParameter(java.lang.String requestContext, javax.servlet.http.HttpServletRequest request)
URLConstructor. If a
page name was passed in the request, return the correct name after taking into account potential plural matches.null, attempt to see if a "special page" was intended by examining the servlet path.
For example, the request path "/UserPreferences.jsp" will resolve to "UserPreferences."nullextractPageFromParameter in interface CommandResolverrequestContext - the request contextrequest - the HTTP requestpublic Page resolvePage(javax.servlet.http.HttpServletRequest request, java.lang.String page)
version parameter
passed in an HTTP request. If the version parameter does not exist in the request, the latest version is returned.resolvePage in interface CommandResolverrequest - the HTTP requestpage - the name of the page to look up; this page must existprotected boolean simplePageExists(java.lang.String page) throws ProviderException
page - the page to seektrue if the page exists, false otherwiseProviderException - if the underlyng page provider that locates pages
throws an exceptionCopyright (c) 2001-2022 The Apache Software Foundation. All rights reserved.