org.apache.wiki
Class WikiContext

java.lang.Object
  extended by org.apache.wiki.WikiContext
All Implemented Interfaces:
Cloneable, Command

public class WikiContext
extends Object
implements Cloneable, 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
static String ADMIN
          User is doing administrative things.
static String ATTACH
          User is downloading an attachment.
static String COMMENT
          User is commenting something.
static String CONFLICT
          User has an internal conflict, and does quite not know what to do.
static String CREATE_GROUP
          User wishes to create a new group
static String DELETE
          User is deleting a page or an attachment.
static String DELETE_GROUP
          User is deleting an existing group.
static String DIFF
          User is viewing a DIFF between the two versions of the page.
static String EDIT
          The EDIT context - the user is editing the page.
static String EDIT_GROUP
          User is editing an existing group.
static String ERROR
          An error has been encountered and the user needs to be informed.
static String FIND
          User is searching for content.
static String INFO
          User is viewing page history.
static String INSTALL
          User is administering JSPWiki (Install, SecurityConfig).
static String LOGIN
          User is preparing for a login/authentication.
static String LOGOUT
          User is preparing to log out.
protected  javax.servlet.http.HttpServletRequest m_request
          Stores the HttpServletRequest.
static String MESSAGE
          JSPWiki wants to display a message.
static String NONE
          This is not a JSPWiki context, use it to access static files.
static String OTHER
          Same as NONE; this is just a clarification.
static String PREFS
          User is editing preferences
static String PREVIEW
          User is previewing the changes he just made.
static String RENAME
          User is renaming a page.
static String RSS
          RSS feed is being generated.
static String UPLOAD
          User is uploading something.
static String VIEW
          The VIEW context - the user just wants to view the page contents.
static String VIEW_GROUP
          User is viewing an existing group
static String WORKFLOW
          User wants to view or administer workflows.
 
Constructor Summary
WikiContext(WikiEngine engine, javax.servlet.http.HttpServletRequest request, Command command)
           Creates a new WikiContext for the given WikiEngine, Command and HttpServletRequest.
WikiContext(WikiEngine engine, javax.servlet.http.HttpServletRequest request, WikiPage page)
          Creates a new WikiContext for the given WikiEngine, WikiPage and HttpServletRequest.
WikiContext(WikiEngine engine, WikiPage page)
          Create a new WikiContext for the given WikiPage.
 
Method Summary
 Object clone()
          Returns a shallow clone of the WikiContext.
 WikiContext deepClone()
          Creates a deep clone of the WikiContext.
protected static Command findCommand(WikiEngine engine, javax.servlet.http.HttpServletRequest request, WikiPage page)
          Looks up and returns a PageCommand based on a supplied WikiPage and HTTP request.
static WikiContext findContext(javax.servlet.jsp.PageContext pageContext)
          This method can be used to find the WikiContext programmatically from a JSP PageContext.
 Command getCommand()
          Returns the Command associated with this WikiContext.
 String getContentTemplate()
          Returns the content template associated with a Command, such as PreferencesContent.jsp.
 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 a HTTP request, then the HTTP request can be fetched here.
 String getJSP()
          Returns the JSP associated with the Command.
 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()
          Returns the target associated with a Command, if it was created with one.
 String getTemplate()
          Gets the template that is to be used throughout this request.
 String getURL(String context, String page)
          Creates an URL for the given request context.
 String getURL(String context, String page, String params)
          Returns an URL from a page.
 String getURLPattern()
          Returns the URL pattern associated with this Command.
 Object getVariable(String key)
          Gets a previously set variable.
 String getViewURL(String page)
          A shortcut to generate a VIEW url.
 WikiSession getWikiSession()
          Returns the WikiSession 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(WikiPage page)
          Sets the page that is being handled.
 WikiPage setRealPage(WikiPage 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 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.


INSTALL

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


VIEW

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


WORKFLOW

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


EDIT

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


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.


DIFF

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


INFO

public static final String INFO
User is viewing page history.


PREVIEW

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


CONFLICT

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


ERROR

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


UPLOAD

public static final String UPLOAD
User is uploading something.


COMMENT

public static final String COMMENT
User is commenting something.


FIND

public static final String FIND
User is searching for content.


CREATE_GROUP

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


DELETE_GROUP

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


EDIT_GROUP

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


VIEW_GROUP

public static final String VIEW_GROUP
User is viewing an existing group


PREFS

public static final String PREFS
User is editing preferences


RENAME

public static final String RENAME
User is renaming a page.


DELETE

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


ATTACH

public static final String ATTACH
User is downloading an attachment.


RSS

public static final String RSS
RSS feed is being generated.


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.


ADMIN

public static final String ADMIN
User is doing administrative things.

Constructor Detail

WikiContext

public WikiContext(WikiEngine engine,
                   WikiPage page)
Create a new WikiContext for the given WikiPage. Delegates to WikiContext(WikiEngine, HttpServletRequest, WikiPage).

Parameters:
engine - The WikiEngine 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(WikiEngine engine,
                   javax.servlet.http.HttpServletRequest request,
                   Command command)
            throws IllegalArgumentException

Creates a new WikiContext for the given WikiEngine, Command and HttpServletRequest.

This constructor will also look up the HttpSession associated with the request, and determine if a WikiSession object is present. If not, a new one is created.

Parameters:
engine - The WikiEngine 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(WikiEngine engine,
                   javax.servlet.http.HttpServletRequest request,
                   WikiPage page)
Creates a new WikiContext for the given WikiEngine, WikiPage and HttpServletRequest. This method simply looks up the appropriate Command using findCommand(WikiEngine, HttpServletRequest, WikiPage) and delegates to WikiContext(WikiEngine, HttpServletRequest, Command).

Parameters:
engine - The WikiEngine 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
Method Detail

getContentTemplate

public String getContentTemplate()
Returns the content template associated with a Command, such as PreferencesContent.jsp. For Commands that are not page-related, this method will always return null. Calling methods should always check to see if the result of this method is null.

Specified by:
getContentTemplate in interface Command
Returns:
the content template
See Also:
Command.getContentTemplate()

getJSP

public 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 interface Command
Returns:
the JSP or url associated with the wiki command
See Also:
Command.getJSP()

setRealPage

public WikiPage setRealPage(WikiPage 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.

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

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

Returns:
A complete URL to the new page to redirect to
Since:
2.2

getEngine

public WikiEngine getEngine()
Returns the handling engine.

Returns:
The wikiengine owning this context.

getPage

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

Returns:
the page which was fetched.

setPage

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

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

Parameters:
arg - The request context (one of the predefined contexts.)

getTarget

public Object getTarget()
Returns the target associated with a Command, if it was created with one. Commands created with Command.targetedCommand(Object) will always return a non-null object. Calling methods should always check to see if the result of this method is null.

Specified by:
getTarget in interface Command
Returns:
the wiki page
See Also:
Command.getTarget()

getURLPattern

public String getURLPattern()
Returns the URL pattern associated with this Command. This method is guaranteed to return a non-null String.

Specified by:
getURLPattern in interface Command
Returns:
the URL pattern
See Also:
Command.getURLPattern()

getVariable

public Object getVariable(String key)
Gets a previously set variable.

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.

Parameters:
key - The variable name.
data - The variable value.

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 of the right things, figure out UTF-8 encoded parameters, etc.

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 a HTTP request, then the HTTP request can be fetched here. However, it the request did NOT originate from a HTTP request, then this method will return null, and YOU SHOULD CHECK FOR IT!

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.

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.

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.

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.

Parameters:
page - The page to which to link.
Returns:
An URL to the page. This honours the current absolute/relative setting.

getURL

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

Parameters:
context - e.g. WikiContext.EDIT
page - The page to which to link
Returns:
An URL to the page, honours the absolute/relative setting in jspwiki.properties

getURL

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

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

getCommand

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

Returns:
the command

clone

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

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.

Returns:
A deep clone of the WikiContext.
Since:
2.8.0

getWikiSession

public WikiSession getWikiSession()
Returns the WikiSession associated with the context. This method is guaranteed to always return a valid WikiSession. If this context was constructed without an associated HttpServletRequest, it will return WikiSession.guestSession(WikiEngine).

Returns:
The WikiSession associate with this context.

findContext

public static WikiContext findContext(javax.servlet.jsp.PageContext pageContext)
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 WikiTagBase.ATTR_CONTEXT.

Parameters:
pageContext - the JSP page context
Returns:
Current WikiContext, or null, of no context exists.
Since:
2.4

requiredPermission

public Permission requiredPermission()
Returns the permission required to successfully execute this context. For example, the 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
Parameters:
target - the object to combine, such as a GroupPrincipal or WikiPage
Returns:
the new, targeted Command
See Also:
{@inheritDoc}

hasAdminPermissions

public boolean hasAdminPermissions()
Returns true, if the current user has administrative permissions (i.e. the omnipotent AllPermission).

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(WikiEngine engine,
                                     javax.servlet.http.HttpServletRequest request,
                                     WikiPage 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 PageCommand.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


Copyright © {inceptionYear}-2014 The Apache Software Foundation. All rights reserved.