Interface CommandResolver
-
- All Known Implementing Classes:
DefaultCommandResolver
public interface CommandResolver
Resolves special pages, JSPs and Commands on behalf of a Engine. CommandResolver will automatically resolve page names with singular/plural variants. It can also detect the correct Command based on parameters supplied in an HTTP request, or due to the JSP being accessed.
CommandResolver's static
findCommand(String)
method is the simplest method; it looks up and returns the Command matching a supplied wiki context. For example, looking up the request contextview
returnsPageCommand.VIEW
. Use this method to obtain static Command instances that aren't targeted at a particular page or group.For more complex lookups in which the caller supplies an HTTP request,
findCommand(HttpServletRequest, String)
will look up and return the correct Command. The String parameterdefaultContext
supplies the request context to use if it cannot be detected. However, note that the default wiki context may be overridden if the request was for a "special page."For example, suppose the Engine's properties specify a special page called
UserPrefs
that redirects toUserPreferences.jsp
. The ordinary lookup method findCommand(String) using a supplied contextview
would returnPageCommand.VIEW
. But the findCommand(HttpServletRequest, String) method, when passed the same context (view
) and an HTTP request containing the page parameter valueUserPrefs
, will instead returnWikiCommand.PREFS
.- Since:
- 2.4.22
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
PROP_SPECIALPAGE
Prefix in jspwiki.properties signifying special page keys.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Modifier and Type Method Description 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.static Command
findCommand(java.lang.String context)
Attempts to locate a wiki command for a supplied request context.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, ornull
, 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 returnsnull
.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 optionalversion
parameter passed in an HTTP request.
-
-
-
Field Detail
-
PROP_SPECIALPAGE
static final java.lang.String PROP_SPECIALPAGE
Prefix in jspwiki.properties signifying special page keys.- See Also:
- Constant Field Values
-
-
Method Detail
-
findCommand
static Command findCommand(java.lang.String context)
Attempts to locate a wiki command for a supplied request context. The resolution technique is simple: we examine the list of Commands returned byAllCommands.get()
and return the one whoserequestContext
matches the supplied context. If the supplied context does not resolve to a known Command, this method throws anIllegalArgumentException
.- Parameters:
context
- the request context- Returns:
- the resolved context
-
findCommand
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
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
resolvePage(HttpServletRequest, String)
for the resolution algorithm). Specifically, the Command will return a non-null
value for itsAbstractCommand.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.
- Parameters:
request
- the HTTP request; ifnull
, delegates tofindCommand(String)
defaultContext
- the request context to use by default- Returns:
- the resolved wiki command
-
getFinalPageName
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.
- Parameters:
page
- the page name.- Returns:
- The rewritten page name, or
null
, if the page does not exist. - Throws:
ProviderException
- if the underlyng page provider that locates pages throws an exception- Since:
- 2.4.20
-
getSpecialPageReference
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".
- Parameters:
page
- the page name ro search for- Returns:
- the URL of the special page, if the supplied page is one, or
null
-
extractPageFromParameter
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. This method attempts to determine the page requested by a user, taking into acccount special pages. The resolution algorithm will:- Extract the page name from the URL according to the rules for the current
URLConstructor
. If a page name was passed in the request, return the correct name after taking into account potential plural matches. - If the extracted page name is
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." - If neither of these methods work, this method returns
null
- Parameters:
requestContext
- the request contextrequest
- the HTTP request- Returns:
- the resolved page name
- Extract the page name from the URL according to the rules for the current
-
resolvePage
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 optionalversion
parameter passed in an HTTP request. If theversion
parameter does not exist in the request, the latest version is returned.- Parameters:
request
- the HTTP requestpage
- the name of the page to look up; this page must exist- Returns:
- the wiki page
-
-