You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ja...@apache.org on 2008/12/17 22:51:15 UTC

svn commit: r727526 [1/4] - in /incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH: ./ etc/ etc/i18n/templates/ src/com/ecyrd/jspwiki/ src/com/ecyrd/jspwiki/action/ src/com/ecyrd/jspwiki/tags/ src/com/ecyrd/jspwiki/ui/ src/com/ecyrd/jspwiki/ui/stripes/ src/...

Author: jalkanen
Date: Wed Dec 17 13:51:09 2008
New Revision: 727526

URL: http://svn.apache.org/viewvc?rev=727526&view=rev
Log:
Merged with trunk r727303 (ish).

Added:
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/CreateProfile.jsp
      - copied unchanged from r727303, incubator/jspwiki/trunk/src/webdocs/CreateProfile.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/CreateProfileContent.jsp
      - copied unchanged from r727303, incubator/jspwiki/trunk/src/webdocs/templates/default/CreateProfileContent.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/EditLayout.jsp
      - copied unchanged from r727303, incubator/jspwiki/trunk/src/webdocs/templates/default/EditLayout.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ViewLayout.jsp
      - copied unchanged from r727303, incubator/jspwiki/trunk/src/webdocs/templates/default/ViewLayout.jsp
Removed:
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LostPassword.jsp
Modified:
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/ChangeLog
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/i18n/templates/default.properties
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/web.xml
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/Release.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/AbstractActionBean.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/LoginActionBean.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserPreferencesActionBean.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserProfileActionBean.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/ViewActionBean.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/MessagesTag.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/WikiTagBase.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/TemplateManager.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LoginForm.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/PageInfo.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/UserPreferences.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/Wiki.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/LoginContent.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/PreferencesContent.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ProfileTab.jsp
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/SamplePlugin2.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/TranslationsCheck.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/FileUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/PageManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/PropertyReaderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ReferenceManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ReleaseTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/TestEngine.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/TestJNDIContext.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/TextUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/Util.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/VariableManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/WikiEngineTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/WikiSessionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/GroupActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/LoginActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/RenameActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/UserPreferencesActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/UserProfileActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/action/WikiContextFactoryTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/attachment/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/attachment/AttachmentManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/AuthorizationManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/GroupManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/SecurityEventTrap.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/Users.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/acl/DefaultAclManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/GroupTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/JDBCGroupDatabaseTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/authorize/WebContainerAuthorizerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/login/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionCollectionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllPermissionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/GroupPermissionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/PagePermissionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/permissions/WikiPermissionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/user/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/user/JDBCUserDatabaseTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/user/UserProfileTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/auth/user/XMLUserDatabaseTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/content/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/content/PageRenamerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/content/WikiNameTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/dav/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/dav/AttachmentDavProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/dav/DavPathTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/dav/HTMLPagesDavProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/dav/RawPagesDavProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/diff/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/diff/ContextualDiffProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/filters/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/filters/FilterManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/filters/TestFilter.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/htmltowiki/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/htmltowiki/HtmlStringToWikiTranslatorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/parser/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/parser/JSPWikiMarkupParserTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/parser/MarkupParserTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/CounterPluginTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/DenouncePluginTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/GroupsTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/InsertPageTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/JavaScriptPlugin.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/PluginManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/ReferringPagesPluginTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/SamplePlugin.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/TableOfContentsTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/plugin/UndefinedPagesPluginTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/BasicAttachmentProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/CachingProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/FileSystemProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/RCSFileProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/VersioningFileProviderTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/providers/VerySimpleProvider.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/render/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/render/CreoleRendererTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/render/RenderingManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/render/WysiwygEditingRendererTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/rss/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/rss/RSSGeneratorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/search/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/search/SearchManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/InputValidatorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/JSPWikiJspTransformerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/JspDocumentTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/JspParserTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/StripesJspTransformerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/migrator/TagTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/stripes/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/ui/stripes/HandlerInfoTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/url/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/url/DefaultURLConstructorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/url/ShortURLConstructorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/url/ShortViewURLConstructorTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/ClassUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/CommentedPropertiesTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/CryptoUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/MailUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/PriorityListTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/SerializerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/TextUtilTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/util/TimedCounterListTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/web/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/ApprovalWorkflowTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/FactTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/OutcomeTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/SimpleDecisionTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/TaskTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/WorkflowManagerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/workflow/WorkflowTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/xmlrpc/AllTests.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/ecyrd/jspwiki/xmlrpc/RPCHandlerTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/com/foo/SamplePlugin3.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/stress/MassiveRepositoryTest.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/stress/StressTestRCSProvider.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/stress/StressTestSpeed.java
    incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/stress/StressTestVersioningProvider.java

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/ChangeLog
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/ChangeLog?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/ChangeLog (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/ChangeLog Wed Dec 17 13:51:09 2008
@@ -1,3 +1,46 @@
+2008-12-17  Andrew Jaquith <ajaquith AT apache DOT org>
+
+        * 3.0.0-svn-32
+        
+        * Further refinements to Stripes-related JSPs. Refactoring of Login/Profile/View
+        ActionBeans. Introduction of Stripes layout system, which makes templating
+        somewhat easier (but at the moment all Stripes JSPs are  hardwired to 'default'). 
+        
+2008-12-11 Harry Metske <me...@apache.org>
+
+        * 3.0.0-svn-31
+        
+        * JSPWIKI-451 Fix the copyright templates on all test cases
+        
+2008-12-06  Andrew Jaquith <ajaquith AT apache DOT org>
+
+        * 3.0.0-svn-29
+
+        * Lots of work on user preferences/profile JSPs and ActionBeans; LostPassword.jsp
+        has been assimilated into LoginActionBean. <rubs hands gleefully> Muhuhahaha!
+
+2008-12-06  Andrew Jaquith <ajaquith AT apache DOT org>
+
+        * 3.0.0-svn-29
+
+        * Additional improvements, bug fixes to Stripes-related code.
+        Wiki.jsp and PageInfo.jsp completely migrated to Stripes.
+
+        * TemplateManager gains a new (fairly volatile) method that
+        returns a ForwardResolution to content template pages.
+        
+        * TabTag gains a much-needed 'titleKey' property, making the
+        need to embed i18n-related scriptlets in JSPs unnecessary.
+        Please use this in preference to the 'title' property.
+
+2008-12-05  Janne Jalkanen <ja...@apache.org>
+
+        * 3.0.0-svn-28
+        
+        * Brought in the WikiName class, which should now be used
+        instead of Strings to denote page names internally wherever
+        possible.
+        
 2008-12-06  Andrew Jaquith <ajaquith AT apache DOT org>
 
         * 3.0.0-svn-27

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/i18n/templates/default.properties
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/i18n/templates/default.properties?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/i18n/templates/default.properties (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/i18n/templates/default.properties Wed Dec 17 13:51:09 2008
@@ -447,6 +447,9 @@
 prefs.creationdate=Creation date
 prefs.profile.lastmodified=Last modified
 
+profile.nameCollision=Another user already has a profile with {0} set to {1}
+profile.noPasswordMatch=Passwords must match
+
 # Workflow generic messages
 workflow.tab=Workflow
 workflow.heading=Your Workflow Items
@@ -656,3 +659,71 @@
 
 javascript.prefs.areyousure=Without clicking the Save User Preferences button, \
 	your changes will be lost. Are you sure you want to exit this page?
+
+###############################################################################
+## Default Resource Bundle file for the Stripes Framework. Values should be
+## placed in here for the following:
+##   - Form Field Labels, unless you want users to see a non-localized, non-
+##     pretty name from the form field declaration (prettied up a little).
+##   - Error messages for:
+##       - Standard validation error messages
+##       - Converter error messages
+##       - Error messages used in your custom ActionBean classes
+###############################################################################
+
+# Resource strings used by the <stripes:errors> tag when there are no nested tags
+stripes.errors.header=<div style="color:#b72222; font-weight: bold">Please fix the following errors:</div><ol>
+stripes.errors.beforeError=<li style="color: #b72222;">
+stripes.errors.afterError=</li>
+stripes.errors.footer=</ol>
+
+# Resource strings used by the <stripes:errors> tag when displaying errors for a
+# specific field (e.g. <stripes:errors field="password"/>). If not supplied the
+# values above will be used instead.
+stripes.fieldErrors.header=
+stripes.fieldErrors.beforeError=<span style="color: #b72222;">
+stripes.fieldErrors.afterError=</span><br />
+stripes.fieldErrors.footer=
+
+# Resource strings used by the stripes:messages tag
+stripes.messages.header=<ul class="messages">
+stripes.messages.beforeMessage=<li>
+stripes.messages.afterMessage=</li>
+stripes.messages.footer=</ul>
+
+# Validation error messages produced by Stripes' built-in converter classes. These
+# are default error messages and can be overridden on per-field and per-form levels.
+# Using the 'invalidNumber' error for a field 'age' of a form posting to
+# '/user/Profile.action', the keys looked for (in order) would be:
+#      1: /user/Profile.action.age.invalidNumber
+#      2: /user/Profile.action.age.errorMessage
+#      3: age.errorMessage
+#      4: /user/Profile.action.invalidNumber
+#      5: converter.number.invalidNumber
+converter.number.invalidNumber=The value ({1}) entered in field {0} must be a valid number
+converter.byte.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3}
+converter.short.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3}
+converter.integer.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3}
+converter.float.outOfRange=The value ({1}) entered in field {0} was out of the range {2} to {3}
+converter.enum.notAnEnumeratedValue=The value "{1}" is not a valid value for field {0}
+converter.date.invalidDate=The value ({1}) entered in field {0} must be a valid date
+converter.email.invalidEmail=The value ({1}) entered is not a valid email address
+converter.creditCard.invalidCreditCard=The value ({1}) entered is not a valid credit card number
+
+# Validation error messages produced by Stripes' annotation based validations. These
+# are default error messages and can be overridden on per-field and per-form levels.
+# Using the 'valueNotPresent' required field error for a field 'username' of a form
+# posting to '/user/Register.action', the keys looked for (in order) would be:
+#      1: /user/Register.action.username.valueNotPresent
+#      2: /user/Register.action.username.errorMessage
+#      3: username.errorMessage
+#      4: /user/Register.action.valueNotPresent
+#      5: validation.required.valueNotPresent
+validation.required.valueNotPresent={0} is a required field
+validation.minlength.valueTooShort={0} must be at least {2} characters long
+validation.maxlength.valueTooLong={0} must be no more than {2} characters long
+validation.minvalue.valueBelowMinimum=The minimum allowed value for {0} is {2}
+validation.maxvalue.valueAboveMaximum=The maximum allowed value for {0} is {2}
+validation.mask.valueDoesNotMatch=<em>{1}</em> is not a valid {0}
+validation.expression.valueFailedExpression=The value supplied ({1}) for field {0} is invalid
+validation.file.postBodyTooBig=Total upload size of {3} KB exceeds the maximum size of {2} KB

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/web.xml
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/web.xml?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/web.xml (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/etc/web.xml Wed Dec 17 13:51:09 2008
@@ -132,6 +132,7 @@
         <filter-name>StripesFilter</filter-name>
         <url-pattern>*.jsp</url-pattern>
         <dispatcher>REQUEST</dispatcher>
+        <dispatcher>FORWARD</dispatcher>
     </filter-mapping>
 
     <filter-mapping>
@@ -158,9 +159,9 @@
       <listener-class>com.ecyrd.jspwiki.auth.SessionMonitor</listener-class>
    </listener>
    
-    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
-    <!--         Configuration of the Stripes dispatcher Servlet.            -->
-    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <!-- 
+        Stripes dispatcher Servlet.
+    -->
     <servlet>
         <servlet-name>StripesDispatcher</servlet-name>
         <servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class>

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/Release.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/Release.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/Release.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/Release.java Wed Dec 17 13:51:09 2008
@@ -77,7 +77,7 @@
      *  <p>
      *  If the build identifier is empty, it is not added.
      */
-    public static final String     BUILD         = "27";
+    public static final String     BUILD         = "32";
     
     /**
      *  This is the generic version string you should use

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/AbstractActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/AbstractActionBean.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/AbstractActionBean.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/AbstractActionBean.java Wed Dec 17 13:51:09 2008
@@ -1,9 +1,9 @@
 package com.ecyrd.jspwiki.action;
 
-import com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext;
-
 import net.sourceforge.stripes.action.ActionBeanContext;
 
+import com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext;
+
 /**
  * <p>
  * Abstract ActionBean superclass for all wiki actions, such as page actions ({@link com.ecyrd.jspwiki.WikiContext}
@@ -15,7 +15,7 @@
  */
 public abstract class AbstractActionBean implements WikiActionBean
 {
-    private WikiActionBeanContext m_actionBeanContext = null;
+    private WikiActionBeanContext m_context = null;
 
     /**
      * Creates a new instance of this class, without a WikiEngine, Request or
@@ -35,7 +35,7 @@
      */
     public WikiActionBeanContext getContext()
     {
-        return m_actionBeanContext;
+        return m_context;
     }
 
     /**
@@ -44,7 +44,7 @@
      */
     public void setContext( ActionBeanContext context )
     {
-        m_actionBeanContext = ((WikiActionBeanContext) context);
+        m_context = ((WikiActionBeanContext) context);
     }
 
 }

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/LoginActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/LoginActionBean.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/LoginActionBean.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/LoginActionBean.java Wed Dec 17 13:51:09 2008
@@ -1,34 +1,43 @@
 package com.ecyrd.jspwiki.action;
 
 import java.security.Principal;
+import java.text.MessageFormat;
 import java.util.ResourceBundle;
 
+import javax.mail.AuthenticationFailedException;
+import javax.mail.SendFailedException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import net.sourceforge.stripes.action.*;
 import net.sourceforge.stripes.util.UrlBuilder;
-import net.sourceforge.stripes.validation.SimpleError;
-import net.sourceforge.stripes.validation.Validate;
-import net.sourceforge.stripes.validation.ValidationErrors;
+import net.sourceforge.stripes.validation.*;
 
+import com.ecyrd.jspwiki.WikiContext;
 import com.ecyrd.jspwiki.WikiEngine;
 import com.ecyrd.jspwiki.WikiSession;
+import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;
 import com.ecyrd.jspwiki.auth.WikiSecurityException;
 import com.ecyrd.jspwiki.auth.login.CookieAssertionLoginModule;
 import com.ecyrd.jspwiki.auth.login.CookieAuthenticationLoginModule;
 import com.ecyrd.jspwiki.auth.permissions.WikiPermission;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.UserProfile;
 import com.ecyrd.jspwiki.log.Logger;
 import com.ecyrd.jspwiki.log.LoggerFactory;
 import com.ecyrd.jspwiki.ui.stripes.HandlerPermission;
 import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
+import com.ecyrd.jspwiki.util.MailUtil;
+import com.ecyrd.jspwiki.util.TextUtil;
 
 @UrlBinding( "/Login.action" )
 public class LoginActionBean extends AbstractActionBean
 {
     private static final Logger log = LoggerFactory.getLogger( LoginActionBean.class );
 
+    private static final String DEFAULT_TAB = "logincontent";
+
     /**
      * Sets cookies and redirects the user to a wiki page after a successful
      * profile creation or login.
@@ -46,7 +55,8 @@
         // Set "remember me?" cookie
         if( rememberMe )
         {
-            CookieAuthenticationLoginModule.setLoginCookie( getContext().getEngine(), getContext().getResponse(), principal.getName() );
+            CookieAuthenticationLoginModule.setLoginCookie( getContext().getEngine(), getContext().getResponse(), principal
+                .getName() );
         }
 
         UrlBuilder builder = new UrlBuilder( getContext().getLocale(), ViewActionBean.class, false );
@@ -57,20 +67,34 @@
         return new RedirectResolution( builder.toString() );
     }
 
+    private String m_email = null;
+
     private String m_username = null;
 
     private boolean m_remember = false;
 
     private String m_password;
 
-    private String m_redirect;
+    private String m_redirect = null;
+
+    private String m_tab = DEFAULT_TAB;
+
+    /**
+     * Returns the e-mail address.
+     * 
+     * @return the e-mail address
+     */
+    public String getEmail()
+    {
+        return m_email;
+    }
 
     public String getJ_password()
     {
         return m_password;
     }
 
-    public boolean getJ_remember()
+    public boolean getRemember()
     {
         return m_remember;
     }
@@ -80,41 +104,29 @@
         return m_username;
     }
 
+    public String getTab()
+    {
+        return m_tab;
+    }
+
     public String getRedirect()
     {
         return m_redirect;
     }
 
-    @HandlesEvent( "login" )
-    @HandlerPermission( permissionClass = WikiPermission.class, target = "${context.engine.applicationName}", actions = WikiPermission.LOGIN_ACTION )
-    public Resolution login()
+    @ValidationMethod( on = "login", when = ValidationState.NO_ERRORS )
+    public void validateCredentials()
     {
         WikiSession wikiSession = getContext().getWikiSession();
         ValidationErrors errors = getContext().getValidationErrors();
         ResourceBundle rb = getContext().getBundle( "CoreResources" );
 
-        // If user got here and is already authenticated, it means
-        // they just aren't allowed access to what they asked for.
-        // Weepy tears and hankies all 'round.
-        if( getContext().getWikiSession().isAuthenticated() )
-        {
-            errors.addGlobalError( new SimpleError( rb.getString( "login.error.noaccess" ) ) );
-            return new RedirectResolution( MessageActionBean.class );
-        }
-
         log.debug( "Attempting to authenticate user " + m_username );
 
         // Log the user in!
-        Resolution r = null;
         try
         {
-            if( getContext().getEngine().getAuthenticationManager().login( wikiSession, m_username, m_password ) )
-            {
-                // Set cookies as needed and redirect
-                log.info( "Successfully authenticated user " + m_username + " (custom auth)" );
-                r = saveCookiesAndRedirect( m_redirect, m_remember );
-            }
-            else
+            if( !getContext().getEngine().getAuthenticationManager().login( wikiSession, m_username, m_password ) )
             {
                 log.info( "Failed to authenticate user " + m_username );
                 errors.addGlobalError( new SimpleError( rb.getString( "login.error.password" ) ) );
@@ -124,15 +136,15 @@
         {
             errors.addGlobalError( new SimpleError( rb.getString( "login.error" ), e.getMessage() ) );
         }
+    }
 
-        // Any errors?
-        if( !errors.isEmpty() )
-        {
-            UrlBuilder builder = new UrlBuilder( getContext().getLocale(), "/Login.jsp", false );
-            builder.addParameter( "tab", "logincontent" );
-            r = new RedirectResolution( builder.toString() );
-        }
-
+    @HandlesEvent( "login" )
+    @HandlerPermission( permissionClass = WikiPermission.class, target = "${context.engine.applicationName}", actions = WikiPermission.LOGIN_ACTION )
+    public Resolution login()
+    {
+        // Set cookies as needed and redirect
+        log.info( "Successfully authenticated user " + m_username + " (custom auth)" );
+        Resolution r = saveCookiesAndRedirect( m_redirect, m_remember );
         return r;
     }
 
@@ -145,26 +157,57 @@
         HttpServletRequest request = getContext().getRequest();
         HttpServletResponse response = getContext().getResponse();
         engine.getAuthenticationManager().logout( request );
-        
+
         // Clear the asserted name cookie
         CookieAssertionLoginModule.clearUserCookie( response );
 
         // Delete the authentication cookie
-        if ( engine.getAuthenticationManager().allowsCookieAuthentication() )
+        if( engine.getAuthenticationManager().allowsCookieAuthentication() )
         {
             CookieAuthenticationLoginModule.clearLoginCookie( engine, request, response );
         }
-        
+
         return new RedirectResolution( ViewActionBean.class );
     }
 
+    /**
+     * Sets the e-mail property. Used by the {@link #resetPassword()} event.
+     * 
+     * @param email the e-mail address
+     */
+    @Validate( required = true, on = "resetPassword", converter = net.sourceforge.stripes.validation.EmailTypeConverter.class )
+    public void setEmail( String email )
+    {
+        m_email = email;
+    }
+
     @Validate( required = true, on = "login", minlength = 1, maxlength = 128 )
     public void setJ_password( String password )
     {
         m_password = password;
     }
 
-    public void setJ_remember( boolean remember )
+    /**
+     * Sets the <code>tab</code> parameter for the source page. The value
+     * supplied to this method is also added to the source page resolution
+     * returned by
+     * {@link com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext#getSourcePageResolution()}.
+     * 
+     * @param tab the tab value
+     */
+    @Validate()
+    public void setTab( String tab )
+    {
+        m_tab = tab;
+        Resolution r = getContext().getSourcePageResolution();
+        if( r instanceof OnwardResolution )
+        {
+            ((OnwardResolution) r).addParameter( "tab", tab );
+        }
+    }
+
+    @Validate()
+    public void setRmember( boolean remember )
     {
         m_remember = remember;
     }
@@ -175,6 +218,7 @@
         m_username = username;
     }
 
+    @Validate()
     public void setRedirect( String redirect )
     {
         m_redirect = redirect;
@@ -189,17 +233,22 @@
      * @return the resolution
      */
     @DefaultHandler
+    @DontValidate
     @HandlesEvent( "view" )
     @HandlerPermission( permissionClass = WikiPermission.class, target = "${context.engine.applicationName}", actions = WikiPermission.LOGIN_ACTION )
     @WikiRequestContext( "login" )
     public Resolution view()
     {
-        Resolution r = null;
+        ValidationErrors errors = getContext().getValidationErrors();
+        ResourceBundle rb = getContext().getBundle( "CoreResources" );
 
+        // If user got here and is already authenticated, it means
+        // they just aren't allowed access to what they asked for.
+        // Weepy tears and hankies all 'round.
         if( getContext().getWikiSession().isAuthenticated() )
         {
-            // Set cookies as needed and redirect
-            r = saveCookiesAndRedirect( m_redirect, m_remember );
+            errors.addGlobalError( new SimpleError( rb.getString( "login.error.noaccess" ) ) );
+            return new RedirectResolution( MessageActionBean.class );
         }
 
         if( getContext().getEngine().getAuthenticationManager().isContainerAuthenticated() )
@@ -213,7 +262,6 @@
             Object seen = session.getAttribute( "_redirect" );
             if( seen != null )
             {
-                ResourceBundle rb = getContext().getBundle( "CoreResources" );
                 getContext().getValidationErrors().addGlobalError( new SimpleError( rb.getString( "login.error.noaccess" ) ) );
                 return new RedirectResolution( MessageActionBean.class );
             }
@@ -230,6 +278,92 @@
             log.info( "Successfully authenticated user " + user.getName() + " (container auth)" );
         }
 
+        // The user hasn't logged in yet, so send them to the login page
+        ForwardResolution r = new ForwardResolution( "/Login.jsp" );
+        r.addParameter( "tab", "logincontent" );
+        return r;
+    }
+
+    /**
+     * Event handler that resets the user's password, based on the e-mail
+     * address returned by {@link #getEmail()}.
+     * 
+     * @return always returns <code>null</code>
+     */
+    @HandlesEvent( "resetPassword" )
+    public Resolution resetPassword()
+    {
+        String message = null;
+        ResourceBundle rb = getContext().getBundle( "CoreResources" );
+
+        // Reset pw for account name
+        WikiEngine wiki = getContext().getEngine();
+        WikiSession wikiSession = getContext().getWikiSession();
+        UserDatabase userDatabase = wiki.getUserManager().getUserDatabase();
+        boolean success = false;
+
+        try
+        {
+            // Look up the e-mail supplied by the user
+            UserProfile profile = userDatabase.findByEmail( m_email );
+            String email = profile.getEmail();
+            String randomPassword = TextUtil.generateRandomPassword();
+
+            // Compose the message e-mail body
+            Object[] args = { profile.getLoginName(), randomPassword,
+                             wiki.getURLConstructor().makeURL( WikiContext.NONE, "Login.jsp", true, "" ), wiki.getApplicationName() };
+            String mailMessage = MessageFormat.format( rb.getString( "lostpwd.newpassword.email" ), args );
+
+            // Compose the message subject line
+            args = new Object[] { wiki.getApplicationName() };
+            String mailSubject = MessageFormat.format( rb.getString( "lostpwd.newpassword.subject" ), args );
+
+            // Send the message.
+            MailUtil.sendMessage( wiki, email, mailSubject, mailMessage );
+            log.info( "User " + email + " requested and received a new password." );
+
+            // Mail succeeded. Now reset the password.
+            // If this fails, we're kind of screwed, because we already mailed
+            // it.
+            profile.setPassword( randomPassword );
+            userDatabase.save( profile );
+            success = true;
+        }
+        catch( NoSuchPrincipalException e )
+        {
+            Object[] args = { m_email };
+            message = MessageFormat.format( rb.getString( "lostpwd.nouser" ), args );
+            log.info( "Tried to reset password for non-existent user '" + m_email + "'" );
+        }
+        catch( SendFailedException e )
+        {
+            message = rb.getString( "lostpwd.nomail" );
+            log.error( "Tried to reset password and got SendFailedException: " + e );
+        }
+        catch( AuthenticationFailedException e )
+        {
+            message = rb.getString( "lostpwd.nomail" );
+            log.error( "Tried to reset password and got AuthenticationFailedException: " + e );
+        }
+        catch( Exception e )
+        {
+            message = rb.getString( "lostpwd.nomail" );
+            log.error( "Tried to reset password and got another exception: " + e );
+        }
+
+        if( success )
+        {
+            wikiSession.addMessage( "resetpwok", rb.getString( "lostpwd.emailed" ) );
+            getContext().getRequest().setAttribute( "passwordreset", "done" );
+        }
+        else
+        // Error
+        {
+            wikiSession.addMessage( "resetpw", message );
+        }
+
+        ForwardResolution r = new ForwardResolution( "/LoginForm.jsp" );
+        r.addParameter( "tab", "lostpassword" );
         return r;
     }
 

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserPreferencesActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserPreferencesActionBean.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserPreferencesActionBean.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserPreferencesActionBean.java Wed Dec 17 13:51:09 2008
@@ -11,8 +11,12 @@
 
 import com.ecyrd.jspwiki.auth.login.CookieAssertionLoginModule;
 import com.ecyrd.jspwiki.auth.permissions.WikiPermission;
+import com.ecyrd.jspwiki.log.Logger;
+import com.ecyrd.jspwiki.log.LoggerFactory;
 import com.ecyrd.jspwiki.ui.EditorManager;
+import com.ecyrd.jspwiki.ui.TemplateManager;
 import com.ecyrd.jspwiki.ui.stripes.HandlerPermission;
+import com.ecyrd.jspwiki.ui.stripes.WikiActionBeanContext;
 import com.ecyrd.jspwiki.ui.stripes.WikiRequestContext;
 
 /**
@@ -21,6 +25,8 @@
 @UrlBinding( "/UserPreferences.action" )
 public class UserPreferencesActionBean extends AbstractActionBean
 {
+    private Logger log = LoggerFactory.getLogger( "JSPWiki" );
+
     private String m_assertedName = null;
 
     private String m_editor = null;
@@ -62,12 +68,11 @@
      * 
      * @return a redirection to the front page
      */
-    @DefaultHandler
     @HandlesEvent( "createAssertedName" )
     @HandlerPermission( permissionClass = WikiPermission.class, target = "${context.engine.applicationName}", actions = WikiPermission.EDIT_PREFERENCES_ACTION )
-    @WikiRequestContext( "prefs" )
     public Resolution createAssertedName()
     {
+        // FIXME: should reload preferences (see Preferences.reloadPreferences)
         if( !getContext().getWikiSession().isAuthenticated() )
         {
             HttpServletRequest request = getContext().getRequest();
@@ -75,6 +80,13 @@
             String assertedName = request.getParameter( "assertedName" );
             CookieAssertionLoginModule.setUserCookie( response, assertedName );
         }
+        if( m_redirect != null )
+        {
+            RedirectResolution r = new RedirectResolution( ViewActionBean.class );
+            r.addParameter( "page", m_redirect );
+            log.info( "Redirecting user to wiki page " + m_redirect );
+            return r;
+        }
         return new RedirectResolution( "/" );
     }
 
@@ -93,7 +105,7 @@
      * 
      * @param name the asserted name
      */
-    @Validate( required = true, on = "createAssertedName" )
+    @Validate( required = true, on = "createAssertedName", minlength=1, maxlength=128 )
     public void setAssertedName( String name )
     {
         m_assertedName = name;
@@ -118,7 +130,7 @@
      * 
      * @param editor the editor
      */
-    @Validate( required = false )
+    @Validate()
     public void setEditor( String editor )
     {
         m_editor = editor;
@@ -134,7 +146,7 @@
      * 
      * @param url the URL to redirect to
      */
-    @Validate( required = false )
+    @Validate()
     public void setRedirect( String url )
     {
         m_redirect = url;
@@ -149,4 +161,21 @@
     {
         return m_redirect;
     }
+
+    /**
+     * Handler for displaying user preferences that simply forwards to the
+     * preferences display JSP <code>PreferencesContent.jsp</code>.
+     * 
+     * @return a forward to the content template
+     */
+    @DefaultHandler
+    @HandlesEvent("prefs")
+    @HandlerPermission( permissionClass = WikiPermission.class, target = "${context.engine.applicationName}", actions = WikiPermission.EDIT_PREFERENCES_ACTION )
+    @WikiRequestContext( "prefs" )
+    public Resolution view()
+    {
+        WikiActionBeanContext context = getContext();
+        TemplateManager.addResourceRequest( context, "script", "scripts/jspwiki-prefs.js" );
+        return new ForwardResolution( "/UserPreferences.jsp" );
+    }
 }

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserProfileActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserProfileActionBean.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserProfileActionBean.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/UserProfileActionBean.java Wed Dec 17 13:51:09 2008
@@ -54,7 +54,9 @@
 
     /**
      * Pre-action that loads the UserProfile before user-supplied parameters are
-     * bound to the ActionBean.
+     * bound to the ActionBean. Also stashes the UserProfile as a request-scoped
+     * attribute named <code>profile</code>. This attribute can be used in
+     * JSP EL expressions as <code>$%7Bprofile%7D</code>.
      * 
      * @return <code>null</code>, always
      */
@@ -69,7 +71,11 @@
 
         // Null out the password, so that we don't re-encrypt it by accident
         m_profile.setPassword( null );
+
+        // Stash the profile as a request attribute
+        getContext().getRequest().setAttribute( "profile", m_profile );
         return null;
+
     }
 
     /**
@@ -138,8 +144,8 @@
         m_passwordAgain = password;
     }
 
-    @ValidateNestedProperties( { @Validate( field = "loginName", maxlength = 100, required = true, on = "save" ),
-                                @Validate( field = "fullname", maxlength = 100, required = true, on = "save" ),
+    @ValidateNestedProperties( { @Validate( field = "loginName", required = true, minlength = 1, maxlength = 100 ),
+                                @Validate( field = "fullname", required = true, minlength = 1, maxlength = 100 ),
                                 @Validate( field = "password", minlength = 8, maxlength = 100 ),
                                 @Validate( field = "email", converter = EmailTypeConverter.class ) } )
     public void setProfile( UserProfile profile )
@@ -161,7 +167,7 @@
      * 
      * @param errors the current validation errors for this ActionBean
      */
-    @ValidationMethod( on = "save", when = ValidationState.NO_ERRORS )
+    @ValidationMethod( when = ValidationState.NO_ERRORS )
     public void validateNoCollision( ValidationErrors errors )
     {
         WikiEngine engine = getContext().getEngine();
@@ -188,7 +194,7 @@
             otherProfile = database.findByLoginName( m_profile.getLoginName() );
             if( otherProfile != null && !otherProfile.equals( oldProfile ) )
             {
-                errors.add( "profile.loginName", new LocalizableError( "nameCollision" ) );
+                errors.add( "profile.loginName", new LocalizableError( "profile.nameCollision" ) );
             }
         }
         catch( NoSuchPrincipalException e )
@@ -199,7 +205,7 @@
             otherProfile = database.findByFullName( m_profile.getFullname() );
             if( otherProfile != null && !otherProfile.equals( oldProfile ) )
             {
-                errors.add( "profile.fullname", new LocalizableError( "nameCollision" ) );
+                errors.add( "profile.fullname", new LocalizableError( "profile.nameCollision" ) );
             }
         }
         catch( NoSuchPrincipalException e )
@@ -208,24 +214,12 @@
     }
 
     /**
-     * After all fields validate correctly, this method validates that the user
-     * account is not spam.
-     * 
-     * @param errors the current validation errors for this ActionBean
-     */
-    @ValidationMethod( on = "save", when = ValidationState.NO_ERRORS )
-    public void validateNotSpam( ValidationErrors errors )
-    {
-        log.info( "Skipped validateNotSpam method because it has not been coded yet..." );
-    }
-
-    /**
      * If the user profile is new, this method verifies that the user has
      * supplied matching passwords.
      * 
      * @param errors the current validation errors for this ActionBean
      */
-    @ValidationMethod( on = "save", when = ValidationState.ALWAYS )
+    @ValidationMethod( when = ValidationState.ALWAYS )
     public void validatePasswords( ValidationErrors errors )
     {
         // All new profiles must have a supplied password
@@ -233,7 +227,7 @@
         {
             if( m_profile.getPassword() == null )
             {
-                errors.add( "profile.password", new LocalizableError( "valueNotPresent" ) );
+                errors.add( "profile.password", new LocalizableError( "validation.required.valueNotPresent" ) );
             }
         }
 
@@ -243,22 +237,38 @@
         {
             if( !m_profile.getPassword().equals( m_passwordAgain ) )
             {
-                errors.add( "profile.password", new LocalizableError( "noPasswordMatch" ) );
+                errors.add( "profile.password", new LocalizableError( "profile.noPasswordMatch" ) );
             }
         }
     }
 
     /**
-     * Default handler that forwards the user back to itself.
+     * Event handler that forwards the user to <code>/CreateProfile.jsp</code>.
+     * 
+     * @return the resolution
+     */
+    @HandlesEvent( "create" )
+    @DontValidate
+    public Resolution create()
+    {
+        return new ForwardResolution( "/CreateProfile.jsp" );
+    }
+
+    /**
+     * Default event handler that forwards the user to
+     * <code>/UserPreferences.jsp</code>.
      * 
      * @return the resolution
      */
     @HandlesEvent( "view" )
     @DefaultHandler
+    @DontValidate
     @WikiRequestContext( "profile" )
     public Resolution view()
     {
-        return new ForwardResolution( "/UserPreferences.jsp" );
+        ForwardResolution r = new ForwardResolution( "/UserPreferences.jsp" );
+        r.addParameter( "tab", "profile" );
+        return r;
     }
 
 }

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/ViewActionBean.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/ViewActionBean.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/ViewActionBean.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/action/ViewActionBean.java Wed Dec 17 13:51:09 2008
@@ -123,22 +123,23 @@
     }
 
     /**
-     * Default handler that simply forwards the user back to the display JSP <code>PageContent.jsp</code>. 
+     * 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.
      * @return a forward to the content template
      */
     @DefaultHandler
+    @DontValidate
     @HandlesEvent("view")
     @HandlerPermission(permissionClass=PagePermission.class, target="${page.qualifiedName}", actions=PagePermission.VIEW_ACTION)
     @WikiRequestContext("view")
     public Resolution view()
     {
-        return getContext().getEngine().getTemplateManager().getContentPage( this, "ViewTemplate.jsp", "PageContent.jsp" );
+        return new ForwardResolution( "/Wiki.jsp");
     }
     
     /**
-     * Handler that forwards to the page information display JSP <code>InfoContent.jsp</code>.
+     * Handler that forwards to the page information display JSP <code>/PageInfo.jsp</code>.
      * @return a forward to the content template
      */
     @HandlesEvent("info")
@@ -146,7 +147,7 @@
     @WikiRequestContext("info")
     public Resolution info()
     {
-        return getContext().getEngine().getTemplateManager().getContentPage( this, "ViewTemplate.jsp", "InfoContent.jsp" );
+        return new ForwardResolution( "/PageInfo.jsp");
     }
-    
+
 }

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/MessagesTag.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/MessagesTag.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/MessagesTag.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/MessagesTag.java Wed Dec 17 13:51:09 2008
@@ -107,13 +107,16 @@
             List<String> messageStrings = new ArrayList<String>();
 
             // Add all of the Stripes validation errors first (all fields, even global errors)
-            ValidationErrors errors = m_wikiActionBean.getContext().getValidationErrors();
-            for ( List<ValidationError> fieldErrors : errors.values() ) 
+            if ( "error".equals( m_div) )
             {
-                for ( ValidationError error : fieldErrors )
+                ValidationErrors errors = m_wikiActionBean.getContext().getValidationErrors();
+                for ( List<ValidationError> fieldErrors : errors.values() ) 
                 {
-                    String message = error.getMessage( m_wikiActionBean.getContext().getLocale() );
-                    messageStrings.add( message );
+                    for ( ValidationError error : fieldErrors )
+                    {
+                        String message = error.getMessage( m_wikiActionBean.getContext().getLocale() );
+                        messageStrings.add( message );
+                    }
                 }
             }
 

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/WikiTagBase.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/WikiTagBase.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/WikiTagBase.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/tags/WikiTagBase.java Wed Dec 17 13:51:09 2008
@@ -85,7 +85,7 @@
     /**
      * Initializes the tag, and sets an internal reference to the current WikiActionBean
      * by delegating to
-     * {@link com.ecyrd.jspwiki.ui.stripes.WikiInterceptor#findActionBean(javax.servlet.ServletRequest)}.
+     * {@link com.ecyrd.jspwiki.ui.stripes.WikiInterceptor#findActionBean(PageContext)}.
      * (That method retrieves the WikiActionBean from page scope.).
      * If the WikiActionBean is a WikiContext, a specific reference to the WikiContext
      * will be set also. Both of these available as protected fields {@link #m_wikiActionBean} and
@@ -100,12 +100,12 @@
         try
         {
             // Retrieve the ActionBean injected by WikiInterceptor
-            m_wikiActionBean = WikiInterceptor.findActionBean( this.getPageContext().getRequest() );
+            m_wikiActionBean = WikiInterceptor.findActionBean( this.getPageContext() );
             
             // It's really bad news if the WikiActionBean wasn't injected (or saved as a variable!)
             if ( m_wikiActionBean == null )
             {
-                throw new JspException( "Can't find WikiActionBean in page or request context! (tag=" + this.getClass() + ")" );
+                throw new JspException( "Can't find WikiActionBean in page context! (tag=" + this.getClass() + ")" );
             }
 
             // The WikiContext is the ActionBean's ActionBeanContext

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/TemplateManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/TemplateManager.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/TemplateManager.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/TemplateManager.java Wed Dec 17 13:51:09 2008
@@ -57,6 +57,36 @@
 public class TemplateManager
     extends ModuleManager
 {
+    /**
+     * Enum that specifies the two types of templates: {@link #VIEW} and {@link #EDIT}.
+     */
+    public enum Template { 
+        /** Template used for viewing things. */
+        VIEW("ViewTemplate.jsp"), 
+        /** Template used for editing things. */
+        EDIT("EditTemplate.jsp");
+        
+        private final String m_template;
+        
+        /**
+         * Package-private constructor.
+         * @param template the name of the template
+         */
+        Template( String template )
+        {
+            m_template = template;
+        }
+        
+        /**
+         * Returns the JSP for the template.
+         * @return
+         */
+        public String template()
+        {
+            return m_template;
+        }
+    }
+    
     private static final String SKIN_DIRECTORY = "skins";
 
     /**

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/ui/stripes/WikiInterceptor.java Wed Dec 17 13:51:09 2008
@@ -12,7 +12,6 @@
 import net.sourceforge.stripes.action.Resolution;
 import net.sourceforge.stripes.controller.*;
 
-import com.ecyrd.jspwiki.WikiContext;
 import com.ecyrd.jspwiki.WikiEngine;
 import com.ecyrd.jspwiki.WikiSession;
 import com.ecyrd.jspwiki.action.LoginActionBean;
@@ -56,8 +55,8 @@
  * <p>
  * After the intercept method fires, calling classes can obtain the saved
  * WikiActionBean by calling
- * {@link WikiInterceptor#findActionBean(javax.servlet.ServletRequest)}.
- * This is the recommended method that JSP scriptlet code should use.
+ * {@link WikiInterceptor#findActionBean(javax.servlet.ServletRequest)}. This
+ * is the recommended method that JSP scriptlet code should use.
  * </p>
  * <p>
  * Because these objects are saved as attributes, they are available to JSPs as
@@ -72,6 +71,7 @@
 public class WikiInterceptor implements Interceptor
 {
     private static final Logger log = LoggerFactory.getLogger( WikiInterceptor.class );
+
     /**
      * The PageContext attribute name of the WikiActionBean stored by
      * WikiInterceptor.
@@ -137,15 +137,21 @@
         HttpServletRequest request = actionBeanContext.getRequest();
 
         // Set the WikiSession, if not set yet
-        if ( actionBeanContext.getWikiSession() == null )
+        if( actionBeanContext.getWikiSession() == null )
         {
             WikiEngine engine = actionBeanContext.getEngine();
             WikiSession wikiSession = SessionMonitor.getInstance( engine ).find( request.getSession() );
             actionBeanContext.setWikiSession( wikiSession );
         }
 
-        // Stash the WikiActionBean and WikiPage in the request
-        WikiInterceptor.saveActionBean( request, actionBean );
+        // Stash the ActionBean as request attribute, if not saved yet
+        if( request.getAttribute( ATTR_ACTIONBEAN ) == null )
+        {
+            request.setAttribute( ATTR_ACTIONBEAN, actionBean );
+        }
+
+        // Stash the WikiContext, WikiEngine
+        WikiContextFactory.saveContext( request, actionBean.getContext() );
 
         if( log.isDebugEnabled() )
         {
@@ -186,6 +192,14 @@
      */
     protected Resolution interceptBindingAndValidation( ExecutionContext context ) throws Exception
     {
+        // Stash the WikiActionBean as a PageContext attribute
+        WikiActionBean actionBean = (WikiActionBean) context.getActionBean();
+        PageContext pageContext = DispatcherHelper.getPageContext();
+        if( pageContext != null )
+        {
+            pageContext.setAttribute( ATTR_ACTIONBEAN, actionBean );
+        }
+
         // Did the handler resolution stage return a Resolution? If so, bail.
         Resolution r = context.proceed();
         if( r != null )
@@ -193,14 +207,13 @@
             return r;
         }
 
-        // Get the resolved ActionBean and event handler method
-        WikiActionBean actionBean = (WikiActionBean) context.getActionBean();
+        // Get the event handler method
         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 )
+        if( eventInfo != null )
         {
             String requestContext = eventInfo.getRequestContext();
             actionBean.getContext().setRequestContext( requestContext );
@@ -238,34 +251,41 @@
     }
 
     /**
-     * <p>
-     * Saves the supplied WikiActionBean and its associated WikiContext,
-     * WikiEngine and WikiSession in
-     * request scope. The action bean is saved as an attribute named
-     * {@link WikiInterceptor#ATTR_ACTIONBEAN}. The other attributes are saved
-     * as described in {@link WikiContextFactory#saveContext(HttpServletRequest, WikiContext)}.
-     * </p>
+     * Returns the WikiActionBean associated with the current
+     * {@link javax.servlet.jsp.PageContext}, which may have been previously stashed by
+     * {@link #interceptBindingAndValidation(ExecutionContext)}. Note that each
+     * PageContext can contain its own ActionBean. The ActionBean will be
+     * retrieved from page-scope attribute {@link WikiInterceptor#ATTR_ACTIONBEAN}.
+     * If the WikiActionBean cannot be obtained as a page-scope attribute, the
+     * request scope will be tried also.
      * 
-     * @param request the HTTP request
-     * @param actionBean the WikiActionBean to save
+     * @param pageContext the page context
+     * @return the WikiActionBean
+     * @throws IllegalStateException if the WikiActionBean was not found in the
+     *             page context or 
      */
-    public static void saveActionBean( HttpServletRequest request, WikiActionBean actionBean )
+    public static WikiActionBean findActionBean( PageContext pageContext )
     {
-        // Stash the WikiActionBean
-        request.setAttribute( WikiInterceptor.ATTR_ACTIONBEAN, actionBean );
-    
-        // Stash the other attributes
-        WikiContextFactory.saveContext( request, actionBean.getContext() );
+        WikiActionBean bean = (WikiActionBean) pageContext.getAttribute( WikiInterceptor.ATTR_ACTIONBEAN );
+        if( bean == null )
+        {
+            bean = findActionBean( pageContext.getRequest() );
+            if ( bean == null )
+            {
+                log.debug( "WikiActionBean not found under page context attribute '" + WikiInterceptor.ATTR_ACTIONBEAN
+                           + "'! Something failed to stash it..." );
+            }
+        }
+        return bean;
     }
 
     /**
      * Returns the WikiActionBean associated with the current
-     * {@link javax.servlet.http.HttpServletRequest}. The ActionBean will be
-     * retrieved from attribute {@link WikiInterceptor#ATTR_ACTIONBEAN}.
-     * If an ActionBean is not found under this name, the standard Stripes
-     * attribute
-     * {@link net.sourceforge.stripes.controller.StripesConstants#REQ_ATTR_ACTION_BEAN}
-     * will be attempted.
+     * {@link javax.servlet.http.HttpServletRequest}, which was previously
+     * stashed by {@link #interceptActionBeanResolution(ExecutionContext)}.
+     * Only the first ActionBean on a JSP will be stashed as a request-level
+     * attribute. The ActionBean will be retrieved from attribute
+     * {@link WikiInterceptor#ATTR_ACTIONBEAN}.
      * 
      * @param request the HTTP request
      * @return the WikiActionBean
@@ -278,13 +298,8 @@
         if( bean == null )
         {
             log.debug( "WikiActionBean not found under request attribute '" + WikiInterceptor.ATTR_ACTIONBEAN
-                       + "'; trying standard Stripes attribute '" + StripesConstants.REQ_ATTR_ACTION_BEAN + "'." );
-            bean = (WikiActionBean) request.getAttribute( StripesConstants.REQ_ATTR_ACTION_BEAN );
-        }
-    
-        if( bean == null )
-        {
-            throw new IllegalStateException( "WikiActionBean not found in request! Something failed to stash it..." );
+                       + "'! Something failed to stash it..." );
+            bean = (WikiActionBean) request.getAttribute( WikiInterceptor.ATTR_ACTIONBEAN );
         }
         return bean;
     }

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LoginForm.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LoginForm.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LoginForm.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/LoginForm.jsp Wed Dec 17 13:51:09 2008
@@ -1,34 +1,7 @@
-<%@ page import="com.ecyrd.jspwiki.log.Logger" %>
-<%@ page import="com.ecyrd.jspwiki.log.LoggerFactory" %>
-<%@ page import="com.ecyrd.jspwiki.*" %>
-<%@ page import="com.ecyrd.jspwiki.action.*" %>
-<%@ page errorPage="/Error.jsp" %>
-<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
 <%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
-<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.LoginActionBean" event="view" executeResolution="true" />
-<%! 
-    /**
-     * This page contains the logic for finding and including
-       the correct login form, which is usually loaded from
-       the template directory's LoginContent.jsp page.
-       It should not be requested directly by users. If
-       container-managed authentication is in force, the container
-       will prevent direct access to it.
-     */
-    Logger log = LoggerFactory.getLogger("JSPWiki"); 
-
-%>
-<%
-    WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
-    // Retrieve the Login page context, then go and find the login form
-
-    WikiContext wikiContext = WikiContextFactory.findContext( pageContext );
-    wikiContext.setVariable( "contentTemplate", "LoginContent.jsp" );
-    response.setContentType("text/html; charset="+wiki.getContentEncoding() );
-    String contentPage = wiki.getTemplateManager().findJSP( pageContext,
-                                                            wikiContext.getTemplate(),
-                                                            "ViewTemplate.jsp" );
-                                                            
-    log.debug("Login template content is: " + contentPage);
-    
-%><wiki:Include page="<%=contentPage%>" />
\ No newline at end of file
+<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.LoginActionBean" event="view" />
+<stripes:layout-render name="/templates/default/ViewLayout.jsp">
+  <stripes:layout-component name="content">
+    <jsp:include page="/templates/default/LoginContent.jsp" />
+  </stripes:layout-component>
+</stripes:layout-render>

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/PageInfo.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/PageInfo.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/PageInfo.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/PageInfo.jsp Wed Dec 17 13:51:09 2008
@@ -1,2 +1,7 @@
 <%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
-<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.ViewActionBean" event="info" executeResolution="true"/>
+<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.ViewActionBean" event="info" />
+<stripes:layout-render name="/templates/default/ViewLayout.jsp">
+  <stripes:layout-component name="content">
+    <jsp:include page="/templates/default/InfoContent.jsp" />
+  </stripes:layout-component>
+</stripes:layout-render>

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/UserPreferences.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/UserPreferences.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/UserPreferences.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/UserPreferences.jsp Wed Dec 17 13:51:09 2008
@@ -1,107 +1,7 @@
-<%@ page import="com.ecyrd.jspwiki.log.Logger" %>
-<%@ page import="com.ecyrd.jspwiki.log.LoggerFactory" %>
-<%@ page import="com.ecyrd.jspwiki.VariableManager" %>
-<%@ page import="com.ecyrd.jspwiki.WikiContext" %>
-<%@ page import="com.ecyrd.jspwiki.WikiSession" %>
-<%@ page import="com.ecyrd.jspwiki.WikiEngine" %>
-<%@ page import="com.ecyrd.jspwiki.auth.UserManager" %>
-<%@ page import="com.ecyrd.jspwiki.auth.WikiSecurityException" %>
-<%@ page import="com.ecyrd.jspwiki.auth.login.CookieAssertionLoginModule" %>
-<%@ page import="com.ecyrd.jspwiki.auth.user.DuplicateUserException" %>
-<%@ page import="com.ecyrd.jspwiki.auth.user.UserProfile" %>
-<%@ page import="com.ecyrd.jspwiki.workflow.DecisionRequiredException" %>
-<%@ page import="com.ecyrd.jspwiki.ui.EditorManager" %>
-<%@ page import="com.ecyrd.jspwiki.ui.TemplateManager" %>
-<%@ page import="com.ecyrd.jspwiki.preferences.*" %>
-<%@ page errorPage="/Error.jsp" %>
-<%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
 <%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
-<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.UserPreferencesActionBean" event="createAssertedName" />
-
-<%! 
-    Logger log = LoggerFactory.getLogger("JSPWiki"); 
-%>
-
-<%
-    WikiEngine wiki = WikiEngine.getInstance( getServletConfig() );
-    // Create wiki context and check for authorization
-    WikiContext wikiContext = wiki.createContext( request, WikiContext.PREFS );
-    
-    // Extract the user profile and action attributes
-    UserManager userMgr = wiki.getUserManager();
-    WikiSession wikiSession = wikiContext.getWikiSession();
-
-/* FIXME: Obsoslete 
-    if( request.getParameter(EditorManager.PARA_EDITOR) != null )
-    {
-    	String editor = request.getParameter(EditorManager.PARA_EDITOR);
-    	session.setAttribute(EditorManager.PARA_EDITOR,editor);
-    }
-*/
-
-    // Are we saving the profile?
-    if( "saveProfile".equals(request.getParameter("action")) )
-    {
-        UserProfile profile = userMgr.parseProfile( wikiContext );
-         
-        // Validate the profile
-        userMgr.validateProfile( wikiContext, profile );
-
-        // If no errors, save the profile now & refresh the principal set!
-        if ( wikiSession.getMessages( "profile" ).length == 0 )
-        {
-            try
-            {
-                userMgr.setUserProfile( wikiSession, profile );
-                CookieAssertionLoginModule.setUserCookie( response, profile.getFullname() );
-            }
-            catch( DuplicateUserException e )
-            {
-                // User collision! (full name or wiki name already taken)
-                wikiSession.addMessage( "profile", e.getMessage() );
-            }
-            catch( DecisionRequiredException e )
-            {
-                String redirect = wiki.getURL(WikiContext.VIEW,"ApprovalRequiredForUserProfiles",null,true);
-                response.sendRedirect( redirect );
-                return;
-            }
-            catch( WikiSecurityException e )
-            {
-                // Something went horribly wrong! Maybe it's an I/O error...
-                wikiSession.addMessage( "profile", e.getMessage() );
-            }
-        }
-        if ( wikiSession.getMessages( "profile" ).length == 0 )
-        {
-            String redirectPage = request.getParameter( "redirect" );
-            response.sendRedirect( wiki.getViewURL(redirectPage) );
-            return;
-        }
-    }
-    if( "setAssertedName".equals(request.getParameter("action")) )
-    {
-        Preferences.reloadPreferences(pageContext);
-        
-        String assertedName = request.getParameter("assertedName");
-        CookieAssertionLoginModule.setUserCookie( response, assertedName );
-
-        String redirectPage = request.getParameter( "redirect" );
-        String viewUrl = ( "UserPreferences".equals( redirectPage ) ) ? "Wiki.jsp" : wiki.getViewURL( redirectPage );
-
-        log.info( "Redirecting user to " + viewUrl );
-        response.sendRedirect( viewUrl );
-        return;
-    }
-    if( "clearAssertedName".equals(request.getParameter("action")) )
-    {
-        CookieAssertionLoginModule.clearUserCookie( response );
-        response.sendRedirect( wikiContext.getURL(WikiContext.NONE,"Logout.jsp") );
-        return;
-    }
-    response.setContentType("text/html; charset="+wiki.getContentEncoding() );
-    String contentPage = wiki.getTemplateManager().findJSP( pageContext,
-                                                            wikiContext.getTemplate(),
-                                                            "ViewTemplate.jsp" );
-%><wiki:Include page="<%=contentPage%>" />
-
+<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.UserPreferencesActionBean" event="prefs" />
+<stripes:layout-render name="/templates/default/ViewLayout.jsp">
+  <stripes:layout-component name="content">
+    <jsp:include page="/templates/default/PreferencesContent.jsp" />
+  </stripes:layout-component>
+</stripes:layout-render>

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/Wiki.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/Wiki.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/Wiki.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/Wiki.jsp Wed Dec 17 13:51:09 2008
@@ -1,2 +1,10 @@
 <%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
-<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.ViewActionBean" event="view" executeResolution="true" />
+<stripes:useActionBean beanclass="com.ecyrd.jspwiki.action.ViewActionBean" event="view" />
+<stripes:layout-render name="/templates/default/ViewLayout.jsp">
+  <stripes:layout-component name="content">
+    <jsp:include page="/templates/default/PageContent.jsp" />
+    <!--
+    <wiki:Include page="/templates/default/PageContent.jsp" />
+    -->
+  </stripes:layout-component>
+</stripes:layout-render>

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/LoginContent.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/LoginContent.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/LoginContent.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/LoginContent.jsp Wed Dec 17 13:51:09 2008
@@ -31,8 +31,9 @@
 <%--<wiki:Include page='LoginTab.jsp'/>--%>
 
 <stripes:form action="<%=postURL%>" id="login" class="wikiform" method="post" acceptcharset="UTF-8">
+  <stripes:param name="tab" value="logincontent" />
 
-<div class="center">
+  <div class="center">
 
   <h3><fmt:message key="login.heading.login"><fmt:param><wiki:Variable var="applicationname" /></fmt:param></fmt:message></h3>
 
@@ -56,8 +57,8 @@
     </tr>
     <% if( supportsCookieAuthentication ) { %>
     <tr>
-      <td><stripes:label for="j_remember" name="login.remember" /></td>
-      <td><stripes:checkbox name="j_remember" id="j_remember" /></td>
+      <td><stripes:label for="remember" name="login.remember" /></td>
+      <td><stripes:checkbox name="remember" id="j_remember" /></td>
     </tr>
     <% } %>
     <tr>
@@ -83,7 +84,7 @@
       </a>
     </div>
 
-</div>
+  </div>
 </stripes:form>
 
 </wiki:Tab>
@@ -92,8 +93,8 @@
 <wiki:Tab id="lostpassword" titleKey="login.lostpw.tab">
 
 <div class="center">
-<stripes:form action="/LostPassword.jsp" id="lostpw" class="wikiform" method="post" acceptcharset="UTF-8">
-
+<stripes:form beanclass="com.ecyrd.jspwiki.action.LoginActionBean" id="lostpw" class="wikiform" method="post" acceptcharset="UTF-8">
+  <stripes:param name="tab" value="lostpassword" />
   <h3><fmt:message key="login.lostpw.heading" /></h3>
 
   <c:choose>
@@ -119,8 +120,8 @@
     </tr>
     </c:if>
     <tr>
-      <td><stripes:label for="name" name="login.lostpw.name" /></td>
-      <td><stripes:text size="24" name="name" id="name" /></td>
+      <td><stripes:label for="email" name="login.lostpw.name" /></td>
+      <td><stripes:text size="24" name="email" id="email" /></td>
     </tr>
     <tr>
       <td>&nbsp;</td>
@@ -157,9 +158,7 @@
 
 <%-- Register new user profile --%>
 <wiki:Permission permission='editProfile'>
-<wiki:Tab id="profile" titleKey="login.register.tab">
-  <wiki:Include page='ProfileTab.jsp' />
-</wiki:Tab>
+<wiki:Tab id="profile" titleKey="login.register.tab" url="CreateProfile.jsp" />
 </wiki:Permission>
 
 <wiki:Tab id="loginhelp" titleKey="login.tab.help">

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/PreferencesContent.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/PreferencesContent.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/PreferencesContent.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/PreferencesContent.jsp Wed Dec 17 13:51:09 2008
@@ -1,14 +1,4 @@
 <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
-<%@ page import="com.ecyrd.jspwiki.*" %>
-<%@ page import="com.ecyrd.jspwiki.ui.*" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ page import="javax.servlet.jsp.jstl.fmt.*" %>
-<%@ page import="com.ecyrd.jspwiki.action.WikiContextFactory" %>
-<% 
-  WikiContext context = WikiContextFactory.findContext( pageContext ); 
-  TemplateManager.addResourceRequest( context, "script", "scripts/jspwiki-prefs.js" );
-%>
-
 <wiki:TabbedSection defaultTab="${param.tab}">
 
   <wiki:Tab id="prefs" titleKey="prefs.tab.prefs" accesskey="p">

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ProfileTab.jsp
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ProfileTab.jsp?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ProfileTab.jsp (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/webdocs/templates/default/ProfileTab.jsp Wed Dec 17 13:51:09 2008
@@ -1,20 +1,9 @@
 <%@ taglib uri="/WEB-INF/jspwiki.tld" prefix="wiki" %>
-<%@ page import="com.ecyrd.jspwiki.*" %>
-<%@ page import="com.ecyrd.jspwiki.auth.*" %>
-<%@ page import="com.ecyrd.jspwiki.auth.user.*" %>
-<%@ page errorPage="/Error.jsp" %>
+<%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="/WEB-INF/stripes.tld" prefix="stripes" %>
 <%@ page import="javax.servlet.jsp.jstl.fmt.*" %>
-<%@ page import="com.ecyrd.jspwiki.action.WikiContextFactory" %>
-<%
-  /* dateformatting not yet supported by wiki:UserProfile tag - diy */
-  WikiContext wikiContext = WikiContextFactory.findContext( pageContext );
-  UserManager manager = wikiContext.getEngine().getUserManager();
-  UserProfile profile = manager.getUserProfile( wikiContext.getWikiSession() );
-%>
-<stripes:form beanclass="com.ecyrd.jspwiki.action.UserPreferencesActionBean" id="editProfile" class="wikiform" method="post" acceptcharset="UTF-8">
+<stripes:form beanclass="com.ecyrd.jspwiki.action.UserProfileActionBean" id="editProfile" class="wikiform" method="post" acceptcharset="UTF-8">
       <stripes:param name="tab" value="profile" />
 
       <h3>
@@ -32,10 +21,11 @@
 
      <!-- Login name -->
      <tr>
-       <td><stripes:label for="loginname" name="prefs.loginname" /></td>
+       <td><stripes:label for="profile.loginName" name="prefs.loginname" /></td>
        <td>
          <wiki:UserProfile property="canChangeLoginName">
-           <stripes:text name="loginname" id="loginname" size="20"><wiki:UserProfile property="loginname" /></stripes:text>
+           <stripes:text name="profile.loginName" id="loginName" size="20"><wiki:UserProfile property="loginname" /></stripes:text>
+           <stripes:errors field="profile.loginName" />
          </wiki:UserProfile>
          <wiki:UserProfile property="!canChangeLoginName">
            <!-- If user can't change their login name, it's because the container manages the login -->
@@ -53,38 +43,37 @@
      <!-- Password; not displayed if container auth used -->
      <wiki:UserProfile property="canChangePassword">
        <tr>
-         <td><stripes:label for="password" name="prefs.password" /></td>
+         <td><stripes:label for="profile.password" name="prefs.password" /></td>
          <td>
-            <%--FIXME Enter Old PW to validate change flow, not yet treated by JSPWiki
-            <label for="password">Old</label>&nbsp;
-            <input type="password" name="password0" id="password0" size="20" value="" />
-            &nbsp;&nbsp;--%>
-            <stripes:password name="password" id="password" size="20" value="" />
+           <stripes:password name="profile.password" id="password" size="20" value="" />
+           <stripes:errors field="profile.password" />
           </td>
         </tr>
         <tr>
           <td><stripes:label for="passwordAgain" name="prefs.password2" /></td>
           <td>
-            <stripes:password name="passwordAgain" id="passwordAgain" size="20" value="" />
-            <%-- extra validation ? min size, allowed chars? --%>
+           <stripes:password name="passwordAgain" id="passwordAgain" size="20" value="" />
+           <stripes:errors field="profile.passwordAgain" />
          </td>
        </tr>
      </wiki:UserProfile>
 
      <!-- Full name -->
      <tr>
-       <td><stripes:label for="fullname" name="prefs.fullname" /></td>
+       <td><stripes:label for="profile.fullname" name="prefs.fullname" /></td>
        <td>
-         <stripes:text name="fullname" id="fullname" size="20"><wiki:UserProfile property="fullname" /></stripes:text>
+         <stripes:text name="profile.fullname" id="fullname" size="20"><wiki:UserProfile property="fullname" /></stripes:text>
+          <stripes:errors field="profile.fullname" />
          <div class="formhelp"><fmt:message key="prefs.fullname.description" /></div>
        </td>
      </tr>
 
      <!-- E-mail -->
      <tr>
-       <td><stripes:label for="email" name="prefs.email" /></td>
+       <td><stripes:label for="profile.email" name="prefs.email" /></td>
        <td>
-         <stripes:text name="email" id="email" size="20"><wiki:UserProfile property="email" /></stripes:text>
+         <stripes:text name="profile.email" id="email" size="20"><wiki:UserProfile property="email" /></stripes:text>
+         <stripes:errors field="profile.email" />
          <div class="formhelp"><fmt:message key="prefs.email.description" /></div>
        </td>
      </tr>
@@ -107,14 +96,14 @@
        <td><stripes:label name="prefs.creationdate" /></td>
        <td class="formvalue">
          <%--<wiki:UserProfile property="created"/>--%>
- 	     <fmt:formatDate value="<%= profile.getCreated() %>" pattern="${prefs.DateFormat}" timeZone="${prefs.TimeZone}" />
+ 	     <fmt:formatDate value="${profile.Created}" pattern="${prefs.DateFormat}" timeZone="${prefs.TimeZone}" />
        </td>
      </tr>
      <tr class="additinfo">
        <td><stripes:label name="prefs.profile.lastmodified" /></td>
        <td class="formvalue">
          <%--<wiki:UserProfile property="modified"/>--%>
- 	     <fmt:formatDate value="<%= profile.getLastModified() %>" pattern="${prefs.DateFormat}" timeZone="${prefs.TimeZone}" />
+ 	     <fmt:formatDate value="${profile.LastModified}" pattern="${prefs.DateFormat}" timeZone="${prefs.TimeZone}" />
        </td>
      </tr>
      </wiki:UserProfile>
@@ -123,10 +112,10 @@
        <td>&nbsp;</td>
        <td>
        <wiki:UserProfile property="exists">
-        <stripes:submit name="saveProfile"><fmt:message key="prefs.save.submit" /></stripes:submit>
+        <stripes:submit name="save"><fmt:message key="prefs.save.submit" /></stripes:submit>
        </wiki:UserProfile>
        <wiki:UserProfile property="new">
-        <stripes:submit name="saveProfile"><fmt:message key="prefs.save.submit" /></stripes:submit>
+        <stripes:submit name="save"><fmt:message key="prefs.save.submit" /></stripes:submit>
        </wiki:UserProfile>
 
        <wiki:UserCheck status="assertionsAllowed">

Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/SamplePlugin2.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/SamplePlugin2.java?rev=727526&r1=727525&r2=727526&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/SamplePlugin2.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/tests/SamplePlugin2.java Wed Dec 17 13:51:09 2008
@@ -1,3 +1,23 @@
+/*
+    JSPWiki - a JSP-based WikiWiki clone.
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.    
+ */
 import java.util.Map;
 
 import org.apache.jspwiki.api.PluginException;