You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2008/12/08 06:07:42 UTC
svn commit: r724260 - in /incubator/jspwiki/trunk: ./ src/com/ecyrd/jspwiki/
src/com/ecyrd/jspwiki/action/ src/com/ecyrd/jspwiki/ui/stripes/
src/webdocs/ tests/com/ecyrd/jspwiki/action/
Author: ajaquith
Date: Sun Dec 7 21:07:42 2008
New Revision: 724260
URL: http://svn.apache.org/viewvc?rev=724260&view=rev
Log:
Improvements to JSPs and special page handling. JSPs are still not quite working yet, but the webapp does run, and without too many errors.
Modified:
incubator/jspwiki/trunk/ChangeLog
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiEngine.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AbstractPageActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AttachActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/CommentActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/DeleteActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ErrorActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/NoneActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/PageInfoActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/RenameActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ViewActionBean.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/WikiContextFactory.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/GroupTypeConverter.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/HandlerInfo.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiActionBeanContext.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java
incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiPageTypeConverter.java
incubator/jspwiki/trunk/src/webdocs/Wiki.jsp
incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java
incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java
Modified: incubator/jspwiki/trunk/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Sun Dec 7 21:07:42 2008
@@ -1,5 +1,11 @@
2008-12-06 Andrew Jaquith <ajaquith AT apache DOT org>
+ * 3.0.0-svn-27
+
+ * Improvements to JSPs and special page handling.
+
+2008-12-06 Andrew Jaquith <ajaquith AT apache DOT org>
+
* 3.0.0-svn-26
* Small tweaks to JspMigrator to look for, and fix, JSP page import directives
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/Release.java Sun Dec 7 21:07:42 2008
@@ -77,7 +77,7 @@
* <p>
* If the build identifier is empty, it is not added.
*/
- public static final String BUILD = "26";
+ public static final String BUILD = "27";
/**
* This is the generic version string you should use
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiEngine.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiEngine.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiEngine.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiEngine.java Sun Dec 7 21:07:42 2008
@@ -34,6 +34,8 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import net.sourceforge.stripes.action.RedirectResolution;
+
import org.apache.commons.lang.time.StopWatch;
import org.apache.jspwiki.api.FilterException;
import org.apache.jspwiki.api.WikiException;
@@ -1055,7 +1057,7 @@
* <p>If the page is a special page, then returns a direct URL
* to that page. Otherwise returns <code>null</code>.
* This method delegates requests to
- * {@link com.ecyrd.jspwiki.action.WikiContextFactory#getSpecialPageReference(String)}.
+ * {@link com.ecyrd.jspwiki.action.WikiContextFactory#getSpecialPageResolution(String)}.
* </p>
* <p>
* Special pages are defined in jspwiki.properties using the jspwiki.specialPage
@@ -1068,7 +1070,8 @@
*/
public String getSpecialPageReference( String original )
{
- return m_contextFactory.getSpecialPageReference( original );
+ RedirectResolution resolution = m_contextFactory.getSpecialPageResolution( original );
+ return resolution == null ? null : resolution.getUrl( Locale.getDefault() );
}
/**
@@ -1154,7 +1157,7 @@
try
{
- if( m_contextFactory.getSpecialPageReference(page) != null ) return true;
+ if( m_contextFactory.getSpecialPageResolution(page) != null ) return true;
if( getFinalPageName( page ) != null )
{
@@ -1183,7 +1186,7 @@
public boolean pageExists( String page, int version )
throws ProviderException
{
- if( m_contextFactory.getSpecialPageReference(page) != null ) return true;
+ if( m_contextFactory.getSpecialPageResolution(page) != null ) return true;
String finalName = getFinalPageName( page );
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AbstractPageActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AbstractPageActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AbstractPageActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AbstractPageActionBean.java Sun Dec 7 21:07:42 2008
@@ -6,17 +6,19 @@
/**
* Abstract WikiActionBean subclass used by all ActionBeans that use and process
- * WikiPages using the <code>page</code> request parameter. In particular, this
- * subclass contains special processing logic that sets the page property
- * of the underlying {@link WikiActionBeanContext} when the {@link #setPage(WikiPage)}
- * method is called by the Stripes controller.
+ * WikiPages using the <code>page</code> request parameter. In particular,
+ * this subclass contains special processing logic that sets the page property
+ * of the underlying {@link com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext}
+ * when the {@link #setPage(WikiPage)} method is called by the Stripes
+ * controller.
*/
public class AbstractPageActionBean extends AbstractActionBean
{
protected WikiPage m_page = null;
-
+
/**
* Returns the WikiPage; defaults to <code>null</code>.
+ *
* @return the page
*/
public WikiPage getPage()
@@ -25,17 +27,17 @@
}
/**
- * Sets the WikiPage property for this ActionBean, and also
- * sets the WikiActionBeanContext's page property to the same
- * value by calling
+ * Sets the WikiPage property for this ActionBean, and also sets the
+ * WikiActionBeanContext's page property to the same value by calling
* {@link com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext#setPage(WikiPage)}.
+ *
* @param page the wiki page.
*/
- @Validate( required = false)
+ @Validate( required = false )
public void setPage( WikiPage page )
{
m_page = page;
getContext().setPage( page );
}
-
+
}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AttachActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AttachActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AttachActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/AttachActionBean.java Sun Dec 7 21:07:42 2008
@@ -11,7 +11,7 @@
import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
@UrlBinding("/attach/{page}/{attachment}")
-public class AttachActionBean extends AbstractActionBean
+public class AttachActionBean extends AbstractPageActionBean
{
private Attachment m_attachment;
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/CommentActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/CommentActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/CommentActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/CommentActionBean.java Sun Dec 7 21:07:42 2008
@@ -9,7 +9,7 @@
import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
@UrlBinding("/Comment.jsp")
-public class CommentActionBean extends AbstractActionBean
+public class CommentActionBean extends AbstractPageActionBean
{
@HandlesEvent("comment")
@HandlerPermission(permissionClass=PagePermission.class, target="${page.name}", actions=PagePermission.COMMENT_ACTION)
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/DeleteActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/DeleteActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/DeleteActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/DeleteActionBean.java Sun Dec 7 21:07:42 2008
@@ -9,7 +9,7 @@
import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
@UrlBinding("/Delete.jsp")
-public class DeleteActionBean extends AbstractActionBean
+public class DeleteActionBean extends AbstractPageActionBean
{
@HandlesEvent("delete")
@HandlerPermission(permissionClass=PagePermission.class, target="${page.name}", actions=PagePermission.DELETE_ACTION)
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ErrorActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ErrorActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ErrorActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ErrorActionBean.java Sun Dec 7 21:07:42 2008
@@ -5,7 +5,7 @@
import net.sourceforge.stripes.action.*;
@UrlBinding("/Error.jsp")
-public class ErrorActionBean extends AbstractActionBean
+public class ErrorActionBean extends AbstractPageActionBean
{
/**
* Default event that forwards control to /Message.jsp.
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/NoneActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/NoneActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/NoneActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/NoneActionBean.java Sun Dec 7 21:07:42 2008
@@ -14,7 +14,7 @@
*
* @author Andrew Jaquith
*/
-public class NoneActionBean extends AbstractActionBean
+public class NoneActionBean extends AbstractPageActionBean
{
@DefaultHandler
@HandlesEvent( "none" )
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/PageInfoActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/PageInfoActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/PageInfoActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/PageInfoActionBean.java Sun Dec 7 21:07:42 2008
@@ -10,7 +10,7 @@
import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
@UrlBinding("/PageInfo.jsp")
-public class PageInfoActionBean extends AbstractActionBean
+public class PageInfoActionBean extends AbstractPageActionBean
{
@DefaultHandler
@HandlesEvent("info")
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/RenameActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/RenameActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/RenameActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/RenameActionBean.java Sun Dec 7 21:07:42 2008
@@ -52,7 +52,7 @@
* @author Andrew Jaquith
*/
@UrlBinding( "/Rename.action" )
-public class RenameActionBean extends AbstractActionBean
+public class RenameActionBean extends AbstractPageActionBean
{
private static final Logger log = LoggerFactory.getLogger( RenameActionBean.class );
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ViewActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ViewActionBean.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ViewActionBean.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/ViewActionBean.java Sun Dec 7 21:07:42 2008
@@ -42,7 +42,7 @@
* for one, or a "special page" reference. This method considers
* special page names from <code>jspwiki.properties</code>, and possible aliases.
* To determine whether the page is a special page, this method calls
- * {@link com.ecyrd.jspwiki.action.WikiContextFactory#getSpecialPageReference(String)}.
+ * {@link com.ecyrd.jspwiki.action.WikiContextFactory#getSpecialPageResolution(String)}.
* @return a {@link net.sourceforge.stripes.action.RedirectResolution} to the special
* page's real URL, if a special page was specified, or <code>null</code> otherwise
*/
@@ -53,17 +53,26 @@
ValidationErrors errors = this.getContext().getValidationErrors();
WikiEngine engine = getContext().getEngine();
- // If user supplied a page that doesn't exist, redirect to the "create pages" ActionBean
+ // The user supplied a page that doesn't exist
if ( errors.get("page" )!= null )
{
for (ValidationError pageParamError : errors.get("page"))
{
if ( "page".equals(pageParamError.getFieldName()) )
{
- String newPage = pageParamError.getFieldValue();
- log.info("User supplied page name '" + newPage + "' that doesn't exist; redirecting to create pages JSP." );
- RedirectResolution resolution = new RedirectResolution(NewPageActionBean.class);
- resolution.addParameter("page", newPage);
+ String pageName = pageParamError.getFieldValue();
+
+ // Is it a special page?
+ RedirectResolution resolution = getContext().getEngine().getWikiContextFactory().getSpecialPageResolution( pageName );
+ if ( resolution != null )
+ {
+ return resolution;
+ }
+
+ // Ok, it really doesn't exist. Send 'em to the "Create new page?" JSP
+ log.info("User supplied page name '" + pageName + "' that doesn't exist; redirecting to create pages JSP." );
+ resolution = new RedirectResolution(NewPageActionBean.class);
+ resolution.addParameter("page", pageName);
return resolution;
}
}
@@ -95,16 +104,8 @@
throw new WikiException("Page not supplied, and WikiEngine does not define a front page! This is highly unusual.") ;
}
- // Ok, the user supplied a page. That's nice. But is it a special page?
- String pageName = page.getName();
- String specialUrl = getContext().getEngine().getWikiContextFactory().getSpecialPageReference( pageName );
- if ( specialUrl != null )
- {
- return new RedirectResolution( getContext().getViewURL( specialUrl ) );
- }
-
// Is there an ALIAS attribute in the wiki pge?
- specialUrl = (String)page.getAttribute( WikiPage.ALIAS );
+ String specialUrl = (String)page.getAttribute( WikiPage.ALIAS );
if( specialUrl != null )
{
return new RedirectResolution( getContext().getViewURL( specialUrl ) );
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/WikiContextFactory.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/WikiContextFactory.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/WikiContextFactory.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/action/WikiContextFactory.java Sun Dec 7 21:07:42 2008
@@ -1,20 +1,22 @@
package com.ecyrd.jspwiki.action;
import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
-import org.apache.jspwiki.api.WikiException;
-
import net.sourceforge.stripes.action.RedirectResolution;
import net.sourceforge.stripes.mock.MockHttpServletRequest;
import net.sourceforge.stripes.mock.MockHttpServletResponse;
import net.sourceforge.stripes.mock.MockHttpSession;
import net.sourceforge.stripes.util.ResolverUtil;
+import org.apache.jspwiki.api.WikiException;
+
import com.ecyrd.jspwiki.*;
import com.ecyrd.jspwiki.auth.SessionMonitor;
import com.ecyrd.jspwiki.log.Logger;
@@ -278,27 +280,21 @@
/**
* <p>
- * If the page is a special page, this method returns a direct URL to that
- * page; otherwise, it returns <code>null</code>.
+ * If the page is a special page, this method returns a
+ * {@link net.sourceforge.stripes.action.RedirectResolution} for that page;
+ * otherwise, it returns <code>null</code>.
* </p>
* <p>
- * Special pages are non-existant references to other pages. For example,
+ * Special pages are non-existent 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".
* </p>
* TODO: fix this algorithm
*/
- public final String getSpecialPageReference( String page )
+ public final RedirectResolution getSpecialPageResolution( String page )
{
- RedirectResolution resolution = m_specialRedirects.get( page );
-
- if( resolution != null )
- {
- return resolution.getUrl( Locale.getDefault() );
- }
-
- return null;
+ return m_specialRedirects.get( page );
}
/**
@@ -450,7 +446,28 @@
if( specialPage != null && redirectUrl != null )
{
specialPage = specialPage.trim();
+
+ // Parse the special page
redirectUrl = redirectUrl.trim();
+ try
+ {
+ URI uri = new URI( redirectUrl );
+ if ( uri.getAuthority() == null )
+ {
+ // No http:// ftp:// or other authority, so it must be relative to webapp /
+ if ( !redirectUrl.startsWith( "/" ) )
+ {
+ redirectUrl = "/" + redirectUrl;
+ }
+ }
+ }
+ catch( URISyntaxException e )
+ {
+ // The user supplied a STRANGE reference
+ log.error( "Strange special page reference: " + redirectUrl );
+ }
+
+ // Add a new RedirectResolution for the special page
RedirectResolution resolution = m_specialRedirects.get( specialPage );
if( resolution == null )
{
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/GroupTypeConverter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/GroupTypeConverter.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/GroupTypeConverter.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/GroupTypeConverter.java Sun Dec 7 21:07:42 2008
@@ -49,7 +49,7 @@
* method will add a validation error to the supplied Collection of errors.
* The error will be of type
* {@link net.sourceforge.stripes.validation.LocalizableError} and will have
- * a message key of <code>pageNotFound</code> and a single parameter
+ * a message key of <code>group.doesnotexist</code> and a single parameter
* (equal to the value passed for <code>groupName</code>).
*
* @param groupName the name of the WikiPage to retrieve
@@ -70,7 +70,7 @@
}
catch( NoSuchPrincipalException e )
{
- errors.add( new LocalizableError( "groupNotFound", groupName ) );
+ errors.add( new LocalizableError( "group.doesnotexist", groupName ) );
}
return group;
}
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/HandlerInfo.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/HandlerInfo.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/HandlerInfo.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/HandlerInfo.java Sun Dec 7 21:07:42 2008
@@ -57,7 +57,10 @@
* {@link HandlerPermission} annotation to determine the correct Permission
* needed to execute the event (if supplied). Finally, attempts to determine
* the name of the wiki request context by looking for a
- * {@link WikiRequestContext} annotation.
+ * {@link WikiRequestContext} annotation. If the event handler method does
+ * not contain a WikiRequestContext annotation, a default wiki request
+ * context will be assigned, based on the ActionBean name plus "." plus the
+ * method name.
*
* @param beanClass the ActionBean implementation for which event
* information should be created
@@ -325,20 +328,36 @@
}
/**
- * Returns the Permission required to execute the method in the context of
- * the supplied WikiActionBean, based on its {@link HandlerPermission}
- * annotation. Any EL expressions found in the annotated target or actions
- * are evaluated. Note that this method returns <code>null</code> if no
- * Permission is required to execute this method, and
- * <em>callers should check for nulls</code>.
+ * <p>
+ * Returns a dynamic Permission based on the combination of the handler
+ * method's {@link HandlerPermission} annotation and a supplied object,
+ * which is evaluated to populate the Permission target and/or actions. The
+ * object supplied must be an object with standard bean property accessors
+ * and mutators (get/set methods). Any EL expressions found in the
+ * HandlerPermission's target or actions are evaluated against the object.
+ * Note that this method returns <code>null</code> if no HandlerPermission
+ * annotation was supplied for the handler method;
+ * <em>callers should check for nulls</em>.
+ * </p>
+ * <p>
+ * For example, suppose the HandlerPermission annotation for the
+ * <code>view()</code> handler method is
+ * </p>
+ * <blockquote><code>@HandlerPermission(permissionClass=PagePermission.class, target="${page.qualifiedName}", actions=PagePermission.VIEW_ACTION)</code></blockquote>
+ * <p>
+ * If <code>object</code> is a ViewActionBean whose <code>getPage()</code>
+ * property returns page "Main" in the wiki named "Default", the returned
+ * Permission will be:
+ * </p>
+ * <blockquote><code>PagePermission "Default:Main", "view"</code></blockquote>
*
- * @param actionBean the ActionBean that will be used as the base for any EL
+ * @param object the Object that will be used as the base for any EL
* expressions
* @return the resolved and instantiated Permission
* @throws ELException if EL expressions cannot be parsed, or of the
* Permission itself cannot be instantiated for any reason
*/
- public Permission getPermission( WikiActionBean actionBean ) throws ELException
+ public Permission getPermission( Object object ) throws ELException
{
if( m_permissionClass == null )
{
@@ -353,7 +372,7 @@
// Evaluate the target, if it's an expression
if( m_permissionTargetExpression != null )
{
- PropertyExpressionEvaluation evaluation = new PropertyExpressionEvaluation( m_permissionTargetExpression, actionBean );
+ PropertyExpressionEvaluation evaluation = new PropertyExpressionEvaluation( m_permissionTargetExpression, object );
target = (String) evaluation.getValue();
if( target == null )
{
@@ -367,7 +386,7 @@
// Evaluate the actions, if it's an expression
if( m_permissionActionExpression != null )
{
- PropertyExpressionEvaluation evaluation = new PropertyExpressionEvaluation( m_permissionActionExpression, actionBean );
+ PropertyExpressionEvaluation evaluation = new PropertyExpressionEvaluation( m_permissionActionExpression, object );
actions = (String) evaluation.getValue();
if( actions == null )
{
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiActionBeanContext.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiActionBeanContext.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiActionBeanContext.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiActionBeanContext.java Sun Dec 7 21:07:42 2008
@@ -86,8 +86,7 @@
}
/**
- * {@inheritDoc}. Also calls {@link DefaultWikiContext#setHttpRequest(HttpServletRequest)} on
- * the DefaultWikiContext delegate.
+ * {@inheritDoc}.
*/
@Override
public void setEventName( String eventName )
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java Sun Dec 7 21:07:42 2008
@@ -196,11 +196,18 @@
// Get the resolved ActionBean and event handler method
WikiActionBean actionBean = (WikiActionBean) context.getActionBean();
Method handler = context.getHandler();
+
+ // Make sure we set the WikiContext request context, while we're at it
+ Map<Method, HandlerInfo> eventinfos = HandlerInfo.getHandlerInfoCollection( actionBean.getClass() );
+ HandlerInfo eventInfo = eventinfos.get( handler );
+ if ( eventInfo != null )
+ {
+ String requestContext = eventInfo.getRequestContext();
+ actionBean.getContext().setRequestContext( requestContext );
+ }
// Does the event handler have a required permission?
boolean allowed = true;
- Map<Method, HandlerInfo> handlerInfos = HandlerInfo.getHandlerInfoCollection( actionBean.getClass() );
- HandlerInfo eventInfo = handlerInfos.get( handler );
if( eventInfo != null )
{
Permission requiredPermission = eventInfo.getPermission( actionBean );
Modified: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiPageTypeConverter.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiPageTypeConverter.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiPageTypeConverter.java (original)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/ui/stripes/WikiPageTypeConverter.java Sun Dec 7 21:07:42 2008
@@ -48,7 +48,7 @@
* exist), this method will add a validation error to the supplied
* Collection of errors and return <code>null</code>. The error will be
* of type {@link net.sourceforge.stripes.validation.LocalizableError} and
- * will have a message key of <code>pageNotFound</code> and a single
+ * will have a message key of <code>common.nopage</code> and a single
* parameter (equal to the value passed for <code>pageName</code>).
*
* @param pageName the name of the WikiPage to retrieve
@@ -69,7 +69,7 @@
String finalName = engine.getWikiContextFactory().getFinalPageName( pageName );
if( finalName == null || engine.getPage( finalName ) == null )
{
- errors.add( new LocalizableError( "pageNotFound", pageName ) );
+ errors.add( new LocalizableError( "common.nopage", pageName ) );
}
}
catch( ProviderException e )
Modified: incubator/jspwiki/trunk/src/webdocs/Wiki.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/webdocs/Wiki.jsp?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/webdocs/Wiki.jsp (original)
+++ incubator/jspwiki/trunk/src/webdocs/Wiki.jsp Sun Dec 7 21:07:42 2008
@@ -18,14 +18,6 @@
WikiContext wikiContext = WikiContextFactory.findContext( pageContext );
String pagereq = wikiContext.getPage().getName();
- // Redirect if the request was for a special page
- String redirect = wiki.getWikiContextFactory().getSpecialPageReference( pagereq );
- if( redirect != null )
- {
- response.sendRedirect( wikiContext.getViewURL( redirect ) );
- return;
- }
-
StopWatch sw = new StopWatch();
sw.start();
WatchDog w = wiki.getCurrentWatchDog();
Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java Sun Dec 7 21:07:42 2008
@@ -29,7 +29,7 @@
}
}
- public void testActionBean() throws Exception {
+ public void testView() throws Exception {
// Save page Main
m_engine.saveText("Test", "This is a test.");
WikiPage page = m_engine.getPage("Test");
@@ -48,7 +48,7 @@
assertEquals("/Wiki.action", trip.getDestination() );
}
- public void testActionBeanNoParameter() throws Exception {
+ public void testViewNoParameter() throws Exception {
// Save page Main
m_engine.saveText("Main", "This is the main page.");
WikiPage page = m_engine.getPage("Main");
@@ -67,6 +67,21 @@
assertEquals("/Wiki.action", trip.getDestination() );
}
+ public void testSpecialPage() throws Exception {
+
+ // Execute the request with a 'special page' reference
+ MockRoundtrip trip = m_engine.guestTrip( "/Wiki.action");
+ trip.addParameter( "page","FindPage" );
+ trip.execute("view");
+
+ // ...we should get a null for the 'page' property
+ ViewActionBean bean = trip.getActionBean(ViewActionBean.class);
+ assertEquals( null, bean.getPage() );
+
+ // ...and the destination should be Search.jsp
+ assertEquals("/Search.jsp", trip.getDestination() );
+ }
+
public static Test suite()
{
return new TestSuite( ViewActionBeanTest.class );
Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java?rev=724260&r1=724259&r2=724260&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java Sun Dec 7 21:07:42 2008
@@ -4,19 +4,24 @@
*/
package com.ecyrd.jspwiki.action;
+import java.util.Locale;
import java.util.Properties;
-import org.apache.jspwiki.api.WikiException;
-
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
+import net.sourceforge.stripes.action.RedirectResolution;
import net.sourceforge.stripes.mock.MockHttpServletRequest;
import net.sourceforge.stripes.mock.MockHttpServletResponse;
import net.sourceforge.stripes.mock.MockHttpSession;
import net.sourceforge.stripes.mock.MockRoundtrip;
-import com.ecyrd.jspwiki.*;
+import org.apache.jspwiki.api.WikiException;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiContext;
+import com.ecyrd.jspwiki.WikiEngine;
+import com.ecyrd.jspwiki.WikiPage;
public class WikiContextFactoryTest extends TestCase
{
@@ -153,16 +158,16 @@
public void testSpecialPageReference()
{
- String url;
- url = resolver.getSpecialPageReference( "RecentChanges" );
- assertEquals( "RecentChanges.jsp", url );
+ RedirectResolution r;
+ r = resolver.getSpecialPageResolution( "RecentChanges" );
+ assertEquals( "RecentChanges.jsp", r.getUrl( Locale.getDefault() ) );
- url = resolver.getSpecialPageReference( "FindPage" );
- assertEquals( "Search.jsp", url );
+ r = resolver.getSpecialPageResolution( "FindPage" );
+ assertEquals( "Search.jsp", r.getUrl( Locale.getDefault() ) );
// UserPrefs doesn't exist in our test properties
- url = resolver.getSpecialPageReference( "UserPrefs" );
- assertNull( url );
+ r = resolver.getSpecialPageResolution( "UserPrefs" );
+ assertNull( r.getUrl( Locale.getDefault() ) );
}
public static Test suite()