Package org.apache.wiki

# Class WikiContext

java.lang.Object
org.apache.wiki.WikiContext

All Implemented Interfaces:
  `Cloneable`, `Command`, `Context`

public class WikiContext extends 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 by `getCurrentUser()` 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 final String`
`ADMIN`
User is doing administrative things.
`static final String`
`ATTACH`
User is downloading an attachment.
`static final String`
`COMMENT`
User is commenting something.
`static final String`
`CONFLICT`
User has an internal conflict, and does quite not know what to do.
`static final String`
`CREATE_GROUP`
User wishes to create a new group
`static final String`
`DELETE`
User is deleting a page or an attachment.
`static final String`
`DELETE_GROUP`
User is deleting an existing group.
`static final String`
`DIFF`
User is viewing a DIFF between the two versions of the page.
`static final String`
`EDIT`
The EDIT context - the user is editing the page.
`static final String`
`EDIT_GROUP`
User is editing an existing group.
`static final String`
`ERROR`
An error has been encountered and the user needs to be informed.
`static final String`
`FIND`
User is searching for content.
`static final String`
`INFO`
User is viewing page history.
`static final String`
`INSTALL`
User is administering JSPWiki (Install, SecurityConfig).
`static final String`
`LOGIN`
User is preparing for a login/authentication.
`static final String`
`LOGOUT`
User is preparing to log out.
`protected javax.servlet.http.HttpServletRequest`
`m_request`
Stores the HttpServletRequest.
`static final String`
`MESSAGE`
JSPWiki wants to display a message.
`static final String`
`NONE`
This is not a JSPWiki context, use it to access static files.
`static final String`
`OTHER`
Same as NONE; this is just a clarification.
`static final String`
`PREFS`
User is editing preferences
`static final String`
`PREVIEW`
User is previewing the changes he just made.
`static final String`
`RENAME`
User is renaming a page.
`static final String`
`RSS`
RSS feed is being generated.
`static final String`
`UPLOAD`
User is uploading something.
`static final String`
`VIEW`
The VIEW context - the user just wants to view the page contents.
`static final String`
`VIEW_GROUP`
User is viewing an existing group
`static final 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, 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

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.
use `Context.findContext(PageContext)` instead.
`boolean`
`getBooleanWikiProperty(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.
`String`
`getContentTemplate()`
`Principal`
`getCurrentUser()`
Convenience method that gets the current user.
`WikiEngine`
`getEngine()`
Returns the handling engine.
`String`
`getHttpParameter(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.
`String`
`getJSP()`
`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.
`String`
`getRedirectURL()`
Figure out to which page we are really going to.
`String`
`getRequestContext()`
Returns the request context.
`Object`
`getTarget()`
`String`
`getTemplate()`
Gets the template that is to be used throughout this request.
`String`
`getURL(String context, String page)`
Creates a URL for the given request context.
`String`
`getURL(String context, String page, String params)`
Returns a URL from a page.
`String`
`getURLPattern()`
`<T> T`
`getVariable(String key)`
Gets a previously set variable.
`String`
`getViewURL(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).
`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(String arg)`
Sets the request context.
`void`
`setTemplate(String dir)`
Sets the template to be used for this request.
`void`
`setVariable(String key, Object data)`
Sets a variable.
`Command`
`targetedCommand(Object target)`
Associates a target with the current Command and returns the new targeted Command.
`protected void`
`updateCommand(String requestContext)`
Protected method that updates the internally cached Command.

### Methods inherited from class java.lang.Object

`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### 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 String ADMIN
User is doing administrative things.

### ATTACH

public static final String ATTACH
User is downloading an attachment.

### COMMENT

public static final String COMMENT
User is commenting something.

### CONFLICT

public static final String CONFLICT
User has an internal conflict, and does quite not know what to do. Please provide some counseling.

### CREATE_GROUP

public static final String CREATE_GROUP
User wishes to create a new group

### DELETE

public static final String DELETE
User is deleting a page or an attachment.

### DELETE_GROUP

public static final String DELETE_GROUP
User is deleting an existing group.

### DIFF

public static final String DIFF
User is viewing a DIFF between the two versions of the page.

### EDIT

public static final String EDIT
The EDIT context - the user is editing the page.

### EDIT_GROUP

public static final String EDIT_GROUP
User is editing an existing group.

### ERROR

public static final String ERROR
An error has been encountered and the user needs to be informed.

### FIND

public static final String FIND
User is searching for content.

### INFO

public static final String INFO
User is viewing page history.

### INSTALL

public static final String INSTALL
User is administering JSPWiki (Install, SecurityConfig).

### LOGIN

public static final String LOGIN
User is preparing for a login/authentication.

### LOGOUT

public static final String LOGOUT
User is preparing to log out.

### MESSAGE

public static final String MESSAGE
JSPWiki wants to display a message.

### NONE

public static final String NONE
This is not a JSPWiki context, use it to access static files.

### OTHER

public static final String OTHER
Same as NONE; this is just a clarification.

### PREFS

public static final String PREFS
User is editing preferences

### PREVIEW

public static final String PREVIEW
User is previewing the changes he just made.

### RENAME

public static final String RENAME
User is renaming a page.

### RSS

public static final String RSS
RSS feed is being generated.

### UPLOAD

public static final String UPLOAD
User is uploading something.

### VIEW

public static final String VIEW
The VIEW context - the user just wants to view the page contents.

### VIEW_GROUP

public static final String VIEW_GROUP
User is viewing an existing group

### WORKFLOW

public static final String WORKFLOW
User wants to view or administer workflows.

## Constructor Details

### WikiContext

public WikiContext(Engine engine, Page page)
Create a new WikiContext for the given WikiPage. Delegates to `WikiContext(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 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 request
  `request` - The HttpServletRequest that should be associated with this context. This parameter may be `null`.
  `command` - the command
Throws:
  `IllegalArgumentException` - if `engine` or `command` are `null`

### 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 using `findCommand(Engine, HttpServletRequest, Page)` and delegates to `WikiContext(Engine, HttpServletRequest, Command)`.

Parameters:
  `engine` - The Engine that is handling the request
  `request` - The HttpServletRequest that should be associated with this context. This parameter may be `null`.
  `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, String requestContext)
Creates a new WikiContext from a supplied HTTP request, using a default wiki context.

Parameters:
  `engine` - The Engine that is handling the request
  `request` - the HTTP request
  `requestContext` - the default context to use
Since:
  2.1.15.
See Also:
  - `CommandResolver`
  - `Command`

## Method Details

### getContentTemplate

public String getContentTemplate()

Specified by:
  `getContentTemplate` in interface `Command`
See Also:
  - `Command.getContentTemplate()`

### getJSP

public String getJSP()

Specified by:
  `getJSP` in interface `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 interface `Context`
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 interface `Context`
Returns:
  A reference to the real page.
See Also:
  - `InsertPageTag`
  - `JSPWikiMarkupParser`

### getRedirectURL

public 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 to `CommandResolver.getSpecialPageReference(String)`.

Specified by:
  `getRedirectURL` in interface `Context`
Returns:
  A complete URL to the new page to redirect to
Since:
  2.2

### getEngine

public WikiEngine getEngine()
Returns the handling engine.

Specified by:
  `getEngine` in interface `Context`
Returns:
  The engine owning this context.

### getPage

public WikiPage getPage()
Returns the page that is being handled.

Specified by:
  `getPage` in interface `Context`
Returns:
  the page which was fetched.

### setPage

public void setPage(Page page)
Sets the page that is being handled.

Specified by:
  `setPage` in interface `Context`
Parameters:
  `page` - The wikipage
Since:
  2.1.37.

### getRequestContext

public String getRequestContext()
Returns the request context.

Specified by:
  `getRequestContext` in interface `Command`
Returns:
  The name of the request context (e.g. VIEW).

### setRequestContext

public void setRequestContext(String arg)
Sets the request context. See above for the different request contexts (VIEW, EDIT, etc.)

Specified by:
  `setRequestContext` in interface `Context`
Parameters:
  `arg` - The request context (one of the predefined contexts.)

### getTarget

public Object getTarget()

Specified by:
  `getTarget` in interface `Command`
See Also:
  - `Command.getTarget()`

### getURLPattern

public String getURLPattern()

Specified by:
  `getURLPattern` in interface `Command`
See Also:
  - `Command.getURLPattern()`

### getVariable

public <T> T getVariable(String key)
Gets a previously set variable.

Specified by:
  `getVariable` in interface `Context`
Parameters:
  `key` - The variable name.
Returns:
  The variable contents.

### setVariable

public void setVariable(String key, 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 interface `Context`
Parameters:
  `key` - The variable name.
  `data` - The variable value.

### getBooleanWikiProperty

public boolean getBooleanWikiProperty(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 interface `Context`
Parameters:
  `key` - What key are we searching for?
  `defValue` - Default value for the boolean
Returns:
  `true` or `false`.

### getHttpParameter

public String getHttpParameter(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 interface `Context`
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 interface `Context`
Returns:
  Null, if no HTTP request was done.
Since:
  2.0.13.

### setTemplate

public void setTemplate(String dir)
Sets the template to be used for this request.

Specified by:
  `setTemplate` in interface `Context`
Parameters:
  `dir` - The template name
Since:
  2.1.15.

### getName

public 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's `Command.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 calling `getPage().getName()`.

Specified by:
  `getName` in interface `Command`
Returns:
  the name of the target of this wiki context
See Also:
  - `PageCommand.getName()`
  - `GroupCommand.getName()`

### getTemplate

public String getTemplate()
Gets the template that is to be used throughout this request.

Specified by:
  `getTemplate` in interface `Context`
Returns:
  template name
Since:
  2.1.15.

### getCurrentUser

public 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 interface `Context`
Returns:
  The current user; or maybe null in case of internal calls.

### getViewURL

public String getViewURL(String page)
A shortcut to generate a VIEW url.

Specified by:
  `getViewURL` in interface `Context`
Parameters:
  `page` - The page to which to link.
Returns:
  A URL to the page. This honours the current absolute/relative setting.

### getURL

public String getURL(String context, String page)
Creates a URL for the given request context.

Specified by:
  `getURL` in interface `Context`
Parameters:
  `context` - e.g. WikiContext.EDIT
  `page` - The page to which to link
Returns:
  A URL to the page, honours the absolute/relative setting in jspwiki.properties

### getURL

public String getURL(String context, String page, 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.

Specified by:
  `getURL` in interface `Context`
Parameters:
  `context` - The request context (e.g. WikiContext.UPLOAD)
  `page` - The page to which to link
  `params` - A list of parameters, separated with "&"
Returns:
  A URL to the given context and page.

### getCommand

public Command getCommand()
Returns the Command associated with this WikiContext.

Specified by:
  `getCommand` in interface `Context`
Returns:
  the command

### clone

public WikiContext clone()
Returns a shallow clone of the WikiContext.

Specified by:
  `clone` in interface `Context`
Overrides:
  `clone` in class `Object`
Returns:
  A shallow clone of the WikiContext
Since:
  2.1.37.

### 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.

Specified by:
  `deepClone` in interface `Context`
Returns:
  A deep clone of the WikiContext.
Since:
  2.8.0

### 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 return `WikiSession.guestSession(Engine)`.

Specified by:
  `getWikiSession` in interface `Context`
Returns:
  The Session associated with this context.

### findContext

@Deprecated public static WikiContext findContext(javax.servlet.jsp.PageContext pageContext)
Deprecated.
use `Context.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 key `Context.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 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 interface `Command`
Returns:
  the permission
Since:
  2.4

### targetedCommand

public Command targetedCommand(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 interface `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 interface `Context`
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 is `ContextEnum.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 engine
  `request` - the HTTP request
  `page` - the wiki page
Returns:
  the correct command

### updateCommand

protected void updateCommand(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