Class WikiContext
- java.lang.Object
-
- org.apache.wiki.WikiContext
-
public class WikiContext extends java.lang.Object implements Context, Command
Provides state information throughout the processing of a page. A WikiContext is born when the JSP pages that are the main entry points, are invoked. The JSPWiki engine creates the new WikiContext, which basically holds information about the page, the handling engine, and in which context (view, edit, etc) the call was done.
A WikiContext also provides request-specific variables, which can be used to communicate between plugins on the same page, or between different instances of the same plugin. A WikiContext variable is valid until the processing of the page has ended. For an example, please see the Counter plugin.
When a WikiContext is created, it automatically associates a
WikiSession
object with the user's HttpSession. The WikiSession contains information about the user's authentication status, and is consulted bygetCurrentUser()
object.Do not cache the page object that you get from the WikiContext; always use getPage()!
- See Also:
Counter
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ADMIN
User is doing administrative things.static java.lang.String
ATTACH
User is downloading an attachment.static java.lang.String
COMMENT
User is commenting something.static java.lang.String
CONFLICT
User has an internal conflict, and does quite not know what to do.static java.lang.String
CREATE_GROUP
User wishes to create a new groupstatic java.lang.String
DELETE
User is deleting a page or an attachment.static java.lang.String
DELETE_GROUP
User is deleting an existing group.static java.lang.String
DIFF
User is viewing a DIFF between the two versions of the page.static java.lang.String
EDIT
The EDIT context - the user is editing the page.static java.lang.String
EDIT_GROUP
User is editing an existing group.static java.lang.String
ERROR
An error has been encountered and the user needs to be informed.static java.lang.String
FIND
User is searching for content.static java.lang.String
INFO
User is viewing page history.static java.lang.String
INSTALL
User is administering JSPWiki (Install, SecurityConfig).static java.lang.String
LOGIN
User is preparing for a login/authentication.static java.lang.String
LOGOUT
User is preparing to log out.protected javax.servlet.http.HttpServletRequest
m_request
Stores the HttpServletRequest.static java.lang.String
MESSAGE
JSPWiki wants to display a message.static java.lang.String
NONE
This is not a JSPWiki context, use it to access static files.static java.lang.String
OTHER
Same as NONE; this is just a clarification.static java.lang.String
PREFS
User is editing preferencesstatic java.lang.String
PREVIEW
User is previewing the changes he just made.static java.lang.String
RENAME
User is renaming a page.static java.lang.String
RSS
RSS feed is being generated.static java.lang.String
UPLOAD
User is uploading something.static java.lang.String
VIEW
The VIEW context - the user just wants to view the page contents.static java.lang.String
VIEW_GROUP
User is viewing an existing groupstatic java.lang.String
WORKFLOW
User wants to view or administer workflows.-
Fields inherited from interface org.apache.wiki.api.core.Context
ATTR_CONTEXT, VAR_EXECUTE_PLUGINS, VAR_WYSIWYG_EDITOR_MODE
-
-
Constructor Summary
Constructors Constructor Description WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, java.lang.String requestContext)
Creates a new WikiContext from a supplied HTTP request, using a default wiki context.WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, Command command)
Creates a new WikiContext for the given Engine, Command and HttpServletRequest.WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, Page page)
Creates a new WikiContext for the given Engine, WikiPage and HttpServletRequest.WikiContext(Engine engine, Page page)
Create a new WikiContext for the given WikiPage.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description WikiContext
clone()
Returns a shallow clone of the WikiContext.WikiContext
deepClone()
Creates a deep clone of the WikiContext.protected static Command
findCommand(Engine engine, javax.servlet.http.HttpServletRequest request, Page page)
Looks up and returns a PageCommand based on a supplied WikiPage and HTTP request.static WikiContext
findContext(javax.servlet.jsp.PageContext pageContext)
Deprecated.useContext.findContext( PageContext )
instead.boolean
getBooleanWikiProperty(java.lang.String key, boolean defValue)
This is just a simple helper method which will first check the context if there is already an override in place, and if there is not, it will then check the given properties.Command
getCommand()
Returns the Command associated with this WikiContext.java.lang.String
getContentTemplate()
Returns the content template associated with a Command, such asPreferencesContent.jsp
.java.security.Principal
getCurrentUser()
Convenience method that gets the current user.WikiEngine
getEngine()
Returns the handling engine.java.lang.String
getHttpParameter(java.lang.String paramName)
This method will safely return any HTTP parameters that might have been defined.javax.servlet.http.HttpServletRequest
getHttpRequest()
If the request did originate from an HTTP request, then the HTTP request can be fetched here.java.lang.String
getJSP()
Returns the JSP associated with the Command.java.lang.String
getName()
Returns the target of this wiki context: a page, group name or JSP.WikiPage
getPage()
Returns the page that is being handled.WikiPage
getRealPage()
Gets a reference to the real page whose content is currently being rendered.java.lang.String
getRedirectURL()
Figure out to which page we are really going to.java.lang.String
getRequestContext()
Returns the request context.java.lang.Object
getTarget()
Returns the target associated with a Command, if it was created with one.java.lang.String
getTemplate()
Gets the template that is to be used throughout this request.java.lang.String
getURL(java.lang.String context, java.lang.String page)
Creates a URL for the given request context.java.lang.String
getURL(java.lang.String context, java.lang.String page, java.lang.String params)
Returns a URL from a page.java.lang.String
getURLPattern()
Returns the URL pattern associated with this Command.<T> T
getVariable(java.lang.String key)
Gets a previously set variable.java.lang.String
getViewURL(java.lang.String page)
A shortcut to generate a VIEW url.WikiSession
getWikiSession()
Returns the Session associated with the context.boolean
hasAdminPermissions()
Returns true, if the current user has administrative permissions (i.e. the omnipotent AllPermission).java.security.Permission
requiredPermission()
Returns the permission required to successfully execute this context.protected void
setDefaultTemplate(javax.servlet.http.HttpServletRequest request)
Figures out which template a new WikiContext should be using.void
setPage(Page page)
Sets the page that is being handled.WikiPage
setRealPage(Page page)
Sets a reference to the real page whose content is currently being rendered.void
setRequestContext(java.lang.String arg)
Sets the request context.void
setTemplate(java.lang.String dir)
Sets the template to be used for this request.void
setVariable(java.lang.String key, java.lang.Object data)
Sets a variable.Command
targetedCommand(java.lang.Object target)
Associates a target with the current Command and returns the new targeted Command.protected void
updateCommand(java.lang.String requestContext)
Protected method that updates the internally cached Command.
-
-
-
Field Detail
-
m_request
protected javax.servlet.http.HttpServletRequest m_request
Stores the HttpServletRequest. May be null, if the request did not come from a servlet.
-
ADMIN
public static final java.lang.String ADMIN
User is doing administrative things.
-
ATTACH
public static final java.lang.String ATTACH
User is downloading an attachment.
-
COMMENT
public static final java.lang.String COMMENT
User is commenting something.
-
CONFLICT
public static final java.lang.String CONFLICT
User has an internal conflict, and does quite not know what to do. Please provide some counseling.
-
CREATE_GROUP
public static final java.lang.String CREATE_GROUP
User wishes to create a new group
-
DELETE
public static final java.lang.String DELETE
User is deleting a page or an attachment.
-
DELETE_GROUP
public static final java.lang.String DELETE_GROUP
User is deleting an existing group.
-
DIFF
public static final java.lang.String DIFF
User is viewing a DIFF between the two versions of the page.
-
EDIT
public static final java.lang.String EDIT
The EDIT context - the user is editing the page.
-
EDIT_GROUP
public static final java.lang.String EDIT_GROUP
User is editing an existing group.
-
ERROR
public static final java.lang.String ERROR
An error has been encountered and the user needs to be informed.
-
FIND
public static final java.lang.String FIND
User is searching for content.
-
INFO
public static final java.lang.String INFO
User is viewing page history.
-
INSTALL
public static final java.lang.String INSTALL
User is administering JSPWiki (Install, SecurityConfig).
-
LOGIN
public static final java.lang.String LOGIN
User is preparing for a login/authentication.
-
LOGOUT
public static final java.lang.String LOGOUT
User is preparing to log out.
-
MESSAGE
public static final java.lang.String MESSAGE
JSPWiki wants to display a message.
-
NONE
public static final java.lang.String NONE
This is not a JSPWiki context, use it to access static files.
-
OTHER
public static final java.lang.String OTHER
Same as NONE; this is just a clarification.
-
PREFS
public static final java.lang.String PREFS
User is editing preferences
-
PREVIEW
public static final java.lang.String PREVIEW
User is previewing the changes he just made.
-
RENAME
public static final java.lang.String RENAME
User is renaming a page.
-
RSS
public static final java.lang.String RSS
RSS feed is being generated.
-
UPLOAD
public static final java.lang.String UPLOAD
User is uploading something.
-
VIEW
public static final java.lang.String VIEW
The VIEW context - the user just wants to view the page contents.
-
VIEW_GROUP
public static final java.lang.String VIEW_GROUP
User is viewing an existing group
-
WORKFLOW
public static final java.lang.String WORKFLOW
User wants to view or administer workflows.
-
-
Constructor Detail
-
WikiContext
public WikiContext(Engine engine, Page page)
Create a new WikiContext for the given WikiPage. Delegates toWikiContext(Engine, HttpServletRequest, Page)
.- Parameters:
engine
- The Engine that is handling the request.page
- The WikiPage. If you want to create a WikiContext for an older version of a page, you must use this constructor.
-
WikiContext
public WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, Command command) throws java.lang.IllegalArgumentException
Creates a new WikiContext for the given Engine, Command and HttpServletRequest.
This constructor will also look up the HttpSession associated with the request, and determine if a Session object is present. If not, a new one is created.
- Parameters:
engine
- The Engine that is handling the requestrequest
- The HttpServletRequest that should be associated with this context. This parameter may benull
.command
- the command- Throws:
java.lang.IllegalArgumentException
- ifengine
orcommand
arenull
-
WikiContext
public WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, Page page)
Creates a new WikiContext for the given Engine, WikiPage and HttpServletRequest. This method simply looks up the appropriate Command usingfindCommand(Engine, HttpServletRequest, Page)
and delegates toWikiContext(Engine, HttpServletRequest, Command)
.- Parameters:
engine
- The Engine that is handling the requestrequest
- The HttpServletRequest that should be associated with this context. This parameter may benull
.page
- The WikiPage. If you want to create a WikiContext for an older version of a page, you must supply this parameter
-
WikiContext
public WikiContext(Engine engine, javax.servlet.http.HttpServletRequest request, java.lang.String requestContext)
Creates a new WikiContext from a supplied HTTP request, using a default wiki context.- Parameters:
engine
- The Engine that is handling the requestrequest
- the HTTP requestrequestContext
- the default context to use- Since:
- 2.1.15.
- See Also:
CommandResolver
,Command
-
-
Method Detail
-
getContentTemplate
public java.lang.String getContentTemplate()
Returns the content template associated with a Command, such asPreferencesContent.jsp
. For Commands that are not page-related, this method will always returnnull
. Calling methods should always check to see if the result of this method isnull
.- Specified by:
getContentTemplate
in interfaceCommand
- Returns:
- the content template
- See Also:
Command.getContentTemplate()
-
getJSP
public java.lang.String getJSP()
Returns the JSP associated with the Command. The JSP is a "local" JSP within the JSPWiki webapp; it is not a general HTTP URL. If it exists, the JSP will be expressed relative to the webapp root, without a leading slash. This method is guaranteed to return a non-null
result, although in some cases the result may be an empty string.- Specified by:
getJSP
in interfaceCommand
- Returns:
- the JSP or url associated with the wiki command
- See Also:
Command.getJSP()
-
setRealPage
public WikiPage setRealPage(Page page)
Sets a reference to the real page whose content is currently being rendered.Sometimes you may want to render the page using some other page's context. In those cases, it is highly recommended that you set the setRealPage() to point at the real page you are rendering. Please see InsertPageTag for an example.
Also, if your plugin e.g. does some variable setting, be aware that if it is embedded in the LeftMenu or some other page added with InsertPageTag, you should consider what you want to do - do you wish to really reference the "master" page or the included page.
- Specified by:
setRealPage
in interfaceContext
- Parameters:
page
- The real page which is being rendered.- Returns:
- The previous real page
- Since:
- 2.3.14
- See Also:
InsertPageTag
-
getRealPage
public WikiPage getRealPage()
Gets a reference to the real page whose content is currently being rendered. If your plugin e.g. does some variable setting, be aware that if it is embedded in the LeftMenu or some other page added with InsertPageTag, you should consider what you want to do - do you wish to really reference the "master" page or the included page.For example, in the default template, there is a page called "LeftMenu". Whenever you access a page, e.g. "Main", the master page will be Main, and that's what the getPage() will return - regardless of whether your plugin resides on the LeftMenu or on the Main page. However, getRealPage() will return "LeftMenu".
- Specified by:
getRealPage
in interfaceContext
- Returns:
- A reference to the real page.
- See Also:
InsertPageTag
,JSPWikiMarkupParser
-
getRedirectURL
public java.lang.String getRedirectURL()
Figure out to which page we are really going to. Considers special page names from the jspwiki.properties, and possible aliases. This method forwards requests toCommandResolver.getSpecialPageReference(String)
.- Specified by:
getRedirectURL
in interfaceContext
- Returns:
- A complete URL to the new page to redirect to
- Since:
- 2.2
-
getEngine
public WikiEngine getEngine()
Returns the handling engine.
-
getRequestContext
public java.lang.String getRequestContext()
Returns the request context.- Specified by:
getRequestContext
in interfaceCommand
- Returns:
- The name of the request context (e.g. VIEW).
-
setRequestContext
public void setRequestContext(java.lang.String arg)
Sets the request context. See above for the different request contexts (VIEW, EDIT, etc.)- Specified by:
setRequestContext
in interfaceContext
- Parameters:
arg
- The request context (one of the predefined contexts.)
-
getTarget
public java.lang.Object getTarget()
Returns the target associated with a Command, if it was created with one. Commands created withCommand.targetedCommand(Object)
will always return a non-null
object. Calling methods should always check to see if the result of this method isnull
.- Specified by:
getTarget
in interfaceCommand
- Returns:
- the wiki page
- See Also:
Command.getTarget()
-
getURLPattern
public java.lang.String getURLPattern()
Returns the URL pattern associated with this Command. This method is guaranteed to return a non-null
String.- Specified by:
getURLPattern
in interfaceCommand
- Returns:
- the URL pattern
- See Also:
Command.getURLPattern()
-
getVariable
public <T> T getVariable(java.lang.String key)
Gets a previously set variable.- Specified by:
getVariable
in interfaceContext
- Parameters:
key
- The variable name.- Returns:
- The variable contents.
-
setVariable
public void setVariable(java.lang.String key, java.lang.Object data)
Sets a variable. The variable is valid while the WikiContext is valid, i.e. while page processing continues. The variable data is discarded once the page processing is finished.- Specified by:
setVariable
in interfaceContext
- Parameters:
key
- The variable name.data
- The variable value.
-
getBooleanWikiProperty
public boolean getBooleanWikiProperty(java.lang.String key, boolean defValue)
This is just a simple helper method which will first check the context if there is already an override in place, and if there is not, it will then check the given properties.- Specified by:
getBooleanWikiProperty
in interfaceContext
- Parameters:
key
- What key are we searching for?defValue
- Default value for the boolean- Returns:
true
orfalse
.
-
getHttpParameter
public java.lang.String getHttpParameter(java.lang.String paramName)
This method will safely return any HTTP parameters that might have been defined. You should use this method instead of peeking directly into the result of getHttpRequest(), since this method is smart enough to do all the right things, figure out UTF-8 encoded parameters, etc.- Specified by:
getHttpParameter
in interfaceContext
- Parameters:
paramName
- Parameter name to look for.- Returns:
- HTTP parameter, or null, if no such parameter existed.
- Since:
- 2.0.13.
-
getHttpRequest
public javax.servlet.http.HttpServletRequest getHttpRequest()
If the request did originate from an HTTP request, then the HTTP request can be fetched here. However, if the request did NOT originate from an HTTP request, then this method will return null, and YOU SHOULD CHECK FOR IT!- Specified by:
getHttpRequest
in interfaceContext
- Returns:
- Null, if no HTTP request was done.
- Since:
- 2.0.13.
-
setTemplate
public void setTemplate(java.lang.String dir)
Sets the template to be used for this request.- Specified by:
setTemplate
in interfaceContext
- Parameters:
dir
- The template name- Since:
- 2.1.15.
-
getName
public java.lang.String getName()
Returns the target of this wiki context: a page, group name or JSP. If the associated Command is a PageCommand, this method returns the page's name. Otherwise, this method delegates to the associated Command'sCommand.getName()
method. Calling classes can rely on the results of this method for looking up canonically-correct page or group names. Because it does not automatically assume that the wiki context is a PageCommand, calling this method is inherently safer than callinggetPage().getName()
.- Specified by:
getName
in interfaceCommand
- Returns:
- the name of the target of this wiki context
- See Also:
PageCommand.getName()
,GroupCommand.getName()
-
getTemplate
public java.lang.String getTemplate()
Gets the template that is to be used throughout this request.- Specified by:
getTemplate
in interfaceContext
- Returns:
- template name
- Since:
- 2.1.15.
-
getCurrentUser
public java.security.Principal getCurrentUser()
Convenience method that gets the current user. Delegates the lookup to the WikiSession associated with this WikiContect. May return null, in case the current user has not yet been determined; or this is an internal system. If the WikiSession has not been set, always returns null.- Specified by:
getCurrentUser
in interfaceContext
- Returns:
- The current user; or maybe null in case of internal calls.
-
getViewURL
public java.lang.String getViewURL(java.lang.String page)
A shortcut to generate a VIEW url.- Specified by:
getViewURL
in interfaceContext
- Parameters:
page
- The page to which to link.- Returns:
- A URL to the page. This honours the current absolute/relative setting.
-
getURL
public java.lang.String getURL(java.lang.String context, java.lang.String page)
Creates a URL for the given request context.
-
getURL
public java.lang.String getURL(java.lang.String context, java.lang.String page, java.lang.String params)
Returns a URL from a page. It this WikiContext instance was constructed with an actual HttpServletRequest, we will attempt to construct the URL using HttpUtil, which preserves the HTTPS portion if it was used.
-
getCommand
public Command getCommand()
Returns the Command associated with this WikiContext.- Specified by:
getCommand
in interfaceContext
- Returns:
- the command
-
clone
public WikiContext clone()
Returns a shallow clone of the WikiContext.
-
deepClone
public WikiContext deepClone()
Creates a deep clone of the WikiContext. This is useful when you want to be sure that you don't accidentally mess with page attributes, etc.
-
getWikiSession
public WikiSession getWikiSession()
Returns the Session associated with the context. This method is guaranteed to always return a valid Session. If this context was constructed without an associated HttpServletRequest, it will returnWikiSession.guestSession(Engine)
.- Specified by:
getWikiSession
in interfaceContext
- Returns:
- The Session associated with this context.
-
findContext
@Deprecated public static WikiContext findContext(javax.servlet.jsp.PageContext pageContext)
Deprecated.useContext.findContext( PageContext )
instead.This method can be used to find the WikiContext programmatically from a JSP PageContext. We check the request context. The wiki context, if it exists, is looked up using the keyContext.ATTR_CONTEXT
.- Parameters:
pageContext
- the JSP page context- Returns:
- Current WikiContext, or null, of no context exists.
- Since:
- 2.4
- See Also:
Context.findContext( PageContext )
-
requiredPermission
public java.security.Permission requiredPermission()
Returns the permission required to successfully execute this context. For example, a wiki context of VIEW for a certain page means that the PagePermission "view" is required for the page. In some cases, no particular permission is required, in which case a dummy permission will be returned (PropertyPermission
"os.name", "read"
). This method is guaranteed to always return a valid, non-null permission.- Specified by:
requiredPermission
in interfaceCommand
- Returns:
- the permission
- Since:
- 2.4
-
targetedCommand
public Command targetedCommand(java.lang.Object target)
Associates a target with the current Command and returns the new targeted Command. If the Command associated with this WikiContext is already "targeted", it is returned instead.- Specified by:
targetedCommand
in interfaceCommand
- Parameters:
target
- the object to combine, such as a GroupPrincipal or WikiPage- Returns:
- the new, targeted Command
- See Also:
Command.targetedCommand(java.lang.Object)
-
hasAdminPermissions
public boolean hasAdminPermissions()
Returns true, if the current user has administrative permissions (i.e. the omnipotent AllPermission).- Specified by:
hasAdminPermissions
in interfaceContext
- Returns:
- true, if the user has all permissions.
- Since:
- 2.4.46
-
setDefaultTemplate
protected void setDefaultTemplate(javax.servlet.http.HttpServletRequest request)
Figures out which template a new WikiContext should be using.- Parameters:
request
- the HTTP request
-
findCommand
protected static Command findCommand(Engine engine, javax.servlet.http.HttpServletRequest request, Page page)
Looks up and returns a PageCommand based on a supplied WikiPage and HTTP request. First, the appropriate Command is obtained by examining the HTTP request; the default isContextEnum.PAGE_VIEW
. If the Command is a PageCommand (and it should be, in most cases), a targeted Command is created using the (non-null
) WikiPage as target.- Parameters:
engine
- the wiki enginerequest
- the HTTP requestpage
- the wiki page- Returns:
- the correct command
-
updateCommand
protected void updateCommand(java.lang.String requestContext)
Protected method that updates the internally cached Command. Will always be called when the page name, request context, or variable changes.- Parameters:
requestContext
- the desired request context- Since:
- 2.4
-
-