Author: ajaquith
Date: Mon Nov 2 03:45:48 2009
New Revision: 831797
URL: http://svn.apache.org/viewvc?rev=831797&view=rev
Log:
Fixed bug in ContentManager.pageExists() that caused tests for version 1 of
pages to fail if there had been no other versions saved yet. Shockingly, we had
never tested for this condition before. As a result, webapp page-viewing
actions now work again. Related: added versioning to ViewActionBean, which
hadn't been added previously because the versioning code hadn't stabilized
until recently.
Modified:
incubator/jspwiki/trunk/ChangeLog
incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java
incubator/jspwiki/trunk/src/java/org/apache/wiki/action/EditActionBean.java
incubator/jspwiki/trunk/src/java/org/apache/wiki/action/ViewActionBean.java
incubator/jspwiki/trunk/src/java/org/apache/wiki/content/ContentManager.java
incubator/jspwiki/trunk/tests/java/org/apache/wiki/action/ViewActionBeanTest.java
incubator/jspwiki/trunk/tests/java/org/apache/wiki/content/ContentManagerTest.java
Modified: incubator/jspwiki/trunk/ChangeLog
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/ChangeLog?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
--- incubator/jspwiki/trunk/ChangeLog (original)
+++ incubator/jspwiki/trunk/ChangeLog Mon Nov 2 03:45:48 2009
@@ -1,3 +1,15 @@
+2009-11-01 Andrew Jaquith <ajaquith AT apache DOT org>
+
+ * 3.0.0-svn-176
+
+ * Fixed bug in ContentManager.pageExists() that caused tests
+ for version 1 of pages to fail if there had been no other
+ versions saved yet. Shockingly, we had never tested for this
+ condition before. As a result, webapp page-viewing actions
+ now work again. Related: added versioning to ViewActionBean,
+ which hadn't been added previously because the versioning
+ code hadn't stabilized until recently.
+
2009-10-26 Janne Jalkanen <[email protected]>
* Priha 0.6.0, no other changes. This new version functions
Modified: incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java (original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/Release.java Mon Nov 2
03:45:48 2009
@@ -77,7 +77,7 @@
* <p>
* If the build identifier is empty, it is not added.
*/
- public static final String BUILD = "175";
+ public static final String BUILD = "176";
/**
* This is the generic version string you should use
Modified:
incubator/jspwiki/trunk/src/java/org/apache/wiki/action/EditActionBean.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/action/EditActionBean.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/action/EditActionBean.java
(original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/action/EditActionBean.java
Mon Nov 2 03:45:48 2009
@@ -468,7 +468,7 @@
+ m_author + ", Host=" +
getContext().getRequest().getRemoteAddr() );
// Set author information and other metadata
- WikiPage modifiedPage = (WikiPage) wikiContext.getPage().clone();
+ WikiPage modifiedPage = (WikiPage)page.clone();
modifiedPage.setAuthor( m_author );
if( m_changeNote != null )
{
Modified:
incubator/jspwiki/trunk/src/java/org/apache/wiki/action/ViewActionBean.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/action/ViewActionBean.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
--- incubator/jspwiki/trunk/src/java/org/apache/wiki/action/ViewActionBean.java
(original)
+++ incubator/jspwiki/trunk/src/java/org/apache/wiki/action/ViewActionBean.java
Mon Nov 2 03:45:48 2009
@@ -32,12 +32,15 @@
import net.sourceforge.stripes.validation.ValidationErrors;
import org.apache.wiki.WikiEngine;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.WikiException;
import org.apache.wiki.api.WikiPage;
import org.apache.wiki.auth.permissions.PagePermission;
+import org.apache.wiki.content.PageNotFoundException;
import org.apache.wiki.log.Logger;
import org.apache.wiki.log.LoggerFactory;
import org.apache.wiki.ui.stripes.HandlerPermission;
+import org.apache.wiki.ui.stripes.WikiActionBeanContext;
import org.apache.wiki.ui.stripes.WikiRequestContext;
/**
@@ -51,6 +54,8 @@
private String m_renameTo = null;
+ private int m_version = WikiProvider.LATEST_VERSION;
+
public ViewActionBean()
{
super();
@@ -81,6 +86,15 @@
}
/**
+ * Returns the version of the page.
+ * @return the version
+ */
+ public int getVersion()
+ {
+ return m_version;
+ }
+
+ /**
* Handler that forwards to the page information display JSP
* <code>/PageInfo.jsp</code>.
*
@@ -119,17 +133,18 @@
@After( stages = LifecycleStage.BindingAndValidation )
public Resolution resolvePage() throws WikiException
{
- WikiEngine engine = getContext().getEngine();
+ WikiActionBeanContext context = getContext();
+ WikiEngine engine = context.getEngine();
if( isSpecialPageView() )
{
// The page might be null because it's a special page
// WikiPageTypeConverter
// refused to convert. If so, redirect.
- String pageName = getContext().getRequest().getParameter( "page" );
+ String pageName = context.getRequest().getParameter( "page" );
if( pageName != null )
{
- URI uri = getContext().getEngine().getSpecialPageReference(
pageName );
+ URI uri = engine.getSpecialPageReference( pageName );
if( uri != null )
{
return new RedirectResolution( uri.toString() );
@@ -149,34 +164,49 @@
}
// If page still missing, it's an error condition
- if( getPage() == null )
+ WikiPage page = getPage();
+ if( page == null )
{
throw new WikiException( "Page not supplied, and WikiEngine does
not define a front page! This is highly unusual." );
}
// Is there an ALIAS attribute in the wiki page?
- String specialUrl = (String) getPage().getAttribute( WikiPage.ALIAS );
+ String specialUrl = (String) page.getAttribute( WikiPage.ALIAS );
if( specialUrl != null )
{
- return new RedirectResolution( getContext().getViewURL( specialUrl
) );
+ return new RedirectResolution( context.getViewURL( specialUrl ) );
}
// Is there a REDIRECT attribute in the wiki page?
- specialUrl = (String) getPage().getAttribute( WikiPage.REDIRECT );
+ specialUrl = (String) page.getAttribute( WikiPage.REDIRECT );
if( specialUrl != null )
{
- return new RedirectResolution( getContext().getViewURL( specialUrl
) );
+ return new RedirectResolution( context.getViewURL( specialUrl ) );
}
// Ok, the page exists. If attachment, make sure it's directed to the
// "info" handler
- WikiPage page = getPage();
- String handler = getContext().getEventName();
- if( getPage().isAttachment() && !"info".equals( handler ) )
+ String handler = context.getEventName();
+ if( page.isAttachment() && !"info".equals( handler ) )
{
return new RedirectResolution( ViewActionBean.class, "info"
).addParameter( "page", page.getPath().toString() );
}
+ // Now, retrieve the requested page or attachment version
+ if ( engine.pageExists( page.getPath().toString(), m_version ) )
+ {
+ try
+ {
+ page = engine.getPage( page.getPath().toString(), m_version );
+ setPage( page );
+ }
+ catch( PageNotFoundException e )
+ {
+ // Shouldn't happen!
+ throw new WikiException( "Did not retrieve the page even
though it exists. "
+ + " This is a BUG. ", e );
+ }
+ }
return null;
}
@@ -202,6 +232,16 @@
}
/**
+ * Sets the version of the page to show. If not set, defaults to
+ * {...@link WikiProvider#LATEST_VERSION}.
+ * @param version the version
+ */
+ public void setVersion( int version )
+ {
+ m_version = version;
+ }
+
+ /**
* Default handler that simply forwards the user back to the display JSP
* <code>/Wiki.jsp</code>. Every ActionBean needs a default handler to
* function properly, so we use this (very simple) one.
Modified:
incubator/jspwiki/trunk/src/java/org/apache/wiki/content/ContentManager.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/java/org/apache/wiki/content/ContentManager.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
---
incubator/jspwiki/trunk/src/java/org/apache/wiki/content/ContentManager.java
(original)
+++
incubator/jspwiki/trunk/src/java/org/apache/wiki/content/ContentManager.java
Mon Nov 2 03:45:48 2009
@@ -950,17 +950,33 @@
return false;
}
- if ( version == WikiProvider.LATEST_VERSION )
+ // Is Node's current version the one we want?
+ if ( node.hasProperty( JCRWikiPage.ATTR_VERSION ) )
+ {
+ Property versionProperty = node.getProperty(
JCRWikiPage.ATTR_VERSION );
+ try
+ {
+ if ( version == versionProperty.getLong() )
+ {
+ return true;
+ }
+ }
+ catch ( ValueFormatException e ) {
+ throw new ProviderException("Property " +
JCRWikiPage.ATTR_VERSION +
+ " for node " + jcrPath + "
cannot be " +
+ " coerced to a Long. This is
strange." );
+ }
+ }
+
+ boolean noVersions = !node.hasNode( WIKI_VERSIONS );
+ if ( version == WikiProvider.LATEST_VERSION || noVersions )
{
return !isNew( node );
}
String v = Integer.toString( version );
- if ( node.hasNode( WIKI_VERSIONS ) )
- {
- Node versions = node.getNode( WIKI_VERSIONS );
- return versions.hasNode( v ) && !isNew( versions.getNode( v )
);
- }
+ Node versions = node.getNode( WIKI_VERSIONS );
+ return versions.hasNode( v ) && !isNew( versions.getNode( v ) );
}
catch ( PathNotFoundException e )
{
@@ -971,7 +987,6 @@
{
throw new ProviderException( "Unable to check for page existence",
e );
}
- return false;
}
/**
Modified:
incubator/jspwiki/trunk/tests/java/org/apache/wiki/action/ViewActionBeanTest.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/java/org/apache/wiki/action/ViewActionBeanTest.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
---
incubator/jspwiki/trunk/tests/java/org/apache/wiki/action/ViewActionBeanTest.java
(original)
+++
incubator/jspwiki/trunk/tests/java/org/apache/wiki/action/ViewActionBeanTest.java
Mon Nov 2 03:45:48 2009
@@ -115,22 +115,79 @@
public void testView() throws Exception {
- // Save page Test
- m_engine.saveText("Test", "This is a test.");
- WikiPage page = m_engine.getPage("Test");
- assertNotNull("Did not save page Test!", page);
-
- // Set the 'page' request parameter to 'Test'...
- MockRoundtrip trip = m_engine.guestTrip( "/Wiki.action");
- trip.setParameter("page", "Test");
- trip.execute("view");
+ String pageName = "ViewActionBeanTest";
+
+ // Save test page
+ m_engine.saveText( pageName, "This is a test." );
+ WikiPage page = m_engine.getPage( pageName );
+ assertNotNull("Did not save page " + pageName + "!", page);
+
+ // Set the 'page' request parameter to 'ViewActionBeanTest'...
+ MockRoundtrip trip = m_engine.guestTrip( "/Wiki.action" );
+ trip.setParameter( "page", pageName );
+ trip.execute( "view" );
// ...we should automatically see Test bound to the ActionBean (nice!)
- ViewActionBean bean = trip.getActionBean(ViewActionBean.class);
+ ViewActionBean bean = trip.getActionBean( ViewActionBean.class );
assertEquals( page, bean.getPage() );
// ...and the destination should be Wiki.jsp (aka display JSP)
- assertEquals("/Wiki.jsp", trip.getDestination() );
+ assertEquals( "/Wiki.jsp", trip.getDestination() );
+ }
+
+ public void testViewVersion() throws Exception {
+ String pageName = "ViewActionBeanTest";
+ m_engine.deletePage( pageName );
+
+ // Save test page
+ m_engine.saveText( pageName, "This is the first version." );
+ WikiPage page = m_engine.getPage( pageName );
+ assertNotNull("Did not save page " + pageName + "!", page);
+
+ // Go get the first version
+ MockRoundtrip trip = m_engine.guestTrip( "/Wiki.action" );
+ trip.setParameter( "page", pageName );
+ trip.execute( "view" );
+ ViewActionBean bean = trip.getActionBean( ViewActionBean.class );
+ assertEquals( page, bean.getPage() );
+ String pageText = page.getContentAsString();
+ assertEquals( "This is the first version.\r\n", pageText );
+
+ // Save a second version
+ m_engine.saveText( pageName, "This is the second version." );
+ WikiPage pageV1 = m_engine.getPage( pageName, 1 );
+ WikiPage pageV2 = m_engine.getPage( pageName, 2 );
+
+ // Go get the first version again
+ trip = m_engine.guestTrip( "/Wiki.action" );
+ trip.setParameter( "page", pageName );
+ trip.setParameter( "version", "1" );
+ trip.execute( "view" );
+ bean = trip.getActionBean( ViewActionBean.class );
+ assertEquals( pageV1, bean.getPage() );
+ pageText = pageV1.getContentAsString();
+ assertEquals( "This is the first version.\r\n", pageText );
+
+ // Go get the second version
+ trip = m_engine.guestTrip( "/Wiki.action" );
+ trip.setParameter( "page", pageName );
+ trip.setParameter( "version", "2" );
+ trip.execute( "view" );
+ bean = trip.getActionBean( ViewActionBean.class );
+ assertEquals( pageV2, bean.getPage() );
+ pageText = pageV2.getContentAsString();
+ assertEquals( "This is the second version.\r\n", pageText );
+
+ // Go get the "latest" version
+ trip = m_engine.guestTrip( "/Wiki.action" );
+ trip.setParameter( "page", pageName );
+ trip.execute( "view" );
+ bean = trip.getActionBean( ViewActionBean.class );
+ assertEquals( pageV2, bean.getPage() );
+ pageText = pageV2.getContentAsString();
+ assertEquals( "This is the second version.\r\n", pageText );
+
+ m_engine.deletePage( pageName );
}
public static Test suite()
Modified:
incubator/jspwiki/trunk/tests/java/org/apache/wiki/content/ContentManagerTest.java
URL:
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/java/org/apache/wiki/content/ContentManagerTest.java?rev=831797&r1=831796&r2=831797&view=diff
==============================================================================
---
incubator/jspwiki/trunk/tests/java/org/apache/wiki/content/ContentManagerTest.java
(original)
+++
incubator/jspwiki/trunk/tests/java/org/apache/wiki/content/ContentManagerTest.java
Mon Nov 2 03:45:48 2009
@@ -29,6 +29,7 @@
import junit.framework.TestSuite;
import org.apache.wiki.TestEngine;
+import org.apache.wiki.WikiProvider;
import org.apache.wiki.api.WikiException;
import org.apache.wiki.api.WikiPage;
import org.apache.wiki.providers.ProviderException;
@@ -134,6 +135,24 @@
assertEquals( 2, allPages.size() );
}
+ public void testPageExists() throws Exception
+ {
+ WikiPath path = WikiPath.valueOf( "ContentManagerTest-PageExists" );
+
+ // Save a new page
+ m_engine.saveText( path.toString(), "This is the first version" );
+ assertTrue( m_mgr.pageExists( path, WikiProvider.LATEST_VERSION ) );
+ assertTrue( m_mgr.pageExists( path, 1 ) );
+
+ // Save another version
+ m_engine.saveText( path.toString(), "This is the second version" );
+ assertTrue( m_mgr.pageExists( path, WikiProvider.LATEST_VERSION ) );
+ assertTrue( m_mgr.pageExists( path, 2 ) );
+ assertTrue( m_mgr.pageExists( path, 1 ) );
+
+ m_engine.deletePage( path.toString() );
+ }
+
public void testVersions() throws Exception
{
String content = "Test Content";