You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by gi...@apache.org on 2022/07/12 20:59:46 UTC

[jspwiki-site] branch asf-site updated: Automatic Site Publish by Buildbot

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/jspwiki-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 1e523a322a Automatic Site Publish by Buildbot
1e523a322a is described below

commit 1e523a322af29c20cf1ff07614fadd741883af22
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Jul 12 20:59:38 2022 +0000

    Automatic Site Publish by Buildbot
---
 apidocs/2.11.3-SNAPSHOT/allclasses-index.html      |   10 +-
 apidocs/2.11.3-SNAPSHOT/deprecated-list.html       |    4 +-
 apidocs/2.11.3-SNAPSHOT/index-all.html             |   14 +-
 apidocs/2.11.3-SNAPSHOT/member-search-index.zip    |  Bin 46287 -> 46287 bytes
 .../org/apache/wiki/api/core/Acl.html              |    6 +-
 .../org/apache/wiki/api/core/Command.html          |    2 +-
 .../org/apache/wiki/api/core/Session.html          |    8 +-
 .../org/apache/wiki/api/core/class-use/Acl.html    |    2 +-
 .../apache/wiki/api/core/class-use/AclEntry.html   |    2 +-
 .../apache/wiki/api/core/class-use/Session.html    |    2 +-
 .../exceptions/NoRequiredPropertyException.html    |    2 +-
 .../api/exceptions/class-use/WikiException.html    |    2 +-
 .../wiki/api/exceptions/package-summary.html       |    2 +-
 .../apache/wiki/api/exceptions/package-use.html    |   16 +-
 .../org/apache/wiki/auth/SecurityVerifier.html     |    6 +-
 .../org/apache/wiki/auth/acl/Acl.html              |    2 +-
 .../org/apache/wiki/auth/acl/AclEntry.html         |    2 +-
 .../org/apache/wiki/auth/acl/AclImpl.html          |    4 +-
 .../apache/wiki/auth/acl/UnresolvedPrincipal.html  |    2 +-
 .../org/apache/wiki/auth/acl/package-summary.html  |    4 +-
 .../org/apache/wiki/auth/acl/package-use.html      |    6 +-
 .../org/apache/wiki/auth/authorize/Group.html      |    2 +-
 .../wiki/auth/authorize/JDBCGroupDatabase.html     |    2 +-
 .../apache/wiki/auth/authorize/WebAuthorizer.html  |    2 +-
 .../wiki/auth/authorize/package-summary.html       |    2 +-
 .../apache/wiki/auth/authorize/package-use.html    |    2 +-
 .../org/apache/wiki/auth/class-use/Authorizer.html |    2 +-
 .../org/apache/wiki/auth/user/UserDatabase.html    |    2 +-
 .../org/apache/wiki/event/WikiSecurityEvent.html   |    4 +-
 .../apache/wiki/htmltowiki/SyntaxDecorator.html    |    2 +-
 .../syntax/jspwiki/JSPWikiSyntaxDecorator.html     |    2 +-
 .../syntax/markdown/MarkdownSyntaxDecorator.html   |    2 +-
 .../org/apache/wiki/tags/CalendarTag.html          |    2 +-
 .../org/apache/wiki/tags/MessagesTag.html          |    4 +-
 .../org/apache/wiki/ui/PageCommand.html            |    2 +-
 .../org/apache/wiki/ui/WikiCommand.html            |    2 +-
 .../org/apache/wiki/util/CommentedProperties.html  |    4 +-
 .../org/apache/wiki/util/MailUtil.html             |    2 +-
 .../wiki/util/comparators/HumanComparator.html     |    2 +-
 .../org/apache/wiki/workflow/AbstractStep.html     |    2 +-
 .../org/apache/wiki/workflow/Step.html             |    2 +-
 .../org/apache/wiki/workflow/SystemPrincipal.html  |    2 +-
 .../org/apache/wiki/workflow/package-summary.html  |    2 +-
 apidocs/2.11.3-SNAPSHOT/overview-summary.html      |    2 +-
 apidocs/2.11.3-SNAPSHOT/package-search-index.zip   |  Bin 618 -> 618 bytes
 .../src-html/org/apache/wiki/api/core/Acl.html     |    6 +-
 .../src-html/org/apache/wiki/api/core/Command.html |    2 +-
 .../src-html/org/apache/wiki/api/core/Session.html |    6 +-
 .../exceptions/NoRequiredPropertyException.html    |    2 +-
 .../org/apache/wiki/auth/SecurityVerifier.html     | 1173 ++++++++++----------
 .../src-html/org/apache/wiki/auth/acl/Acl.html     |    2 +-
 .../org/apache/wiki/auth/acl/AclEntry.html         |    2 +-
 .../apache/wiki/auth/acl/UnresolvedPrincipal.html  |    2 +-
 .../org/apache/wiki/auth/authorize/Group.html      |    2 +-
 .../wiki/auth/authorize/JDBCGroupDatabase.html     |  534 +++++----
 .../apache/wiki/auth/authorize/WebAuthorizer.html  |    2 +-
 .../wiki/auth/permissions/WikiPermission.html      |   49 +-
 .../org/apache/wiki/auth/user/UserDatabase.html    |    2 +-
 .../org/apache/wiki/event/WikiSecurityEvent.html   |    4 +-
 .../apache/wiki/htmltowiki/SyntaxDecorator.html    |    2 +-
 .../src-html/org/apache/wiki/pages/PageSorter.html |    2 +-
 .../wiki/parser/CreoleToJSPWikiTranslator.html     |  313 +++---
 .../apache/wiki/parser/JSPWikiMarkupParser.html    |   41 +-
 .../org/apache/wiki/parser/LinkParser.Link.html    |    2 +-
 .../org/apache/wiki/parser/LinkParser.html         |    2 +-
 .../apache/wiki/plugin/AbstractReferralPlugin.html |    2 +-
 .../apache/wiki/plugin/ReferredPagesPlugin.html    |    2 +-
 .../wiki/tags/BreadcrumbsTag.FixedQueue.html       |    2 +-
 .../org/apache/wiki/tags/BreadcrumbsTag.html       |    2 +-
 .../src-html/org/apache/wiki/tags/CalendarTag.html |    2 +-
 .../src-html/org/apache/wiki/tags/CookieTag.html   |  199 ++--
 .../org/apache/wiki/tags/InsertDiffTag.html        |    2 +-
 .../src-html/org/apache/wiki/tags/MessagesTag.html |    4 +-
 .../src-html/org/apache/wiki/tags/ParamTag.html    |    2 +-
 .../org/apache/wiki/ui/admin/SimpleAdminBean.html  |   22 +-
 .../org/apache/wiki/util/CommentedProperties.html  |  229 ++--
 .../src-html/org/apache/wiki/util/CryptoUtil.html  |    6 +-
 .../src-html/org/apache/wiki/util/FormUtil.html    |    2 +-
 .../wiki/util/MailUtil.SmtpAuthenticator.html      |    2 +-
 .../src-html/org/apache/wiki/util/MailUtil.html    |    2 +-
 .../org/apache/wiki/util/PriorityList.html         |    4 +-
 .../org/apache/wiki/util/TimedCounterList.html     |   10 +-
 .../util/comparators/HumanComparator.CharType.html |   10 +-
 .../wiki/util/comparators/HumanComparator.html     |   10 +-
 .../src-html/org/apache/wiki/workflow/Step.html    |    2 +-
 .../org/apache/wiki/workflow/SystemPrincipal.html  |    2 +-
 apidocs/2.11.3-SNAPSHOT/type-search-index.zip      |  Bin 4526 -> 4526 bytes
 .../2.11.3-SNAPSHOT/cmp-jspwiki-210-adapters.html  |    2 +-
 .../cmp-jspwiki-210-test-adaptees.html             |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-api.html       |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-bootstrap.html |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-cache.html     |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-event.html     |    2 +-
 .../cmp-jspwiki-kendra-searchprovider.html         |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-main.html      |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-markdown.html  |    2 +-
 .../cmp-jspwiki-tika-searchprovider.html           |    2 +-
 japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-util.html      |    2 +-
 98 files changed, 1404 insertions(+), 1436 deletions(-)

diff --git a/apidocs/2.11.3-SNAPSHOT/allclasses-index.html b/apidocs/2.11.3-SNAPSHOT/allclasses-index.html
index 20ed3874f4..5be2e2f9a8 100644
--- a/apidocs/2.11.3-SNAPSHOT/allclasses-index.html
+++ b/apidocs/2.11.3-SNAPSHOT/allclasses-index.html
@@ -177,7 +177,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr id="i10" class="altColor">
 <td class="colFirst"><a href="org/apache/wiki/auth/acl/Acl.html" title="interface in org.apache.wiki.auth.acl">Acl</a></td>
 <th class="colLast" scope="row">Deprecated.
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </th>
 </tr>
 <tr id="i11" class="rowColor">
@@ -189,7 +189,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr id="i12" class="altColor">
 <td class="colFirst"><a href="org/apache/wiki/auth/acl/AclEntry.html" title="interface in org.apache.wiki.auth.acl">AclEntry</a></td>
 <th class="colLast" scope="row">Deprecated.
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </th>
 </tr>
 <tr id="i13" class="rowColor">
@@ -1818,7 +1818,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr id="i279" class="rowColor">
 <td class="colFirst"><a href="org/apache/wiki/api/exceptions/NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions">NoRequiredPropertyException</a></td>
 <th class="colLast" scope="row">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </th>
 </tr>
 <tr id="i280" class="altColor">
@@ -2630,7 +2630,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr id="i411" class="rowColor">
 <td class="colFirst"><a href="org/apache/wiki/workflow/SystemPrincipal.html" title="class in org.apache.wiki.workflow">SystemPrincipal</a></td>
 <th class="colLast" scope="row">
-<div class="block">System users asociated with workflow Task steps.</div>
+<div class="block">System users associated with workflow Task steps.</div>
 </th>
 </tr>
 <tr id="i412" class="altColor">
@@ -2919,7 +2919,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr id="i458" class="altColor">
 <td class="colFirst"><a href="org/apache/wiki/auth/authorize/WebAuthorizer.html" title="interface in org.apache.wiki.auth.authorize">WebAuthorizer</a></td>
 <th class="colLast" scope="row">
-<div class="block">Extends the <a href="org/apache/wiki/auth/Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="org/apache/wiki/auth/Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </th>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/deprecated-list.html b/apidocs/2.11.3-SNAPSHOT/deprecated-list.html
index 783230871a..61b3c5917f 100644
--- a/apidocs/2.11.3-SNAPSHOT/deprecated-list.html
+++ b/apidocs/2.11.3-SNAPSHOT/deprecated-list.html
@@ -124,13 +124,13 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="rowColor">
 <th class="colDeprecatedItemName" scope="row"><a href="org/apache/wiki/auth/acl/Acl.html" title="interface in org.apache.wiki.auth.acl">org.apache.wiki.auth.acl.Acl</a></th>
 <td class="colLast">
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </td>
 </tr>
 <tr class="altColor">
 <th class="colDeprecatedItemName" scope="row"><a href="org/apache/wiki/auth/acl/AclEntry.html" title="interface in org.apache.wiki.auth.acl">org.apache.wiki.auth.acl.AclEntry</a></th>
 <td class="colLast">
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/index-all.html b/apidocs/2.11.3-SNAPSHOT/index-all.html
index 0c2343d9b0..747d1c12ea 100644
--- a/apidocs/2.11.3-SNAPSHOT/index-all.html
+++ b/apidocs/2.11.3-SNAPSHOT/index-all.html
@@ -227,7 +227,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dt><a href="org/apache/wiki/auth/acl/Acl.html" title="interface in org.apache.wiki.auth.acl"><span class="typeNameLink">Acl</span></a> - Interface in <a href="org/apache/wiki/auth/acl/package-summary.html">org.apache.wiki.auth.acl</a></dt>
 <dd>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/auth/acl/DefaultAclManager.html#ACL_PATTERN">ACL_PATTERN</a></span> - Static variable in class org.apache.wiki.auth.acl.<a href="org/apache/wiki/auth/acl/DefaultAclManager.html" title="class in org.apache.wiki.auth.acl">DefaultAclManager</a></dt>
@@ -250,7 +250,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dt><a href="org/apache/wiki/auth/acl/AclEntry.html" title="interface in org.apache.wiki.auth.acl"><span class="typeNameLink">AclEntry</span></a> - Interface in <a href="org/apache/wiki/auth/acl/package-summary.html">org.apache.wiki.auth.acl</a></dt>
 <dd>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="org/apache/wiki/api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </div>
 </dd>
 <dt><a href="org/apache/wiki/auth/acl/AclEntryImpl.html" title="class in org.apache.wiki.auth.acl"><span class="typeNameLink">AclEntryImpl</span></a> - Class in <a href="org/apache/wiki/auth/acl/package-summary.html">org.apache.wiki.auth.acl</a></dt>
@@ -3153,7 +3153,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dt><span class="memberNameLink"><a href="org/apache/wiki/api/core/Session.html#doPrivileged(org.apache.wiki.api.core.Session,java.security.PrivilegedAction)">doPrivileged(Session, PrivilegedAction&lt;?&gt;)</a></span> - Static method in interface org.apache.wiki.api.core.<a href="org/apache/wiki/api/core/Session.html" title="interface in org.apache.wiki.api.core">Session</a></dt>
 <dd>
 <div class="block">Wrapper for <code>Subject.doAsPrivileged(Subject, PrivilegedAction, java.security.AccessControlContext)</code>
- that executes an action with the privileges posssessed by a Session's Subject.</div>
+ that executes an action with the privileges possessed by a Session's Subject.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/rpc/atom/AtomAPIServlet.html#doPut(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)">doPut(HttpServletRequest, HttpServletResponse)</a></span> - Method in class org.apache.wiki.rpc.atom.<a href="org/apache/wiki/rpc/atom/AtomAPIServlet.html" title="class in org.apache.wiki.rpc.atom">AtomAPIServlet</a></dt>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/url/DefaultURLConstructor.html#doReplacement(java.lang.String,java.lang.String)">doReplacement(String, String)</a></span> - Method in class org.apache.wiki.url.<a href="org/apache/wiki/url/DefaultURLConstructor.html" title="class in org.apache.wiki.url">DefaultURLConstructor</a></dt>
@@ -6626,7 +6626,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/event/WikiSecurityEvent.html#getPrincipal()">getPrincipal()</a></span> - Method in class org.apache.wiki.event.<a href="org/apache/wiki/event/WikiSecurityEvent.html" title="class in org.apache.wiki.event">WikiSecurityEvent</a></dt>
 <dd>
-<div class="block">Returns the principal to whom the opeation applied, if supplied.</div>
+<div class="block">Returns the principal to whom the operation applied, if supplied.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/api/core/Session.html#getPrincipals()">getPrincipals()</a></span> - Method in interface org.apache.wiki.api.core.<a href="org/apache/wiki/api/core/Session.html" title="interface in org.apache.wiki.api.core">Session</a></dt>
 <dd>
@@ -10916,7 +10916,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </dd>
 <dt><a href="org/apache/wiki/api/exceptions/NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions"><span class="typeNameLink">NoRequiredPropertyException</span></a> - Exception in <a href="org/apache/wiki/api/exceptions/package-summary.html">org.apache.wiki.api.exceptions</a></dt>
 <dd>
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/wiki/api/exceptions/NoRequiredPropertyException.html#%3Cinit%3E(java.lang.String,java.lang.String)">NoRequiredPropertyException(String, String)</a></span> - Constructor for exception org.apache.wiki.api.exceptions.<a href="org/apache/wiki/api/exceptions/NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions">NoRequiredPropertyException</a></dt>
 <dd>
@@ -15457,7 +15457,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 </dd>
 <dt><a href="org/apache/wiki/workflow/SystemPrincipal.html" title="class in org.apache.wiki.workflow"><span class="typeNameLink">SystemPrincipal</span></a> - Class in <a href="org/apache/wiki/workflow/package-summary.html">org.apache.wiki.workflow</a></dt>
 <dd>
-<div class="block">System users asociated with workflow Task steps.</div>
+<div class="block">System users associated with workflow Task steps.</div>
 </dd>
 </dl>
 <a id="I:T">
@@ -16491,7 +16491,7 @@ the order they are declared.</div>
 </dd>
 <dt><a href="org/apache/wiki/auth/authorize/WebAuthorizer.html" title="interface in org.apache.wiki.auth.authorize"><span class="typeNameLink">WebAuthorizer</span></a> - Interface in <a href="org/apache/wiki/auth/authorize/package-summary.html">org.apache.wiki.auth.authorize</a></dt>
 <dd>
-<div class="block">Extends the <a href="org/apache/wiki/auth/Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="org/apache/wiki/auth/Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </dd>
 <dt><a href="org/apache/wiki/auth/authorize/WebContainerAuthorizer.html" title="class in org.apache.wiki.auth.authorize"><span class="typeNameLink">WebContainerAuthorizer</span></a> - Class in <a href="org/apache/wiki/auth/authorize/package-summary.html">org.apache.wiki.auth.authorize</a></dt>
diff --git a/apidocs/2.11.3-SNAPSHOT/member-search-index.zip b/apidocs/2.11.3-SNAPSHOT/member-search-index.zip
index b573490e94..4e7a884270 100644
Binary files a/apidocs/2.11.3-SNAPSHOT/member-search-index.zip and b/apidocs/2.11.3-SNAPSHOT/member-search-index.zip differ
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Acl.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Acl.html
index 6a0e2bd636..47828bf23f 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Acl.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Acl.html
@@ -148,7 +148,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  This interface is a highly stripped-down derivation of the java.security.acl.Acl interface. In particular, the notion of an Acl "owner"
  has been eliminated, since JSPWiki pages do not have owners. An additional simplification compared to the standard Java package is that
  negative permissions have been eliminated. Instead, JSPWiki assumes a "default-deny" security stance: principals are granted no 
- permissions by default, and posesses only those that have been explicitly granted to them. And finally, the getPermissions() and 
+ permissions by default, and possesses only those that have been explicitly granted to them. And finally, the getPermissions() and
  checkPermission() methods have been eliminated due to the complexities associated with resolving Role principal membership.
  </p></div>
 <dl>
@@ -290,14 +290,14 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <li class="blockList">
 <h4>findPrincipals</h4>
 <pre class="methodSignature">java.security.Principal[]&nbsp;<a href="../../../../../src-html/org/apache/wiki/api/core/Acl.html#line.83">findPrincipals</a>&#8203;(java.security.Permission&nbsp;permission)</pre>
-<div class="block">Returns all Principal objects assigned a given Permission in the access control list. The Princiapls returned are those that
+<div class="block">Returns all Principal objects assigned a given Permission in the access control list. The Principals returned are those that
  have been granted either the supplied permission, or a permission implied by the supplied permission. Principals are not
  "expanded" if they are a role or group.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>permission</code> - the permission to search for</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>an array of Principals posessing the permission</dd>
+<dd>an array of Principals possessing the permission</dd>
 </dl>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Command.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Command.html
index cc47f09393..30a245f301 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Command.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Command.html
@@ -349,7 +349,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <li class="blockList">
 <h4>requiredPermission</h4>
 <pre class="methodSignature">java.security.Permission&nbsp;<a href="../../../../../src-html/org/apache/wiki/api/core/Command.html#line.113">requiredPermission</a>()</pre>
-<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns
+<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is required, this method returns
  <code>null</code>. For example, the static command <code>org.apache.wiki.ui.PageCommand#VIEW</code> doesn't require a permission because
  it isn't referring to a particular WikiPage. However, if this command targets a WikiPage called <code>Main</code>(via
  <code>org.apache.wiki.ui.PageCommand#targetedCommand(Object)</code>, the resulting Command would require the permission
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Session.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Session.html
index 00d2ffe514..35714b0bff 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Session.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/Session.html
@@ -134,7 +134,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <object type="image/svg+xml" data="Session.svg"  style="max-width:60%;float:right;"></object>
 <pre style="white-space:pre-wrap;">public interface <a href="../../../../../src-html/org/apache/wiki/api/core/Session.html#line.60">Session</a>
 extends <a href="../../event/WikiEventListener.html" title="interface in org.apache.wiki.event">WikiEventListener</a></pre>
-<div class="block"><p>Represents a long-running wiki session, with an associated user Principal, user Subject, and authentication status. The sesion
+<div class="block"><p>Represents a long-running wiki session, with an associated user Principal, user Subject, and authentication status. The session
  is initialized with minimal, default-deny values: authentication is set to <code>false</code>, and the user principal is set to
  <code>null</code>.</p>
  <p>The Session allows callers to:</p>
@@ -148,7 +148,7 @@ extends <a href="../../event/WikiEventListener.html" title="interface in org.apa
      <a href="#addMessage(java.lang.String)"><code>addMessage(String)</code></a>, <a href="#getMessages(java.lang.String)"><code>getMessages(String)</code></a>
      and <a href="#clearMessages(java.lang.String)"><code>clearMessages(String)</code></a></li>
  </ul>
- <p>To keep track of the Principals each user posseses, each Session stores a JAAS Subject. Various login processes add or
+ <p>To keep track of the Principals each user possesses, each Session stores a JAAS Subject. Various login processes add or
  remove Principals when users authenticate or log out.</p>
  <p>Session extends the <a href="../../event/WikiEventListener.html" title="interface in org.apache.wiki.event"><code>WikiEventListener</code></a> interface and listens for group add/change/delete
  events fired by event sources the Session is registered with: <a href="../../auth/AuthenticationManager.html" title="interface in org.apache.wiki.auth"><code>AuthenticationManager</code></a>,
@@ -256,7 +256,7 @@ extends <a href="../../event/WikiEventListener.html" title="interface in org.apa
             java.security.PrivilegedAction&lt;?&gt;&nbsp;action)</code></th>
 <td class="colLast">
 <div class="block">Wrapper for <code>Subject.doAsPrivileged(Subject, PrivilegedAction, java.security.AccessControlContext)</code>
- that executes an action with the privileges posssessed by a Session's Subject.</div>
+ that executes an action with the privileges possessed by a Session's Subject.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
@@ -737,7 +737,7 @@ extends <a href="../../event/WikiEventListener.html" title="interface in org.apa
                                      java.security.PrivilegedAction&lt;?&gt;&nbsp;action)
                               throws java.security.AccessControlException</pre>
 <div class="block">Wrapper for <code>Subject.doAsPrivileged(Subject, PrivilegedAction, java.security.AccessControlContext)</code>
- that executes an action with the privileges posssessed by a Session's Subject. The action executes with a <code>null</code>
+ that executes an action with the privileges possessed by a Session's Subject. The action executes with a <code>null</code>
  AccessControlContext, which has the effect of running it "cleanly" without the AccessControlContexts of the caller.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Acl.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Acl.html
index adc02781b6..389ed9a042 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Acl.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Acl.html
@@ -252,7 +252,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../auth/acl/Acl.html" title="interface in org.apache.wiki.auth.acl">Acl</a></span></code></th>
 <td class="colLast">
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/AclEntry.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/AclEntry.html
index 3d03b4fef3..8fc0f7ef0c 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/AclEntry.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/AclEntry.html
@@ -246,7 +246,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../../../auth/acl/AclEntry.html" title="interface in org.apache.wiki.auth.acl">AclEntry</a></span></code></th>
 <td class="colLast">
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Session.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Session.html
index cd2a21a8f8..b90689b855 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Session.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/core/class-use/Session.html
@@ -234,7 +234,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
             java.security.PrivilegedAction&lt;?&gt;&nbsp;action)</code></th>
 <td class="colLast">
 <div class="block">Wrapper for <code>Subject.doAsPrivileged(Subject, PrivilegedAction, java.security.AccessControlContext)</code>
- that executes an action with the privileges posssessed by a Session's Subject.</div>
+ that executes an action with the privileges possessed by a Session's Subject.</div>
 </td>
 </tr>
 </tbody>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
index 3cb55aca6b..dda46818c2 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
@@ -147,7 +147,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <object type="image/svg+xml" data="NoRequiredPropertyException.svg"  style="max-width:60%;float:right;"></object>
 <pre style="white-space:pre-wrap;">public class <a href="../../../../../src-html/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html#line.29">NoRequiredPropertyException</a>
 extends <a href="WikiException.html" title="class in org.apache.wiki.api.exceptions">WikiException</a></pre>
-<div class="block">Marks an erroneus jspwiki.properties file.  Certain properties have been marked as "required", and if you 
+<div class="block">Marks an erroneous jspwiki.properties file.  Certain properties have been marked as "required", and if you
   do not provide a good value for a property, you'll see this exception.
   <P>
   Check <TT>jspwiki.properties</TT> for the required properties.</div>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/class-use/WikiException.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/class-use/WikiException.html
index 00f17536b1..de2fda04ca 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/class-use/WikiException.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/class-use/WikiException.html
@@ -338,7 +338,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <td class="colFirst"><code>class&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions">NoRequiredPropertyException</a></span></code></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="altColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-summary.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-summary.html
index 061eadfb5d..df5e7567ed 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-summary.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-summary.html
@@ -126,7 +126,7 @@ This package holds all the exceptions used by JSPWiki APIs.
 <tr class="rowColor">
 <th class="colFirst" scope="row"><a href="NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="altColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-use.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-use.html
index e6d97290be..7204ad175f 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-use.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/api/exceptions/package-use.html
@@ -287,7 +287,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -425,7 +425,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.api.providers">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -500,7 +500,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.auth.authorize">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 </tbody>
@@ -519,7 +519,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.auth.user">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -589,7 +589,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.diff">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 </tbody>
@@ -733,7 +733,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.providers">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -808,7 +808,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="rowColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.search">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -833,7 +833,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/NoRequiredPropertyException.html#org.apache.wiki.search.kendra">NoRequiredPropertyException</a></th>
 <td class="colLast">
-<div class="block">Marks an erroneus jspwiki.properties file.</div>
+<div class="block">Marks an erroneous jspwiki.properties file.</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/SecurityVerifier.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/SecurityVerifier.html
index edd9f78fa0..840285b75b 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/SecurityVerifier.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/SecurityVerifier.html
@@ -697,7 +697,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>containerRoleTable</h4>
-<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.343">containerRoleTable</a>()
+<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.342">containerRoleTable</a>()
                                     throws <a href="../api/exceptions/WikiException.html" title="class in org.apache.wiki.api.exceptions">WikiException</a></pre>
 <div class="block">Formats and returns an HTML table containing the roles the web container
  is aware of, and whether each role maps to particular JSPs. This method
@@ -717,7 +717,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isSecurityPolicyConfigured</h4>
-<pre class="methodSignature">public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.418">isSecurityPolicyConfigured</a>()</pre>
+<pre class="methodSignature">public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.417">isSecurityPolicyConfigured</a>()</pre>
 <div class="block">Returns <code>true</code> if the Java security policy is configured
  correctly, and it verifies as valid.</div>
 <dl>
@@ -732,7 +732,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>webContainerRoles</h4>
-<pre class="methodSignature">public&nbsp;java.security.Principal[]&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.429">webContainerRoles</a>()
+<pre class="methodSignature">public&nbsp;java.security.Principal[]&nbsp;<a href="../../../../src-html/org/apache/wiki/auth/SecurityVerifier.html#line.428">webContainerRoles</a>()
                                             throws <a href="../api/exceptions/WikiException.html" title="class in org.apache.wiki.api.exceptions">WikiException</a></pre>
 <div class="block">If the active Authorizer is the WebContainerAuthorizer, returns the roles it knows about; otherwise, a zero-length array.</div>
 <dl>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/Acl.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/Acl.html
index 07928b67c1..068303aa94 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/Acl.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/Acl.html
@@ -136,7 +136,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 public interface <a href="../../../../../src-html/org/apache/wiki/auth/acl/Acl.html#line.38">Acl</a>
 extends <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core">Acl</a></pre>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </div>
 <div class="block"><p>
  Deprecated, interface kept in order to keep backwards compatibility with versions up to 2.11.0.M6. <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclEntry.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclEntry.html
index c063abc4f2..b669ede4fb 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclEntry.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclEntry.html
@@ -130,7 +130,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 public interface <a href="../../../../../src-html/org/apache/wiki/auth/acl/AclEntry.html#line.34">AclEntry</a>
 extends <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core">AclEntry</a></pre>
 <div class="deprecationBlock"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </div>
 <div class="block"><p>
  Deprecated, interface kept in order to keep backwards compatibility with versions up to 2.11.0.M6. <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclImpl.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclImpl.html
index 5659701b61..d027a16b97 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclImpl.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/AclImpl.html
@@ -293,7 +293,7 @@ implements <a href="Acl.html" title="interface in org.apache.wiki.auth.acl">Acl<
 <li class="blockList">
 <h4>findPrincipals</h4>
 <pre class="methodSignature">public&nbsp;java.security.Principal[]&nbsp;<a href="../../../../../src-html/org/apache/wiki/auth/acl/AclImpl.html#line.49">findPrincipals</a>&#8203;(java.security.Permission&nbsp;permission)</pre>
-<div class="block">Returns all Principal objects assigned a given Permission in the access control list. The Princiapls returned are those that
+<div class="block">Returns all Principal objects assigned a given Permission in the access control list. The Principals returned are those that
  have been granted either the supplied permission, or a permission implied by the supplied permission. Principals are not
  "expanded" if they are a role or group.</div>
 <dl>
@@ -302,7 +302,7 @@ implements <a href="Acl.html" title="interface in org.apache.wiki.auth.acl">Acl<
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>permission</code> - the permission to search for</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>an array of Principals posessing the permission</dd>
+<dd>an array of Principals possessing the permission</dd>
 </dl>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/UnresolvedPrincipal.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
index 830e462eba..a4d685f139 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
@@ -144,7 +144,7 @@ implements java.security.Principal, java.io.Serializable</pre>
  manager, and built-in role definitions.
  Creating a principal marked "unresolved" allows
  delayed resolution, which enables principals to be resolved
- lazily during a later access control check. Conceptuallly,
+ lazily during a later access control check. Conceptually,
  UnresolvedPrincipal performs a function similar to
  <code>UnresolvedPermission</code>.</div>
 <dl>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-summary.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-summary.html
index f6b3840460..b9b5ab76f3 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-summary.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-summary.html
@@ -120,13 +120,13 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="Acl.html" title="interface in org.apache.wiki.auth.acl">Acl</a></th>
 <td class="colLast">Deprecated.
-<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </td>
 </tr>
 <tr class="rowColor">
 <th class="colFirst" scope="row"><a href="AclEntry.html" title="interface in org.apache.wiki.auth.acl">AclEntry</a></th>
 <td class="colLast">Deprecated.
-<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </td>
 </tr>
 <tr class="altColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-use.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-use.html
index b463611f03..1b08b4eea6 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-use.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/acl/package-use.html
@@ -134,7 +134,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <th class="colFirst" scope="row"><a href="class-use/Acl.html#org.apache.wiki">Acl</a></th>
 <td class="colLast">
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </div>
 </td>
 </tr>
@@ -161,7 +161,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <th class="colFirst" scope="row"><a href="class-use/Acl.html#org.apache.wiki.auth.acl">Acl</a></th>
 <td class="colLast">
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/Acl.html" title="interface in org.apache.wiki.api.core"><code>Acl</code></a> instead</div>
 </div>
 </td>
 </tr>
@@ -169,7 +169,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <th class="colFirst" scope="row"><a href="class-use/AclEntry.html#org.apache.wiki.auth.acl">AclEntry</a></th>
 <td class="colLast">
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
-<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> insteaad</div>
+<div class="deprecationComment">use <a href="../../api/core/AclEntry.html" title="interface in org.apache.wiki.api.core"><code>AclEntry</code></a> instead</div>
 </div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/Group.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/Group.html
index ed2d312c8f..a682e7f621 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/Group.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/Group.html
@@ -572,7 +572,7 @@ extends java.lang.Object</pre>
  return the same value as one of the Principals in the group member list. The Principal's type does <em>not</em> need to match.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>principal</code> - the principal about whom membeship status is sought</dd>
+<dd><code>principal</code> - the principal about whom membership status is sought</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the result of the operation</dd>
 </dl>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
index 9ef652c777..8224b98ab1 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
@@ -845,7 +845,7 @@ implements <a href="GroupDatabase.html" title="interface in org.apache.wiki.auth
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initialize</h4>
-<pre class="methodSignature">public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html#line.449">initialize</a>&#8203;(<a href="../../api/core/Engine.html" title="interface in org.apache.wiki.api.core">Engine</a>&nbsp;engine,
+<pre class="methodSignature">public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html#line.447">initialize</a>&#8203;(<a href="../../api/core/Engine.html" title="interface in org.apache.wiki.api.core">Engine</a>&nbsp;engine,
                        java.util.Properties&nbsp;props)
                 throws <a href="../../api/exceptions/NoRequiredPropertyException.html" title="class in org.apache.wiki.api.exceptions">NoRequiredPropertyException</a>,
                        <a href="../WikiSecurityException.html" title="class in org.apache.wiki.auth">WikiSecurityException</a></pre>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/WebAuthorizer.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/WebAuthorizer.html
index a374e1a1c9..2a586dc862 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/WebAuthorizer.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/WebAuthorizer.html
@@ -134,7 +134,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <object type="image/svg+xml" data="WebAuthorizer.svg"  style="max-width:60%;float:right;"></object>
 <pre style="white-space:pre-wrap;">public interface <a href="../../../../../src-html/org/apache/wiki/auth/authorize/WebAuthorizer.html#line.31">WebAuthorizer</a>
 extends <a href="../Authorizer.html" title="interface in org.apache.wiki.auth">Authorizer</a></pre>
-<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-summary.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-summary.html
index 635bdf95f8..3da0b12587 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-summary.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-summary.html
@@ -136,7 +136,7 @@ group management.</p>
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="WebAuthorizer.html" title="interface in org.apache.wiki.auth.authorize">WebAuthorizer</a></th>
 <td class="colLast">
-<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-use.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-use.html
index 9c1ffac1ef..79357755ee 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-use.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/authorize/package-use.html
@@ -189,7 +189,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="class-use/WebAuthorizer.html#org.apache.wiki.auth.authorize">WebAuthorizer</a></th>
 <td class="colLast">
-<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/class-use/Authorizer.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/class-use/Authorizer.html
index bfc59558d3..f472da46da 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/class-use/Authorizer.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/class-use/Authorizer.html
@@ -185,7 +185,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="../authorize/WebAuthorizer.html" title="interface in org.apache.wiki.auth.authorize">WebAuthorizer</a></span></code></th>
 <td class="colLast">
-<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delgate method for
+<div class="block">Extends the <a href="../Authorizer.html" title="interface in org.apache.wiki.auth"><code>Authorizer</code></a> interface by including a delegate method for
  <code>HttpServletRequest.isUserInRole(String)</code>.</div>
 </td>
 </tr>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/user/UserDatabase.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/user/UserDatabase.html
index 7b2e6c2ffe..7869e19212 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/user/UserDatabase.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/auth/user/UserDatabase.html
@@ -311,7 +311,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  a user with the supplied identifier, throws a <a href="../NoSuchPrincipalException.html" title="class in org.apache.wiki.auth"><code>NoSuchPrincipalException</code></a>.
  </p>
  <p>
- Note that if an implememtation wishes to mark one of the returned Principals as representing the user's common name, it should
+ Note that if an implementation wishes to mark one of the returned Principals as representing the user's common name, it should
  instantiate this Principal using <a href="../WikiPrincipal.html#%3Cinit%3E(java.lang.String,java.lang.String)"><code>WikiPrincipal(String, String)</code></a> with the <code>type</code>
  parameter set to <a href="../WikiPrincipal.html#WIKI_NAME"><code>WikiPrincipal.WIKI_NAME</code></a>. The method
  <a href="../../api/core/Session.html#getUserPrincipal()"><code>Session.getUserPrincipal()</code></a> will return this principal as the "primary" principal. Note that this method
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/event/WikiSecurityEvent.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/event/WikiSecurityEvent.html
index b52dec77ab..59f3ace0be 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/event/WikiSecurityEvent.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/event/WikiSecurityEvent.html
@@ -398,7 +398,7 @@ extends <a href="WikiEvent.html" title="class in org.apache.wiki.event">WikiEven
 <td class="colFirst"><code>java.lang.Object</code></td>
 <th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPrincipal()">getPrincipal</a></span>()</code></th>
 <td class="colLast">
-<div class="block">Returns the principal to whom the opeation applied, if supplied.</div>
+<div class="block">Returns the principal to whom the operation applied, if supplied.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
@@ -766,7 +766,7 @@ extends <a href="WikiEvent.html" title="class in org.apache.wiki.event">WikiEven
 <li class="blockList">
 <h4>getPrincipal</h4>
 <pre class="methodSignature">public&nbsp;java.lang.Object&nbsp;<a href="../../../../src-html/org/apache/wiki/event/WikiSecurityEvent.html#line.172">getPrincipal</a>()</pre>
-<div class="block">Returns the principal to whom the opeation applied, if supplied. This method may return <code>null</code>
+<div class="block">Returns the principal to whom the operation applied, if supplied. This method may return <code>null</code>
  <em>&#8212; and calling methods should check for this condition</em>.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/SyntaxDecorator.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/SyntaxDecorator.html
index 3c2446bafd..c2a22d0dd8 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/SyntaxDecorator.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/SyntaxDecorator.html
@@ -478,7 +478,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <dd><code>preStack</code> - stack containing the amount of nested <code>pre</code>s.</dd>
 <dd><code>outTrimmer</code> - writer capable of trimming whitespaces and of checking if it's currently writing a line start.</dd>
 <dd><code>config</code> - xhtml to wiki configuration object.</dd>
-<dd><code>chain</code> - chain (in the chain of responsabilities pattern) that is expected to be called by the different xhtml decorations.</dd>
+<dd><code>chain</code> - chain (in the chain of responsibilities patterns) that is expected to be called by the different xhtml decorations.</dd>
 </dl>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.html
index 5fc5c616ab..9f7e7dc14a 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/jspwiki/JSPWikiSyntaxDecorator.html
@@ -284,7 +284,7 @@ extends <a href="../WikiSyntaxDecorator.html" title="class in org.apache.wiki.ht
 <dd><code>preStack</code> - stack containing the amount of nested <code>pre</code>s.</dd>
 <dd><code>outTrimmer</code> - writer capable of trimming whitespaces and of checking if it's currently writing a line start.</dd>
 <dd><code>config</code> - xhtml to wiki configuration object.</dd>
-<dd><code>chain</code> - chain (in the chain of responsabilities pattern) that is expected to be called by the different xhtml decorations.</dd>
+<dd><code>chain</code> - chain (in the chain of responsibilities patterns) that is expected to be called by the different xhtml decorations.</dd>
 </dl>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.html
index 7a0b1bff3a..4a6db0f447 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/htmltowiki/syntax/markdown/MarkdownSyntaxDecorator.html
@@ -284,7 +284,7 @@ extends <a href="../WikiSyntaxDecorator.html" title="class in org.apache.wiki.ht
 <dd><code>preStack</code> - stack containing the amount of nested <code>pre</code>s.</dd>
 <dd><code>outTrimmer</code> - writer capable of trimming whitespaces and of checking if it's currently writing a line start.</dd>
 <dd><code>config</code> - xhtml to wiki configuration object.</dd>
-<dd><code>chain</code> - chain (in the chain of responsabilities pattern) that is expected to be called by the different xhtml decorations.</dd>
+<dd><code>chain</code> - chain (in the chain of responsibilities patterns) that is expected to be called by the different xhtml decorations.</dd>
 </dl>
 </li>
 </ul>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/CalendarTag.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/CalendarTag.html
index 07e2d4901e..91d2bf29b9 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/CalendarTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/CalendarTag.html
@@ -361,7 +361,7 @@ extends <a href="WikiTagBase.html" title="class in org.apache.wiki.tags">WikiTag
 <div class="block">Sets the page format.  If a page corresponding to the format is found when
   the calendar is being rendered, a link to that page is created.  E.g. if the
   format is set to <tt>'Main_blogentry_'ddMMyy</tt>, it works nicely in
-  conjuction to the WeblogPlugin.</div>
+  conjunction to the WeblogPlugin.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>format</code> - The format in the SimpleDateFormat fashion.</dd>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/MessagesTag.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/MessagesTag.html
index 5da7aab553..4dea73d123 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/MessagesTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/tags/MessagesTag.html
@@ -150,13 +150,13 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 extends <a href="WikiTagBase.html" title="class in org.apache.wiki.tags">WikiTagBase</a></pre>
 <div class="block">Returns or clears the current messages associated with the user's wiki
  session. This tag accepts four attributes: <ul> <li><code>action</code> -
- if "clear", the messsages will be cleared. Otherwise, this tag will always
+ if "clear", the messages will be cleared. Otherwise, this tag will always
  print the set of current messages as either a single &lt;p&gt; tag (if there
  is only one message) or a bulleted list (if there is more than one).</li>
  <li><code>prefix</code> - the string to prepend to the list of errors, if
  there are any; default is empty string</li> <li><code>topic</code> - a
  collection for messages, for example those associated with a particular web
- form. If not suppled, defaults to a generic (non-specific) collection</li>
+ form. If not supplied, defaults to a generic (non-specific) collection</li>
  <li><code>div</code> - the <code>div</code> class to wrap the
  messages in; if not supplied, <code>information</code> is assumed</li></ul></div>
 <dl>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/PageCommand.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/PageCommand.html
index 17aa11df95..da399c4fa3 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/PageCommand.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/PageCommand.html
@@ -499,7 +499,7 @@ extends <a href="AbstractCommand.html" title="class in org.apache.wiki.ui">Abstr
 <h4>requiredPermission</h4>
 <pre class="methodSignature">public&nbsp;java.security.Permission&nbsp;<a href="../../../../src-html/org/apache/wiki/ui/PageCommand.html#line.123">requiredPermission</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../api/core/Command.html#requiredPermission()">Command</a></code></span></div>
-<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns
+<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is required, this method returns
  <code>null</code>. For example, the static command <code>org.apache.wiki.ui.PageCommand#VIEW</code> doesn't require a permission because
  it isn't referring to a particular WikiPage. However, if this command targets a WikiPage called <code>Main</code>(via
  <code>org.apache.wiki.ui.PageCommand#targetedCommand(Object)</code>, the resulting Command would require the permission
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/WikiCommand.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/WikiCommand.html
index 38ae5d3c31..319ad95cb6 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/WikiCommand.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/ui/WikiCommand.html
@@ -444,7 +444,7 @@ extends <a href="AbstractCommand.html" title="class in org.apache.wiki.ui">Abstr
 <h4>requiredPermission</h4>
 <pre class="methodSignature">public&nbsp;java.security.Permission&nbsp;<a href="../../../../src-html/org/apache/wiki/ui/WikiCommand.html#line.143">requiredPermission</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../api/core/Command.html#requiredPermission()">Command</a></code></span></div>
-<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns
+<div class="block">Returns the Permission required to successfully execute this Command. If no Permission is required, this method returns
  <code>null</code>. For example, the static command <code>org.apache.wiki.ui.PageCommand#VIEW</code> doesn't require a permission because
  it isn't referring to a particular WikiPage. However, if this command targets a WikiPage called <code>Main</code>(via
  <code>org.apache.wiki.ui.PageCommand#targetedCommand(Object)</code>, the resulting Command would require the permission
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/CommentedProperties.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/CommentedProperties.html
index d91b64f5d2..e4c75901b6 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/CommentedProperties.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/CommentedProperties.html
@@ -436,7 +436,7 @@ extends java.util.Properties</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre class="methodSignature">public&nbsp;java.lang.Object&nbsp;<a href="../../../../src-html/org/apache/wiki/util/CommentedProperties.html#line.144">remove</a>&#8203;(java.lang.Object&nbsp;key)</pre>
+<pre class="methodSignature">public&nbsp;java.lang.Object&nbsp;<a href="../../../../src-html/org/apache/wiki/util/CommentedProperties.html#line.143">remove</a>&#8203;(java.lang.Object&nbsp;key)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>remove</code>&nbsp;in interface&nbsp;<code>java.util.Map&lt;java.lang.Object,&#8203;java.lang.Object&gt;</code></dd>
@@ -451,7 +451,7 @@ extends java.util.Properties</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;<a href="../../../../src-html/org/apache/wiki/util/CommentedProperties.html#line.157">toString</a>()</pre>
+<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;<a href="../../../../src-html/org/apache/wiki/util/CommentedProperties.html#line.156">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>java.util.Properties</code></dd>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/MailUtil.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/MailUtil.html
index 6dc450a507..ac419e5575 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/MailUtil.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/MailUtil.html
@@ -144,7 +144,7 @@ extends java.lang.Object</pre>
  <code>jspwiki.properties</code>.</p>
  <p>To enable e-mail functions within JSPWiki, administrators must do three things:
  ensure that the required JavaMail JARs are on the runtime classpath, configure
- JavaMail appropriately, and (recommdended) configure the JNDI JavaMail session factory.</p>
+ JavaMail appropriately, and (recommended) configure the JNDI JavaMail session factory.</p>
  <strong>JavaMail runtime JARs</strong>
  <p>The first step is easy: JSPWiki bundles
  recent versions of the required JavaMail <code>mail.jar</code> and
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/comparators/HumanComparator.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/comparators/HumanComparator.html
index f83eb54801..d2de84ccba 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/comparators/HumanComparator.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/util/comparators/HumanComparator.html
@@ -140,7 +140,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 extends java.lang.Object
 implements java.util.Comparator&lt;java.lang.String&gt;</pre>
 <div class="block">A comparator that sorts Strings using "human" ordering, including decimal
- ordering. Only works for languages where every character is lexigraphically
+ ordering. Only works for languages where every character is lexicographically
  distinct and correctly unicode ordered (e.g. English). Other languages should use
  <code>CollatedHumanComparator</code>. Pretty efficient but still slower than
  String.compareTo().</div>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/AbstractStep.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/AbstractStep.html
index 57be48e7e2..94bff89a34 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/AbstractStep.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/AbstractStep.html
@@ -625,7 +625,7 @@ implements <a href="Step.html" title="interface in org.apache.wiki.workflow">Ste
 <li class="blockList">
 <h4>setOutcome</h4>
 <pre class="methodSignature">public final&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/wiki/workflow/AbstractStep.html#line.169">setOutcome</a>&#8203;(<a href="Outcome.html" title="class in org.apache.wiki.workflow">Outcome</a>&nbsp;outcome)</pre>
-<div class="block">Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completon time and mark the
+<div class="block">Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completion time and mark the
  Step as complete. Once a Step has been marked complete, this method cannot be called again. If the supplied Outcome is not in the
  set returned by <a href="Step.html#getAvailableOutcomes()"><code>Step.getAvailableOutcomes()</code></a>, or is not  <a href="Outcome.html#STEP_CONTINUE"><code>Outcome.STEP_CONTINUE</code></a> or <a href="Outcome.html#STEP_ABORT"><code>Outcome.STEP_ABORT</code></a>, this method
  returns an IllegalArgumentException. If the caller attempts to set an Outcome and the Step has already completed, this method throws
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/Step.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/Step.html
index d8f06556ee..d42e44eb40 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/Step.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/Step.html
@@ -553,7 +553,7 @@ extends java.io.Serializable</pre>
 <li class="blockList">
 <h4>setOutcome</h4>
 <pre class="methodSignature">void&nbsp;<a href="../../../../src-html/org/apache/wiki/workflow/Step.html#line.177">setOutcome</a>&#8203;(<a href="Outcome.html" title="class in org.apache.wiki.workflow">Outcome</a>&nbsp;outcome)</pre>
-<div class="block">Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completon time and mark the
+<div class="block">Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completion time and mark the
  Step as complete. Once a Step has been marked complete, this method cannot be called again. If the supplied Outcome is not in the
  set returned by <a href="#getAvailableOutcomes()"><code>getAvailableOutcomes()</code></a>, or is not  <a href="Outcome.html#STEP_CONTINUE"><code>Outcome.STEP_CONTINUE</code></a> or <a href="Outcome.html#STEP_ABORT"><code>Outcome.STEP_ABORT</code></a>, this method
  returns an IllegalArgumentException. If the caller attempts to set an Outcome and the Step has already completed, this method throws
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/SystemPrincipal.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/SystemPrincipal.html
index 70e72d38f2..a255812a1f 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/SystemPrincipal.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/SystemPrincipal.html
@@ -139,7 +139,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <pre style="white-space:pre-wrap;">public final class <a href="../../../../src-html/org/apache/wiki/workflow/SystemPrincipal.html#line.27">SystemPrincipal</a>
 extends java.lang.Object
 implements java.security.Principal</pre>
-<div class="block">System users asociated with workflow Task steps.</div>
+<div class="block">System users associated with workflow Task steps.</div>
 </li>
 </ul>
 </div>
diff --git a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/package-summary.html b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/package-summary.html
index 5c5c6dfeb0..9c0d865706 100644
--- a/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/package-summary.html
+++ b/apidocs/2.11.3-SNAPSHOT/org/apache/wiki/workflow/package-summary.html
@@ -186,7 +186,7 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
 <tr class="altColor">
 <th class="colFirst" scope="row"><a href="SystemPrincipal.html" title="class in org.apache.wiki.workflow">SystemPrincipal</a></th>
 <td class="colLast">
-<div class="block">System users asociated with workflow Task steps.</div>
+<div class="block">System users associated with workflow Task steps.</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/apidocs/2.11.3-SNAPSHOT/overview-summary.html b/apidocs/2.11.3-SNAPSHOT/overview-summary.html
index 54291ce174..0ffa5ba5fb 100644
--- a/apidocs/2.11.3-SNAPSHOT/overview-summary.html
+++ b/apidocs/2.11.3-SNAPSHOT/overview-summary.html
@@ -2,7 +2,7 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (11.0.12) on Sun May 01 13:42:22 UTC 2022 -->
+<!-- Generated by javadoc (11.0.12) on Tue Jul 12 20:48:00 UTC 2022 -->
 <title>Apache JSPWiki 2.11.3-SNAPSHOT API</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <script type="text/javascript">window.location.replace('index.html')</script>
diff --git a/apidocs/2.11.3-SNAPSHOT/package-search-index.zip b/apidocs/2.11.3-SNAPSHOT/package-search-index.zip
index f9da593c65..670dcd0301 100644
Binary files a/apidocs/2.11.3-SNAPSHOT/package-search-index.zip and b/apidocs/2.11.3-SNAPSHOT/package-search-index.zip differ
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Acl.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Acl.html
index e13d23c073..a89add4eab 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Acl.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Acl.html
@@ -48,7 +48,7 @@
 <span class="sourceLineNo">039</span><a id="line.39"> * This interface is a highly stripped-down derivation of the java.security.acl.Acl interface. In particular, the notion of an Acl "owner"</a>
 <span class="sourceLineNo">040</span><a id="line.40"> * has been eliminated, since JSPWiki pages do not have owners. An additional simplification compared to the standard Java package is that</a>
 <span class="sourceLineNo">041</span><a id="line.41"> * negative permissions have been eliminated. Instead, JSPWiki assumes a "default-deny" security stance: principals are granted no </a>
-<span class="sourceLineNo">042</span><a id="line.42"> * permissions by default, and posesses only those that have been explicitly granted to them. And finally, the getPermissions() and </a>
+<span class="sourceLineNo">042</span><a id="line.42"> * permissions by default, and possesses only those that have been explicitly granted to them. And finally, the getPermissions() and</a>
 <span class="sourceLineNo">043</span><a id="line.43"> * checkPermission() methods have been eliminated due to the complexities associated with resolving Role principal membership.</a>
 <span class="sourceLineNo">044</span><a id="line.44"> * &lt;/p&gt;</a>
 <span class="sourceLineNo">045</span><a id="line.45"> * @since 2.3</a>
@@ -82,12 +82,12 @@
 <span class="sourceLineNo">073</span><a id="line.73">    boolean isEmpty();</a>
 <span class="sourceLineNo">074</span><a id="line.74"></a>
 <span class="sourceLineNo">075</span><a id="line.75">    /**</a>
-<span class="sourceLineNo">076</span><a id="line.76">     * Returns all Principal objects assigned a given Permission in the access control list. The Princiapls returned are those that</a>
+<span class="sourceLineNo">076</span><a id="line.76">     * Returns all Principal objects assigned a given Permission in the access control list. The Principals returned are those that</a>
 <span class="sourceLineNo">077</span><a id="line.77">     * have been granted either the supplied permission, or a permission implied by the supplied permission. Principals are not</a>
 <span class="sourceLineNo">078</span><a id="line.78">     * "expanded" if they are a role or group.</a>
 <span class="sourceLineNo">079</span><a id="line.79">     *</a>
 <span class="sourceLineNo">080</span><a id="line.80">     * @param permission the permission to search for</a>
-<span class="sourceLineNo">081</span><a id="line.81">     * @return an array of Principals posessing the permission</a>
+<span class="sourceLineNo">081</span><a id="line.81">     * @return an array of Principals possessing the permission</a>
 <span class="sourceLineNo">082</span><a id="line.82">     */</a>
 <span class="sourceLineNo">083</span><a id="line.83">    Principal[] findPrincipals( Permission permission );</a>
 <span class="sourceLineNo">084</span><a id="line.84"></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Command.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Command.html
index 335fb90b8f..d0b2ef1861 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Command.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Command.html
@@ -111,7 +111,7 @@
 <span class="sourceLineNo">102</span><a id="line.102">    String getRequestContext();</a>
 <span class="sourceLineNo">103</span><a id="line.103"></a>
 <span class="sourceLineNo">104</span><a id="line.104">    /**</a>
-<span class="sourceLineNo">105</span><a id="line.105">     * Returns the Permission required to successfully execute this Command. If no Permission is requred, this method returns</a>
+<span class="sourceLineNo">105</span><a id="line.105">     * Returns the Permission required to successfully execute this Command. If no Permission is required, this method returns</a>
 <span class="sourceLineNo">106</span><a id="line.106">     * &lt;code&gt;null&lt;/code&gt;. For example, the static command {@code org.apache.wiki.ui.PageCommand#VIEW} doesn't require a permission because</a>
 <span class="sourceLineNo">107</span><a id="line.107">     * it isn't referring to a particular WikiPage. However, if this command targets a WikiPage called &lt;code&gt;Main&lt;/code&gt;(via</a>
 <span class="sourceLineNo">108</span><a id="line.108">     * {@code org.apache.wiki.ui.PageCommand#targetedCommand(Object)}, the resulting Command would require the permission</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Session.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Session.html
index 725edf2f48..1702d36c88 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Session.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/core/Session.html
@@ -37,7 +37,7 @@
 <span class="sourceLineNo">028</span><a id="line.28"></a>
 <span class="sourceLineNo">029</span><a id="line.29"></a>
 <span class="sourceLineNo">030</span><a id="line.30">/**</a>
-<span class="sourceLineNo">031</span><a id="line.31"> * &lt;p&gt;Represents a long-running wiki session, with an associated user Principal, user Subject, and authentication status. The sesion</a>
+<span class="sourceLineNo">031</span><a id="line.31"> * &lt;p&gt;Represents a long-running wiki session, with an associated user Principal, user Subject, and authentication status. The session</a>
 <span class="sourceLineNo">032</span><a id="line.32"> * is initialized with minimal, default-deny values: authentication is set to &lt;code&gt;false&lt;/code&gt;, and the user principal is set to</a>
 <span class="sourceLineNo">033</span><a id="line.33"> * &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;</a>
 <span class="sourceLineNo">034</span><a id="line.34"> * &lt;p&gt;The Session allows callers to:&lt;/p&gt;</a>
@@ -51,7 +51,7 @@
 <span class="sourceLineNo">042</span><a id="line.42"> *     {@link #addMessage(String)}, {@link #getMessages(String)}</a>
 <span class="sourceLineNo">043</span><a id="line.43"> *     and {@link #clearMessages(String)}&lt;/li&gt;</a>
 <span class="sourceLineNo">044</span><a id="line.44"> * &lt;/ul&gt;</a>
-<span class="sourceLineNo">045</span><a id="line.45"> * &lt;p&gt;To keep track of the Principals each user posseses, each Session stores a JAAS Subject. Various login processes add or</a>
+<span class="sourceLineNo">045</span><a id="line.45"> * &lt;p&gt;To keep track of the Principals each user possesses, each Session stores a JAAS Subject. Various login processes add or</a>
 <span class="sourceLineNo">046</span><a id="line.46"> * remove Principals when users authenticate or log out.&lt;/p&gt;</a>
 <span class="sourceLineNo">047</span><a id="line.47"> * &lt;p&gt;Session extends the {@link org.apache.wiki.event.WikiEventListener} interface and listens for group add/change/delete</a>
 <span class="sourceLineNo">048</span><a id="line.48"> * events fired by event sources the Session is registered with: {@link org.apache.wiki.auth.AuthenticationManager},</a>
@@ -242,7 +242,7 @@
 <span class="sourceLineNo">233</span><a id="line.233"></a>
 <span class="sourceLineNo">234</span><a id="line.234">    /**</a>
 <span class="sourceLineNo">235</span><a id="line.235">     * Wrapper for {@link Subject#doAsPrivileged(Subject, PrivilegedAction, java.security.AccessControlContext)}</a>
-<span class="sourceLineNo">236</span><a id="line.236">     * that executes an action with the privileges posssessed by a Session's Subject. The action executes with a &lt;code&gt;null&lt;/code&gt;</a>
+<span class="sourceLineNo">236</span><a id="line.236">     * that executes an action with the privileges possessed by a Session's Subject. The action executes with a &lt;code&gt;null&lt;/code&gt;</a>
 <span class="sourceLineNo">237</span><a id="line.237">     * AccessControlContext, which has the effect of running it "cleanly" without the AccessControlContexts of the caller.</a>
 <span class="sourceLineNo">238</span><a id="line.238">     *</a>
 <span class="sourceLineNo">239</span><a id="line.239">     * @param session the wiki session</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
index 6770b2486e..720a691a19 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/api/exceptions/NoRequiredPropertyException.html
@@ -30,7 +30,7 @@
 <span class="sourceLineNo">021</span><a id="line.21"></a>
 <span class="sourceLineNo">022</span><a id="line.22"></a>
 <span class="sourceLineNo">023</span><a id="line.23">/**</a>
-<span class="sourceLineNo">024</span><a id="line.24"> *  Marks an erroneus jspwiki.properties file.  Certain properties have been marked as "required", and if you </a>
+<span class="sourceLineNo">024</span><a id="line.24"> *  Marks an erroneous jspwiki.properties file.  Certain properties have been marked as "required", and if you</a>
 <span class="sourceLineNo">025</span><a id="line.25"> *  do not provide a good value for a property, you'll see this exception.</a>
 <span class="sourceLineNo">026</span><a id="line.26"> *  &lt;P&gt;</a>
 <span class="sourceLineNo">027</span><a id="line.27"> *  Check &lt;TT&gt;jspwiki.properties&lt;/TT&gt; for the required properties.</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/SecurityVerifier.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/SecurityVerifier.html
index 743b9ef71f..823b15c5a2 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/SecurityVerifier.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/SecurityVerifier.html
@@ -229,594 +229,593 @@
 <span class="sourceLineNo">220</span><a id="line.220">        s.append( "  &lt;colgroup span=\"" ).append( pageActionsLength * rolesLength ).append( "\" width=\"" ).append( colWidth ).append( "\" align=\"center\"/&gt;\n" );</a>
 <span class="sourceLineNo">221</span><a id="line.221">        s.append( "  &lt;tr&gt;\n" );</a>
 <span class="sourceLineNo">222</span><a id="line.222">        s.append( "    &lt;th rowspan=\"2\" valign=\"bottom\"&gt;Permission&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">223</span><a id="line.223">        for( int i = 0; i &lt; rolesLength; i++ )</a>
-<span class="sourceLineNo">224</span><a id="line.224">        {</a>
-<span class="sourceLineNo">225</span><a id="line.225">            s.append( "    &lt;th colspan=\"" ).append( pageActionsLength ).append( "\" title=\"" ).append( roles[i].getClass().getName() ).append( "\"&gt;" ).append( roles[i].getName() ).append( "&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">226</span><a id="line.226">        }</a>
-<span class="sourceLineNo">227</span><a id="line.227">        s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">228</span><a id="line.228"></a>
-<span class="sourceLineNo">229</span><a id="line.229">        // Print a column for each role</a>
-<span class="sourceLineNo">230</span><a id="line.230">        s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">231</span><a id="line.231">        for( int i = 0; i &lt; rolesLength; i++ )</a>
-<span class="sourceLineNo">232</span><a id="line.232">        {</a>
-<span class="sourceLineNo">233</span><a id="line.233">            for( final String pageAction : pageActions )</a>
-<span class="sourceLineNo">234</span><a id="line.234">            {</a>
-<span class="sourceLineNo">235</span><a id="line.235">                final String action = pageAction.substring( 0, 1 );</a>
-<span class="sourceLineNo">236</span><a id="line.236">                s.append( "    &lt;th title=\"" ).append( pageAction ).append( "\"&gt;" ).append( action ).append( "&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">237</span><a id="line.237">            }</a>
-<span class="sourceLineNo">238</span><a id="line.238">        }</a>
-<span class="sourceLineNo">239</span><a id="line.239">        s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">240</span><a id="line.240"></a>
-<span class="sourceLineNo">241</span><a id="line.241">        // Write page permission tests first</a>
-<span class="sourceLineNo">242</span><a id="line.242">        for( final String page : pages ) {</a>
-<span class="sourceLineNo">243</span><a id="line.243">            s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">244</span><a id="line.244">            s.append( "    &lt;td&gt;PagePermission \"" ).append( wiki ).append( ":" ).append( page ).append( "\"&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">245</span><a id="line.245">            for( final Principal role : roles ) {</a>
-<span class="sourceLineNo">246</span><a id="line.246">                for( final String pageAction : pageActions ) {</a>
-<span class="sourceLineNo">247</span><a id="line.247">                    final Permission permission = PermissionFactory.getPagePermission( wiki + ":" + page, pageAction );</a>
-<span class="sourceLineNo">248</span><a id="line.248">                    s.append( printPermissionTest( permission, role, 1 ) );</a>
-<span class="sourceLineNo">249</span><a id="line.249">                }</a>
-<span class="sourceLineNo">250</span><a id="line.250">            }</a>
-<span class="sourceLineNo">251</span><a id="line.251">            s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">252</span><a id="line.252">        }</a>
-<span class="sourceLineNo">253</span><a id="line.253"></a>
-<span class="sourceLineNo">254</span><a id="line.254">        // Now do the group tests</a>
-<span class="sourceLineNo">255</span><a id="line.255">        for( final String group : groups ) {</a>
-<span class="sourceLineNo">256</span><a id="line.256">            s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">257</span><a id="line.257">            s.append( "    &lt;td&gt;GroupPermission \"" ).append( wiki ).append( ":" ).append( group ).append( "\"&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">258</span><a id="line.258">            for( final Principal role : roles ) {</a>
-<span class="sourceLineNo">259</span><a id="line.259">                for( final String groupAction : groupActions ) {</a>
-<span class="sourceLineNo">260</span><a id="line.260">                    Permission permission = null;</a>
-<span class="sourceLineNo">261</span><a id="line.261">                    if( groupAction != null ) {</a>
-<span class="sourceLineNo">262</span><a id="line.262">                        permission = new GroupPermission( wiki + ":" + group, groupAction );</a>
-<span class="sourceLineNo">263</span><a id="line.263">                    }</a>
-<span class="sourceLineNo">264</span><a id="line.264">                    s.append( printPermissionTest( permission, role, 1 ) );</a>
-<span class="sourceLineNo">265</span><a id="line.265">                }</a>
-<span class="sourceLineNo">266</span><a id="line.266">            }</a>
-<span class="sourceLineNo">267</span><a id="line.267">            s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">268</span><a id="line.268">        }</a>
+<span class="sourceLineNo">223</span><a id="line.223">        for (final Principal principal : roles) {</a>
+<span class="sourceLineNo">224</span><a id="line.224">            s.append("    &lt;th colspan=\"").append(pageActionsLength).append("\" title=\"").append(principal.getClass().getName()).append("\"&gt;").append(principal.getName()).append("&lt;/th&gt;\n");</a>
+<span class="sourceLineNo">225</span><a id="line.225">        }</a>
+<span class="sourceLineNo">226</span><a id="line.226">        s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">227</span><a id="line.227"></a>
+<span class="sourceLineNo">228</span><a id="line.228">        // Print a column for each role</a>
+<span class="sourceLineNo">229</span><a id="line.229">        s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">230</span><a id="line.230">        for( int i = 0; i &lt; rolesLength; i++ )</a>
+<span class="sourceLineNo">231</span><a id="line.231">        {</a>
+<span class="sourceLineNo">232</span><a id="line.232">            for( final String pageAction : pageActions )</a>
+<span class="sourceLineNo">233</span><a id="line.233">            {</a>
+<span class="sourceLineNo">234</span><a id="line.234">                final String action = pageAction.substring( 0, 1 );</a>
+<span class="sourceLineNo">235</span><a id="line.235">                s.append( "    &lt;th title=\"" ).append( pageAction ).append( "\"&gt;" ).append( action ).append( "&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">236</span><a id="line.236">            }</a>
+<span class="sourceLineNo">237</span><a id="line.237">        }</a>
+<span class="sourceLineNo">238</span><a id="line.238">        s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">239</span><a id="line.239"></a>
+<span class="sourceLineNo">240</span><a id="line.240">        // Write page permission tests first</a>
+<span class="sourceLineNo">241</span><a id="line.241">        for( final String page : pages ) {</a>
+<span class="sourceLineNo">242</span><a id="line.242">            s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">243</span><a id="line.243">            s.append( "    &lt;td&gt;PagePermission \"" ).append( wiki ).append( ":" ).append( page ).append( "\"&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">244</span><a id="line.244">            for( final Principal role : roles ) {</a>
+<span class="sourceLineNo">245</span><a id="line.245">                for( final String pageAction : pageActions ) {</a>
+<span class="sourceLineNo">246</span><a id="line.246">                    final Permission permission = PermissionFactory.getPagePermission( wiki + ":" + page, pageAction );</a>
+<span class="sourceLineNo">247</span><a id="line.247">                    s.append( printPermissionTest( permission, role, 1 ) );</a>
+<span class="sourceLineNo">248</span><a id="line.248">                }</a>
+<span class="sourceLineNo">249</span><a id="line.249">            }</a>
+<span class="sourceLineNo">250</span><a id="line.250">            s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">251</span><a id="line.251">        }</a>
+<span class="sourceLineNo">252</span><a id="line.252"></a>
+<span class="sourceLineNo">253</span><a id="line.253">        // Now do the group tests</a>
+<span class="sourceLineNo">254</span><a id="line.254">        for( final String group : groups ) {</a>
+<span class="sourceLineNo">255</span><a id="line.255">            s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">256</span><a id="line.256">            s.append( "    &lt;td&gt;GroupPermission \"" ).append( wiki ).append( ":" ).append( group ).append( "\"&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">257</span><a id="line.257">            for( final Principal role : roles ) {</a>
+<span class="sourceLineNo">258</span><a id="line.258">                for( final String groupAction : groupActions ) {</a>
+<span class="sourceLineNo">259</span><a id="line.259">                    Permission permission = null;</a>
+<span class="sourceLineNo">260</span><a id="line.260">                    if( groupAction != null ) {</a>
+<span class="sourceLineNo">261</span><a id="line.261">                        permission = new GroupPermission( wiki + ":" + group, groupAction );</a>
+<span class="sourceLineNo">262</span><a id="line.262">                    }</a>
+<span class="sourceLineNo">263</span><a id="line.263">                    s.append( printPermissionTest( permission, role, 1 ) );</a>
+<span class="sourceLineNo">264</span><a id="line.264">                }</a>
+<span class="sourceLineNo">265</span><a id="line.265">            }</a>
+<span class="sourceLineNo">266</span><a id="line.266">            s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">267</span><a id="line.267">        }</a>
+<span class="sourceLineNo">268</span><a id="line.268"></a>
 <span class="sourceLineNo">269</span><a id="line.269"></a>
-<span class="sourceLineNo">270</span><a id="line.270"></a>
-<span class="sourceLineNo">271</span><a id="line.271">        // Now check the wiki-wide permissions</a>
-<span class="sourceLineNo">272</span><a id="line.272">        final String[] wikiPerms = new String[] { "createGroups", "createPages", "login", "editPreferences", "editProfile" };</a>
-<span class="sourceLineNo">273</span><a id="line.273">        for( final String wikiPerm : wikiPerms ) {</a>
-<span class="sourceLineNo">274</span><a id="line.274">            s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">275</span><a id="line.275">            s.append( "    &lt;td&gt;WikiPermission \"" ).append( wiki ).append( "\",\"" ).append( wikiPerm ).append( "\"&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">276</span><a id="line.276">            for( final Principal role : roles ) {</a>
-<span class="sourceLineNo">277</span><a id="line.277">                final Permission permission = new WikiPermission( wiki, wikiPerm );</a>
-<span class="sourceLineNo">278</span><a id="line.278">                s.append( printPermissionTest( permission, role, pageActionsLength ) );</a>
-<span class="sourceLineNo">279</span><a id="line.279">            }</a>
-<span class="sourceLineNo">280</span><a id="line.280">            s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">281</span><a id="line.281">        }</a>
-<span class="sourceLineNo">282</span><a id="line.282"></a>
-<span class="sourceLineNo">283</span><a id="line.283">        // Lastly, check for AllPermission</a>
-<span class="sourceLineNo">284</span><a id="line.284">        s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">285</span><a id="line.285">        s.append( "    &lt;td&gt;AllPermission \"" ).append( wiki ).append( "\"&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">286</span><a id="line.286">        for( final Principal role : roles )</a>
-<span class="sourceLineNo">287</span><a id="line.287">        {</a>
-<span class="sourceLineNo">288</span><a id="line.288">            final Permission permission = new AllPermission( wiki );</a>
-<span class="sourceLineNo">289</span><a id="line.289">            s.append( printPermissionTest( permission, role, pageActionsLength ) );</a>
-<span class="sourceLineNo">290</span><a id="line.290">        }</a>
-<span class="sourceLineNo">291</span><a id="line.291">        s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">292</span><a id="line.292"></a>
-<span class="sourceLineNo">293</span><a id="line.293">        // We're done!</a>
-<span class="sourceLineNo">294</span><a id="line.294">        s.append( "&lt;/table&gt;" );</a>
-<span class="sourceLineNo">295</span><a id="line.295">        return s.toString();</a>
-<span class="sourceLineNo">296</span><a id="line.296">    }</a>
-<span class="sourceLineNo">297</span><a id="line.297"></a>
-<span class="sourceLineNo">298</span><a id="line.298">    /**</a>
-<span class="sourceLineNo">299</span><a id="line.299">     * Prints a &amp;lt;td&amp;gt; HTML element with the results of a permission test.</a>
-<span class="sourceLineNo">300</span><a id="line.300">     * @param permission the permission to format</a>
-<span class="sourceLineNo">301</span><a id="line.301">     * @param principal</a>
-<span class="sourceLineNo">302</span><a id="line.302">     * @param cols</a>
-<span class="sourceLineNo">303</span><a id="line.303">     */</a>
-<span class="sourceLineNo">304</span><a id="line.304">    private String printPermissionTest( final Permission permission, final Principal principal, final int cols ) {</a>
-<span class="sourceLineNo">305</span><a id="line.305">        final StringBuilder s = new StringBuilder();</a>
-<span class="sourceLineNo">306</span><a id="line.306">        if( permission == null ) {</a>
-<span class="sourceLineNo">307</span><a id="line.307">            s.append( "    &lt;td colspan=\"" ).append( cols ).append( "\" align=\"center\" title=\"N/A\"&gt;" );</a>
-<span class="sourceLineNo">308</span><a id="line.308">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">309</span><a id="line.309">        } else {</a>
-<span class="sourceLineNo">310</span><a id="line.310">            final boolean allowed = verifyStaticPermission( principal, permission );</a>
-<span class="sourceLineNo">311</span><a id="line.311">            s.append( "    &lt;td colspan=\"" ).append( cols ).append( "\" align=\"center\" title=\"" );</a>
-<span class="sourceLineNo">312</span><a id="line.312">            s.append( allowed ? "ALLOW: " : "DENY: " );</a>
-<span class="sourceLineNo">313</span><a id="line.313">            s.append( permission.getClass().getName() );</a>
-<span class="sourceLineNo">314</span><a id="line.314">            s.append( " &amp;quot;" );</a>
-<span class="sourceLineNo">315</span><a id="line.315">            s.append( permission.getName() );</a>
-<span class="sourceLineNo">316</span><a id="line.316">            s.append( "&amp;quot;" );</a>
-<span class="sourceLineNo">317</span><a id="line.317">            if ( permission.getName() != null )</a>
-<span class="sourceLineNo">318</span><a id="line.318">            {</a>
-<span class="sourceLineNo">319</span><a id="line.319">                s.append( ",&amp;quot;" );</a>
-<span class="sourceLineNo">320</span><a id="line.320">                s.append( permission.getActions() );</a>
-<span class="sourceLineNo">321</span><a id="line.321">                s.append( "&amp;quot;" );</a>
-<span class="sourceLineNo">322</span><a id="line.322">            }</a>
-<span class="sourceLineNo">323</span><a id="line.323">            s.append( " " );</a>
-<span class="sourceLineNo">324</span><a id="line.324">            s.append( principal.getClass().getName() );</a>
-<span class="sourceLineNo">325</span><a id="line.325">            s.append( " &amp;quot;" );</a>
-<span class="sourceLineNo">326</span><a id="line.326">            s.append( principal.getName() );</a>
-<span class="sourceLineNo">327</span><a id="line.327">            s.append( "&amp;quot;" );</a>
-<span class="sourceLineNo">328</span><a id="line.328">            s.append( "\"" );</a>
-<span class="sourceLineNo">329</span><a id="line.329">            s.append( allowed ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
-<span class="sourceLineNo">330</span><a id="line.330">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">331</span><a id="line.331">        }</a>
-<span class="sourceLineNo">332</span><a id="line.332">        return s.toString();</a>
-<span class="sourceLineNo">333</span><a id="line.333">    }</a>
-<span class="sourceLineNo">334</span><a id="line.334"></a>
-<span class="sourceLineNo">335</span><a id="line.335">    /**</a>
-<span class="sourceLineNo">336</span><a id="line.336">     * Formats and returns an HTML table containing the roles the web container</a>
-<span class="sourceLineNo">337</span><a id="line.337">     * is aware of, and whether each role maps to particular JSPs. This method</a>
-<span class="sourceLineNo">338</span><a id="line.338">     * throws an {@link IllegalStateException} if the authorizer is not of type</a>
-<span class="sourceLineNo">339</span><a id="line.339">     * {@link org.apache.wiki.auth.authorize.WebContainerAuthorizer}</a>
-<span class="sourceLineNo">340</span><a id="line.340">     * @return the formatted HTML table containing the result of the tests</a>
-<span class="sourceLineNo">341</span><a id="line.341">     * @throws WikiException if tests fail for unexpected reasons</a>
-<span class="sourceLineNo">342</span><a id="line.342">     */</a>
-<span class="sourceLineNo">343</span><a id="line.343">    public String containerRoleTable() throws WikiException {</a>
-<span class="sourceLineNo">344</span><a id="line.344">        final AuthorizationManager authorizationManager = m_engine.getManager( AuthorizationManager.class );</a>
-<span class="sourceLineNo">345</span><a id="line.345">        final Authorizer authorizer = authorizationManager.getAuthorizer();</a>
-<span class="sourceLineNo">346</span><a id="line.346"></a>
-<span class="sourceLineNo">347</span><a id="line.347">        // If authorizer not WebContainerAuthorizer, print error message</a>
-<span class="sourceLineNo">348</span><a id="line.348">        if ( !( authorizer instanceof WebContainerAuthorizer ) ) {</a>
-<span class="sourceLineNo">349</span><a id="line.349">            throw new IllegalStateException( "Authorizer should be WebContainerAuthorizer" );</a>
-<span class="sourceLineNo">350</span><a id="line.350">        }</a>
-<span class="sourceLineNo">351</span><a id="line.351"></a>
-<span class="sourceLineNo">352</span><a id="line.352">        // Now, print a table with JSP pages listed on the left, and</a>
-<span class="sourceLineNo">353</span><a id="line.353">        // an evaluation of each pages' constraints for each role</a>
-<span class="sourceLineNo">354</span><a id="line.354">        // we discovered</a>
-<span class="sourceLineNo">355</span><a id="line.355">        final StringBuilder s = new StringBuilder();</a>
-<span class="sourceLineNo">356</span><a id="line.356">        final Principal[] roles = authorizer.getRoles();</a>
-<span class="sourceLineNo">357</span><a id="line.357">        s.append( "&lt;table class=\"wikitable\" border=\"1\"&gt;\n" );</a>
-<span class="sourceLineNo">358</span><a id="line.358">        s.append( "&lt;thead&gt;\n" );</a>
-<span class="sourceLineNo">359</span><a id="line.359">        s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">360</span><a id="line.360">        s.append( "    &lt;th rowspan=\"2\"&gt;Action&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">361</span><a id="line.361">        s.append( "    &lt;th rowspan=\"2\"&gt;Page&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">362</span><a id="line.362">        s.append( "    &lt;th colspan=\"" ).append( roles.length ).append( 1 ).append( "\"&gt;Roles&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">363</span><a id="line.363">        s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">364</span><a id="line.364">        s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">365</span><a id="line.365">        s.append( "    &lt;th&gt;Anonymous&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">366</span><a id="line.366">        for( final Principal role : roles ) {</a>
-<span class="sourceLineNo">367</span><a id="line.367">            s.append( "    &lt;th&gt;" ).append( role.getName() ).append( "&lt;/th&gt;\n" );</a>
-<span class="sourceLineNo">368</span><a id="line.368">        }</a>
-<span class="sourceLineNo">369</span><a id="line.369">        s.append( "&lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">370</span><a id="line.370">        s.append( "&lt;/thead&gt;\n" );</a>
-<span class="sourceLineNo">371</span><a id="line.371">        s.append( "&lt;tbody&gt;\n" );</a>
-<span class="sourceLineNo">372</span><a id="line.372"></a>
-<span class="sourceLineNo">373</span><a id="line.373">        final WebContainerAuthorizer wca = (WebContainerAuthorizer) authorizer;</a>
-<span class="sourceLineNo">374</span><a id="line.374">        for( int i = 0; i &lt; CONTAINER_ACTIONS.length; i++ ) {</a>
-<span class="sourceLineNo">375</span><a id="line.375">            final String action = CONTAINER_ACTIONS[i];</a>
-<span class="sourceLineNo">376</span><a id="line.376">            final String jsp = CONTAINER_JSPS[i];</a>
-<span class="sourceLineNo">377</span><a id="line.377"></a>
-<span class="sourceLineNo">378</span><a id="line.378">            // Print whether the page is constrained for each role</a>
-<span class="sourceLineNo">379</span><a id="line.379">            final boolean allowsAnonymous = !wca.isConstrained( jsp, Role.ALL );</a>
-<span class="sourceLineNo">380</span><a id="line.380">            s.append( "  &lt;tr&gt;\n" );</a>
-<span class="sourceLineNo">381</span><a id="line.381">            s.append( "    &lt;td&gt;" ).append( action ).append( "&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">382</span><a id="line.382">            s.append( "    &lt;td&gt;" ).append( jsp ).append( "&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">383</span><a id="line.383">            s.append( "    &lt;td title=\"" );</a>
-<span class="sourceLineNo">384</span><a id="line.384">            s.append( allowsAnonymous ? "ALLOW: " : "DENY: " );</a>
-<span class="sourceLineNo">385</span><a id="line.385">            s.append( jsp );</a>
-<span class="sourceLineNo">386</span><a id="line.386">            s.append( " Anonymous" );</a>
-<span class="sourceLineNo">387</span><a id="line.387">            s.append( "\"" );</a>
-<span class="sourceLineNo">388</span><a id="line.388">            s.append( allowsAnonymous ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
-<span class="sourceLineNo">389</span><a id="line.389">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">390</span><a id="line.390">            for( final Principal role : roles )</a>
-<span class="sourceLineNo">391</span><a id="line.391">            {</a>
-<span class="sourceLineNo">392</span><a id="line.392">                final boolean allowed = allowsAnonymous || wca.isConstrained( jsp, (Role)role );</a>
-<span class="sourceLineNo">393</span><a id="line.393">                s.append( "    &lt;td title=\"" );</a>
-<span class="sourceLineNo">394</span><a id="line.394">                s.append( allowed ? "ALLOW: " : "DENY: " );</a>
-<span class="sourceLineNo">395</span><a id="line.395">                s.append( jsp );</a>
-<span class="sourceLineNo">396</span><a id="line.396">                s.append( " " );</a>
-<span class="sourceLineNo">397</span><a id="line.397">                s.append( role.getClass().getName() );</a>
-<span class="sourceLineNo">398</span><a id="line.398">                s.append( " &amp;quot;" );</a>
-<span class="sourceLineNo">399</span><a id="line.399">                s.append( role.getName() );</a>
-<span class="sourceLineNo">400</span><a id="line.400">                s.append( "&amp;quot;" );</a>
-<span class="sourceLineNo">401</span><a id="line.401">                s.append( "\"" );</a>
-<span class="sourceLineNo">402</span><a id="line.402">                s.append( allowed ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
-<span class="sourceLineNo">403</span><a id="line.403">                s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
-<span class="sourceLineNo">404</span><a id="line.404">            }</a>
-<span class="sourceLineNo">405</span><a id="line.405">            s.append( "  &lt;/tr&gt;\n" );</a>
-<span class="sourceLineNo">406</span><a id="line.406">        }</a>
-<span class="sourceLineNo">407</span><a id="line.407"></a>
-<span class="sourceLineNo">408</span><a id="line.408">        s.append( "&lt;/tbody&gt;\n" );</a>
-<span class="sourceLineNo">409</span><a id="line.409">        s.append( "&lt;/table&gt;\n" );</a>
-<span class="sourceLineNo">410</span><a id="line.410">        return s.toString();</a>
-<span class="sourceLineNo">411</span><a id="line.411">    }</a>
-<span class="sourceLineNo">412</span><a id="line.412"></a>
-<span class="sourceLineNo">413</span><a id="line.413">    /**</a>
-<span class="sourceLineNo">414</span><a id="line.414">     * Returns &lt;code&gt;true&lt;/code&gt; if the Java security policy is configured</a>
-<span class="sourceLineNo">415</span><a id="line.415">     * correctly, and it verifies as valid.</a>
-<span class="sourceLineNo">416</span><a id="line.416">     * @return the result of the configuration check</a>
-<span class="sourceLineNo">417</span><a id="line.417">     */</a>
-<span class="sourceLineNo">418</span><a id="line.418">    public boolean isSecurityPolicyConfigured()</a>
-<span class="sourceLineNo">419</span><a id="line.419">    {</a>
-<span class="sourceLineNo">420</span><a id="line.420">        return m_isSecurityPolicyConfigured;</a>
-<span class="sourceLineNo">421</span><a id="line.421">    }</a>
-<span class="sourceLineNo">422</span><a id="line.422"></a>
-<span class="sourceLineNo">423</span><a id="line.423">    /**</a>
-<span class="sourceLineNo">424</span><a id="line.424">     * If the active Authorizer is the WebContainerAuthorizer, returns the roles it knows about; otherwise, a zero-length array.</a>
-<span class="sourceLineNo">425</span><a id="line.425">     *</a>
-<span class="sourceLineNo">426</span><a id="line.426">     * @return the roles parsed from &lt;code&gt;web.xml&lt;/code&gt;, or a zero-length array</a>
-<span class="sourceLineNo">427</span><a id="line.427">     * @throws WikiException if the web authorizer cannot obtain the list of roles</a>
-<span class="sourceLineNo">428</span><a id="line.428">     */</a>
-<span class="sourceLineNo">429</span><a id="line.429">    public Principal[] webContainerRoles() throws WikiException {</a>
-<span class="sourceLineNo">430</span><a id="line.430">        final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer();</a>
-<span class="sourceLineNo">431</span><a id="line.431">        if ( authorizer instanceof WebContainerAuthorizer ) {</a>
-<span class="sourceLineNo">432</span><a id="line.432">            return authorizer.getRoles();</a>
-<span class="sourceLineNo">433</span><a id="line.433">        }</a>
-<span class="sourceLineNo">434</span><a id="line.434">        return new Principal[0];</a>
-<span class="sourceLineNo">435</span><a id="line.435">    }</a>
-<span class="sourceLineNo">436</span><a id="line.436"></a>
-<span class="sourceLineNo">437</span><a id="line.437">    /**</a>
-<span class="sourceLineNo">438</span><a id="line.438">     * Verifies that the roles given in the security policy are reflected by the</a>
-<span class="sourceLineNo">439</span><a id="line.439">     * container &lt;code&gt;web.xml&lt;/code&gt; file.</a>
-<span class="sourceLineNo">440</span><a id="line.440">     * @throws WikiException if the web authorizer cannot verify the roles</a>
-<span class="sourceLineNo">441</span><a id="line.441">     */</a>
-<span class="sourceLineNo">442</span><a id="line.442">    void verifyPolicyAndContainerRoles() throws WikiException</a>
-<span class="sourceLineNo">443</span><a id="line.443">    {</a>
-<span class="sourceLineNo">444</span><a id="line.444">        final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer();</a>
-<span class="sourceLineNo">445</span><a id="line.445">        final Principal[] containerRoles = authorizer.getRoles();</a>
-<span class="sourceLineNo">446</span><a id="line.446">        boolean missing = false;</a>
-<span class="sourceLineNo">447</span><a id="line.447">        for( final Principal principal : m_policyPrincipals )</a>
-<span class="sourceLineNo">448</span><a id="line.448">        {</a>
-<span class="sourceLineNo">449</span><a id="line.449">            if ( principal instanceof Role )</a>
-<span class="sourceLineNo">450</span><a id="line.450">            {</a>
-<span class="sourceLineNo">451</span><a id="line.451">                final Role role = (Role) principal;</a>
-<span class="sourceLineNo">452</span><a id="line.452">                final boolean isContainerRole = ArrayUtils.contains( containerRoles, role );</a>
-<span class="sourceLineNo">453</span><a id="line.453">                if ( !Role.isBuiltInRole( role ) &amp;&amp; !isContainerRole )</a>
-<span class="sourceLineNo">454</span><a id="line.454">                {</a>
-<span class="sourceLineNo">455</span><a id="line.455">                    m_session.addMessage( ERROR_ROLES, "Role '" + role.getName() + "' is defined in security policy but not in web.xml." );</a>
-<span class="sourceLineNo">456</span><a id="line.456">                    missing = true;</a>
-<span class="sourceLineNo">457</span><a id="line.457">                }</a>
-<span class="sourceLineNo">458</span><a id="line.458">            }</a>
-<span class="sourceLineNo">459</span><a id="line.459">        }</a>
-<span class="sourceLineNo">460</span><a id="line.460">        if ( !missing )</a>
-<span class="sourceLineNo">461</span><a id="line.461">        {</a>
-<span class="sourceLineNo">462</span><a id="line.462">            m_session.addMessage( INFO_ROLES, "Every non-standard role defined in the security policy was also found in web.xml." );</a>
-<span class="sourceLineNo">463</span><a id="line.463">        }</a>
-<span class="sourceLineNo">464</span><a id="line.464">    }</a>
-<span class="sourceLineNo">465</span><a id="line.465"></a>
-<span class="sourceLineNo">466</span><a id="line.466">    /**</a>
-<span class="sourceLineNo">467</span><a id="line.467">     * Verifies that the group datbase was initialized properly, and that</a>
-<span class="sourceLineNo">468</span><a id="line.468">     * user add and delete operations work as they should.</a>
-<span class="sourceLineNo">469</span><a id="line.469">     */</a>
-<span class="sourceLineNo">470</span><a id="line.470">    void verifyGroupDatabase()</a>
-<span class="sourceLineNo">471</span><a id="line.471">    {</a>
-<span class="sourceLineNo">472</span><a id="line.472">        final GroupManager mgr = m_engine.getManager( GroupManager.class );</a>
-<span class="sourceLineNo">473</span><a id="line.473">        GroupDatabase db = null;</a>
-<span class="sourceLineNo">474</span><a id="line.474">        try {</a>
-<span class="sourceLineNo">475</span><a id="line.475">            db = m_engine.getManager( GroupManager.class ).getGroupDatabase();</a>
-<span class="sourceLineNo">476</span><a id="line.476">        } catch ( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">477</span><a id="line.477">            m_session.addMessage( ERROR_GROUPS, "Could not retrieve GroupManager: " + e.getMessage() );</a>
-<span class="sourceLineNo">478</span><a id="line.478">        }</a>
-<span class="sourceLineNo">479</span><a id="line.479"></a>
-<span class="sourceLineNo">480</span><a id="line.480">        // Check for obvious error conditions</a>
-<span class="sourceLineNo">481</span><a id="line.481">        if ( mgr == null || db == null ) {</a>
-<span class="sourceLineNo">482</span><a id="line.482">            if ( mgr == null ) {</a>
-<span class="sourceLineNo">483</span><a id="line.483">                m_session.addMessage( ERROR_GROUPS, "GroupManager is null; JSPWiki could not initialize it. Check the error logs." );</a>
-<span class="sourceLineNo">484</span><a id="line.484">            }</a>
-<span class="sourceLineNo">485</span><a id="line.485">            if ( db == null ) {</a>
-<span class="sourceLineNo">486</span><a id="line.486">                m_session.addMessage( ERROR_GROUPS, "GroupDatabase is null; JSPWiki could not initialize it. Check the error logs." );</a>
-<span class="sourceLineNo">487</span><a id="line.487">            }</a>
-<span class="sourceLineNo">488</span><a id="line.488">            return;</a>
-<span class="sourceLineNo">489</span><a id="line.489">        }</a>
-<span class="sourceLineNo">490</span><a id="line.490"></a>
-<span class="sourceLineNo">491</span><a id="line.491">        // Everything initialized OK...</a>
-<span class="sourceLineNo">492</span><a id="line.492"></a>
-<span class="sourceLineNo">493</span><a id="line.493">        // Tell user what class of database this is.</a>
-<span class="sourceLineNo">494</span><a id="line.494">        m_session.addMessage( INFO_GROUPS, "GroupDatabase is of type '" + db.getClass().getName() + "'. It appears to be initialized properly." );</a>
-<span class="sourceLineNo">495</span><a id="line.495"></a>
-<span class="sourceLineNo">496</span><a id="line.496">        // Now, see how many groups we have.</a>
-<span class="sourceLineNo">497</span><a id="line.497">        final int oldGroupCount;</a>
-<span class="sourceLineNo">498</span><a id="line.498">        try {</a>
-<span class="sourceLineNo">499</span><a id="line.499">            final Group[] groups = db.groups();</a>
-<span class="sourceLineNo">500</span><a id="line.500">            oldGroupCount = groups.length;</a>
-<span class="sourceLineNo">501</span><a id="line.501">            m_session.addMessage( INFO_GROUPS, "The group database contains " + oldGroupCount + " groups." );</a>
-<span class="sourceLineNo">502</span><a id="line.502">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">503</span><a id="line.503">            m_session.addMessage( ERROR_GROUPS, "Could not obtain a list of current groups: " + e.getMessage() );</a>
-<span class="sourceLineNo">504</span><a id="line.504">            return;</a>
-<span class="sourceLineNo">505</span><a id="line.505">        }</a>
-<span class="sourceLineNo">506</span><a id="line.506"></a>
-<span class="sourceLineNo">507</span><a id="line.507">        // Try adding a bogus group with random name</a>
-<span class="sourceLineNo">508</span><a id="line.508">        final String name = "TestGroup" + System.currentTimeMillis();</a>
-<span class="sourceLineNo">509</span><a id="line.509">        final Group group;</a>
-<span class="sourceLineNo">510</span><a id="line.510">        try {</a>
-<span class="sourceLineNo">511</span><a id="line.511">            // Create dummy test group</a>
-<span class="sourceLineNo">512</span><a id="line.512">            group = mgr.parseGroup( name, "", true );</a>
-<span class="sourceLineNo">513</span><a id="line.513">            final Principal user = new WikiPrincipal( "TestUser" );</a>
-<span class="sourceLineNo">514</span><a id="line.514">            group.add( user );</a>
-<span class="sourceLineNo">515</span><a id="line.515">            db.save( group, new WikiPrincipal( "SecurityVerifier" ) );</a>
-<span class="sourceLineNo">516</span><a id="line.516"></a>
-<span class="sourceLineNo">517</span><a id="line.517">            // Make sure the group saved successfully</a>
-<span class="sourceLineNo">518</span><a id="line.518">            if( db.groups().length == oldGroupCount ) {</a>
-<span class="sourceLineNo">519</span><a id="line.519">                m_session.addMessage( ERROR_GROUPS, "Could not add a test group to the database." );</a>
-<span class="sourceLineNo">520</span><a id="line.520">                return;</a>
-<span class="sourceLineNo">521</span><a id="line.521">            }</a>
-<span class="sourceLineNo">522</span><a id="line.522">            m_session.addMessage( INFO_GROUPS, "The group database allows new groups to be created, as it should." );</a>
-<span class="sourceLineNo">523</span><a id="line.523">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">524</span><a id="line.524">            m_session.addMessage( ERROR_GROUPS, "Could not add a group to the database: " + e.getMessage() );</a>
-<span class="sourceLineNo">525</span><a id="line.525">            return;</a>
-<span class="sourceLineNo">526</span><a id="line.526">        }</a>
-<span class="sourceLineNo">527</span><a id="line.527"></a>
-<span class="sourceLineNo">528</span><a id="line.528">        // Now delete the group; should be back to old count</a>
-<span class="sourceLineNo">529</span><a id="line.529">        try {</a>
-<span class="sourceLineNo">530</span><a id="line.530">            db.delete( group );</a>
-<span class="sourceLineNo">531</span><a id="line.531">            if( db.groups().length != oldGroupCount ) {</a>
-<span class="sourceLineNo">532</span><a id="line.532">                m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database." );</a>
-<span class="sourceLineNo">533</span><a id="line.533">                return;</a>
-<span class="sourceLineNo">534</span><a id="line.534">            }</a>
-<span class="sourceLineNo">535</span><a id="line.535">            m_session.addMessage( INFO_GROUPS, "The group database allows groups to be deleted, as it should." );</a>
-<span class="sourceLineNo">536</span><a id="line.536">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">537</span><a id="line.537">            m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database: " + e.getMessage() );</a>
-<span class="sourceLineNo">538</span><a id="line.538">            return;</a>
-<span class="sourceLineNo">539</span><a id="line.539">        }</a>
-<span class="sourceLineNo">540</span><a id="line.540"></a>
-<span class="sourceLineNo">541</span><a id="line.541">        m_session.addMessage( INFO_GROUPS, "The group database configuration looks fine." );</a>
-<span class="sourceLineNo">542</span><a id="line.542">    }</a>
-<span class="sourceLineNo">543</span><a id="line.543"></a>
-<span class="sourceLineNo">544</span><a id="line.544">    /**</a>
-<span class="sourceLineNo">545</span><a id="line.545">     * Verfies the JAAS configuration. The configuration is valid if value of the</a>
-<span class="sourceLineNo">546</span><a id="line.546">     * &lt;code&gt;jspwiki.properties&lt;code&gt; property</a>
-<span class="sourceLineNo">547</span><a id="line.547">     * {@value org.apache.wiki.auth.AuthenticationManager#PROP_LOGIN_MODULE}</a>
-<span class="sourceLineNo">548</span><a id="line.548">     * resolves to a valid class on the classpath.</a>
-<span class="sourceLineNo">549</span><a id="line.549">     */</a>
-<span class="sourceLineNo">550</span><a id="line.550">    void verifyJaas() {</a>
-<span class="sourceLineNo">551</span><a id="line.551">        // Verify that the specified JAAS moduie corresponds to a class we can load successfully.</a>
-<span class="sourceLineNo">552</span><a id="line.552">        final String jaasClass = m_engine.getWikiProperties().getProperty( AuthenticationManager.PROP_LOGIN_MODULE );</a>
-<span class="sourceLineNo">553</span><a id="line.553">        if( jaasClass == null || jaasClass.isEmpty() ) {</a>
-<span class="sourceLineNo">554</span><a id="line.554">            m_session.addMessage( ERROR_JAAS, "The value of the '" + AuthenticationManager.PROP_LOGIN_MODULE</a>
-<span class="sourceLineNo">555</span><a id="line.555">                    + "' property was null or blank. This is a fatal error. This value should be set to a valid LoginModule implementation "</a>
-<span class="sourceLineNo">556</span><a id="line.556">                    + "on the classpath." );</a>
-<span class="sourceLineNo">557</span><a id="line.557">            return;</a>
-<span class="sourceLineNo">558</span><a id="line.558">        }</a>
-<span class="sourceLineNo">559</span><a id="line.559"></a>
-<span class="sourceLineNo">560</span><a id="line.560">        // See if we can find the LoginModule on the classpath</a>
-<span class="sourceLineNo">561</span><a id="line.561">        Class&lt; ? &gt; c = null;</a>
-<span class="sourceLineNo">562</span><a id="line.562">        try {</a>
-<span class="sourceLineNo">563</span><a id="line.563">            m_session.addMessage( INFO_JAAS,</a>
-<span class="sourceLineNo">564</span><a id="line.564">                    "The property '" + AuthenticationManager.PROP_LOGIN_MODULE + "' specified the class '" + jaasClass + ".'" );</a>
-<span class="sourceLineNo">565</span><a id="line.565">            c = Class.forName( jaasClass );</a>
-<span class="sourceLineNo">566</span><a id="line.566">        } catch( final ClassNotFoundException e ) {</a>
-<span class="sourceLineNo">567</span><a id="line.567">            m_session.addMessage( ERROR_JAAS, "We could not find the the class '" + jaasClass + "' on the " + "classpath. This is fatal error." );</a>
-<span class="sourceLineNo">568</span><a id="line.568">        }</a>
-<span class="sourceLineNo">569</span><a id="line.569"></a>
-<span class="sourceLineNo">570</span><a id="line.570">        // Is the specified class actually a LoginModule?</a>
-<span class="sourceLineNo">571</span><a id="line.571">        if( LoginModule.class.isAssignableFrom( c ) ) {</a>
-<span class="sourceLineNo">572</span><a id="line.572">            m_session.addMessage( INFO_JAAS, "We found the the class '" + jaasClass + "' on the classpath, and it is a LoginModule implementation. Good!" );</a>
-<span class="sourceLineNo">573</span><a id="line.573">        } else {</a>
-<span class="sourceLineNo">574</span><a id="line.574">            m_session.addMessage( ERROR_JAAS, "We found the the class '" + jaasClass + "' on the classpath, but it does not seem to be LoginModule implementation! This is fatal error." );</a>
-<span class="sourceLineNo">575</span><a id="line.575">        }</a>
-<span class="sourceLineNo">576</span><a id="line.576">    }</a>
-<span class="sourceLineNo">577</span><a id="line.577"></a>
-<span class="sourceLineNo">578</span><a id="line.578">    /**</a>
-<span class="sourceLineNo">579</span><a id="line.579">     * Looks up a file name based on a JRE system property and returns the associated</a>
-<span class="sourceLineNo">580</span><a id="line.580">     * File object if it exists. This method adds messages with the topic prefix </a>
-<span class="sourceLineNo">581</span><a id="line.581">     * {@link #ERROR} and {@link #INFO} as appropriate, with the suffix matching the </a>
-<span class="sourceLineNo">582</span><a id="line.582">     * supplied property.</a>
-<span class="sourceLineNo">583</span><a id="line.583">     * @param property the system property to look up</a>
-<span class="sourceLineNo">584</span><a id="line.584">     * @return the file object, or &lt;code&gt;null&lt;/code&gt; if not found</a>
-<span class="sourceLineNo">585</span><a id="line.585">     */</a>
-<span class="sourceLineNo">586</span><a id="line.586">    File getFileFromProperty( final String property )</a>
-<span class="sourceLineNo">587</span><a id="line.587">    {</a>
-<span class="sourceLineNo">588</span><a id="line.588">        String propertyValue = null;</a>
-<span class="sourceLineNo">589</span><a id="line.589">        try</a>
-<span class="sourceLineNo">590</span><a id="line.590">        {</a>
-<span class="sourceLineNo">591</span><a id="line.591">            propertyValue = System.getProperty( property );</a>
-<span class="sourceLineNo">592</span><a id="line.592">            if ( propertyValue == null )</a>
-<span class="sourceLineNo">593</span><a id="line.593">            {</a>
-<span class="sourceLineNo">594</span><a id="line.594">                m_session.addMessage( "Error." + property, "The system property '" + property + "' is null." );</a>
-<span class="sourceLineNo">595</span><a id="line.595">                return null;</a>
-<span class="sourceLineNo">596</span><a id="line.596">            }</a>
-<span class="sourceLineNo">597</span><a id="line.597"></a>
-<span class="sourceLineNo">598</span><a id="line.598">            //</a>
-<span class="sourceLineNo">599</span><a id="line.599">            //  It's also possible to use "==" to mark a property.  We remove that</a>
-<span class="sourceLineNo">600</span><a id="line.600">            //  here so that we can actually find the property file, then.</a>
-<span class="sourceLineNo">601</span><a id="line.601">            //</a>
-<span class="sourceLineNo">602</span><a id="line.602">            if( propertyValue.startsWith("=") )</a>
-<span class="sourceLineNo">603</span><a id="line.603">            {</a>
-<span class="sourceLineNo">604</span><a id="line.604">                propertyValue = propertyValue.substring(1);</a>
-<span class="sourceLineNo">605</span><a id="line.605">            }</a>
-<span class="sourceLineNo">606</span><a id="line.606"></a>
-<span class="sourceLineNo">607</span><a id="line.607">            try</a>
-<span class="sourceLineNo">608</span><a id="line.608">            {</a>
-<span class="sourceLineNo">609</span><a id="line.609">                m_session.addMessage( "Info." + property, "The system property '" + property + "' is set to: "</a>
-<span class="sourceLineNo">610</span><a id="line.610">                        + propertyValue + "." );</a>
-<span class="sourceLineNo">611</span><a id="line.611"></a>
-<span class="sourceLineNo">612</span><a id="line.612">                // Prepend a file: prefix if not there already</a>
-<span class="sourceLineNo">613</span><a id="line.613">                if ( !propertyValue.startsWith( "file:" ) )</a>
-<span class="sourceLineNo">614</span><a id="line.614">                {</a>
-<span class="sourceLineNo">615</span><a id="line.615">                  propertyValue = "file:" + propertyValue;</a>
-<span class="sourceLineNo">616</span><a id="line.616">                }</a>
-<span class="sourceLineNo">617</span><a id="line.617">                final URL url = new URL( propertyValue );</a>
-<span class="sourceLineNo">618</span><a id="line.618">                final File file = new File( url.getPath() );</a>
-<span class="sourceLineNo">619</span><a id="line.619">                if ( file.exists() )</a>
-<span class="sourceLineNo">620</span><a id="line.620">                {</a>
-<span class="sourceLineNo">621</span><a id="line.621">                    m_session.addMessage( "Info." + property, "File '" + propertyValue + "' exists in the filesystem." );</a>
-<span class="sourceLineNo">622</span><a id="line.622">                    return file;</a>
-<span class="sourceLineNo">623</span><a id="line.623">                }</a>
-<span class="sourceLineNo">624</span><a id="line.624">            }</a>
-<span class="sourceLineNo">625</span><a id="line.625">            catch( final MalformedURLException e )</a>
-<span class="sourceLineNo">626</span><a id="line.626">            {</a>
-<span class="sourceLineNo">627</span><a id="line.627">                // Swallow exception because we can't find it anyway</a>
-<span class="sourceLineNo">628</span><a id="line.628">            }</a>
-<span class="sourceLineNo">629</span><a id="line.629">            m_session.addMessage( "Error." + property, "File '" + propertyValue</a>
-<span class="sourceLineNo">630</span><a id="line.630">                    + "' doesn't seem to exist. This might be a problem." );</a>
-<span class="sourceLineNo">631</span><a id="line.631">            return null;</a>
-<span class="sourceLineNo">632</span><a id="line.632">        }</a>
-<span class="sourceLineNo">633</span><a id="line.633">        catch( final SecurityException e )</a>
-<span class="sourceLineNo">634</span><a id="line.634">        {</a>
-<span class="sourceLineNo">635</span><a id="line.635">            m_session.addMessage( "Error." + property, "We could not read system property '" + property</a>
-<span class="sourceLineNo">636</span><a id="line.636">                    + "'. This is probably because you are running with a security manager." );</a>
-<span class="sourceLineNo">637</span><a id="line.637">            return null;</a>
-<span class="sourceLineNo">638</span><a id="line.638">        }</a>
-<span class="sourceLineNo">639</span><a id="line.639">    }</a>
-<span class="sourceLineNo">640</span><a id="line.640"></a>
-<span class="sourceLineNo">641</span><a id="line.641">    /**</a>
-<span class="sourceLineNo">642</span><a id="line.642">     * Verfies the Java security policy configuration. The configuration is</a>
-<span class="sourceLineNo">643</span><a id="line.643">     * valid if value of the local policy (at &lt;code&gt;WEB-INF/jspwiki.policy&lt;/code&gt;</a>
-<span class="sourceLineNo">644</span><a id="line.644">     * resolves to an existing file, and the policy file contained therein</a>
-<span class="sourceLineNo">645</span><a id="line.645">     * represents a valid policy.</a>
-<span class="sourceLineNo">646</span><a id="line.646">     */</a>
-<span class="sourceLineNo">647</span><a id="line.647">    @SuppressWarnings("unchecked")</a>
-<span class="sourceLineNo">648</span><a id="line.648">    void verifyPolicy() {</a>
-<span class="sourceLineNo">649</span><a id="line.649">        // Look up the policy file and set the status text.</a>
-<span class="sourceLineNo">650</span><a id="line.650">        final URL policyURL = m_engine.findConfigFile( AuthorizationManager.DEFAULT_POLICY );</a>
-<span class="sourceLineNo">651</span><a id="line.651">        String path = policyURL.getPath();</a>
-<span class="sourceLineNo">652</span><a id="line.652">        if ( path.startsWith("file:") ) {</a>
-<span class="sourceLineNo">653</span><a id="line.653">            path = path.substring( 5 );</a>
-<span class="sourceLineNo">654</span><a id="line.654">        }</a>
-<span class="sourceLineNo">655</span><a id="line.655">        final File policyFile = new File( path );</a>
-<span class="sourceLineNo">656</span><a id="line.656"></a>
-<span class="sourceLineNo">657</span><a id="line.657">        // Next, verify the policy</a>
-<span class="sourceLineNo">658</span><a id="line.658">        try {</a>
-<span class="sourceLineNo">659</span><a id="line.659">            // Get the file</a>
-<span class="sourceLineNo">660</span><a id="line.660">            final PolicyReader policy = new PolicyReader( policyFile );</a>
-<span class="sourceLineNo">661</span><a id="line.661">            m_session.addMessage( INFO_POLICY, "The security policy '" + policy.getFile() + "' exists." );</a>
-<span class="sourceLineNo">662</span><a id="line.662"></a>
-<span class="sourceLineNo">663</span><a id="line.663">            // See if there is a keystore that's valid</a>
-<span class="sourceLineNo">664</span><a id="line.664">            final KeyStore ks = policy.getKeyStore();</a>
-<span class="sourceLineNo">665</span><a id="line.665">            if ( ks == null ) {</a>
-<span class="sourceLineNo">666</span><a id="line.666">                m_session.addMessage( WARNING_POLICY,</a>
-<span class="sourceLineNo">667</span><a id="line.667">                    "Policy file does not have a keystore... at least not one that we can locate. If your policy file " +</a>
-<span class="sourceLineNo">668</span><a id="line.668">                    "does not contain any 'signedBy' blocks, this is probably ok." );</a>
-<span class="sourceLineNo">669</span><a id="line.669">            } else {</a>
-<span class="sourceLineNo">670</span><a id="line.670">                m_session.addMessage( INFO_POLICY,</a>
-<span class="sourceLineNo">671</span><a id="line.671">                    "The security policy specifies a keystore, and we were able to locate it in the filesystem." );</a>
-<span class="sourceLineNo">672</span><a id="line.672">            }</a>
-<span class="sourceLineNo">673</span><a id="line.673"></a>
-<span class="sourceLineNo">674</span><a id="line.674">            // Verify the file</a>
-<span class="sourceLineNo">675</span><a id="line.675">            policy.read();</a>
-<span class="sourceLineNo">676</span><a id="line.676">            final List&lt;Exception&gt; errors = policy.getMessages();</a>
-<span class="sourceLineNo">677</span><a id="line.677">            if ( errors.size() &gt; 0 ) {</a>
-<span class="sourceLineNo">678</span><a id="line.678">                for( final Exception e : errors ) {</a>
-<span class="sourceLineNo">679</span><a id="line.679">                    m_session.addMessage( ERROR_POLICY, e.getMessage() );</a>
-<span class="sourceLineNo">680</span><a id="line.680">                }</a>
-<span class="sourceLineNo">681</span><a id="line.681">            } else {</a>
-<span class="sourceLineNo">682</span><a id="line.682">                m_session.addMessage( INFO_POLICY, "The security policy looks fine." );</a>
-<span class="sourceLineNo">683</span><a id="line.683">                m_isSecurityPolicyConfigured = true;</a>
-<span class="sourceLineNo">684</span><a id="line.684">            }</a>
-<span class="sourceLineNo">685</span><a id="line.685"></a>
-<span class="sourceLineNo">686</span><a id="line.686">            // Stash the unique principals mentioned in the file,</a>
-<span class="sourceLineNo">687</span><a id="line.687">            // plus our standard roles.</a>
-<span class="sourceLineNo">688</span><a id="line.688">            final Set&lt;Principal&gt; principals = new LinkedHashSet&lt;&gt;();</a>
-<span class="sourceLineNo">689</span><a id="line.689">            principals.add( Role.ALL );</a>
-<span class="sourceLineNo">690</span><a id="line.690">            principals.add( Role.ANONYMOUS );</a>
-<span class="sourceLineNo">691</span><a id="line.691">            principals.add( Role.ASSERTED );</a>
-<span class="sourceLineNo">692</span><a id="line.692">            principals.add( Role.AUTHENTICATED );</a>
-<span class="sourceLineNo">693</span><a id="line.693">            final ProtectionDomain[] domains = policy.getProtectionDomains();</a>
-<span class="sourceLineNo">694</span><a id="line.694">            for ( final ProtectionDomain domain : domains ) {</a>
-<span class="sourceLineNo">695</span><a id="line.695">                principals.addAll(Arrays.asList(domain.getPrincipals()));</a>
-<span class="sourceLineNo">696</span><a id="line.696">            }</a>
-<span class="sourceLineNo">697</span><a id="line.697">            m_policyPrincipals = principals.toArray( new Principal[0] );</a>
-<span class="sourceLineNo">698</span><a id="line.698">        } catch( final IOException e ) {</a>
-<span class="sourceLineNo">699</span><a id="line.699">            m_session.addMessage( ERROR_POLICY, e.getMessage() );</a>
-<span class="sourceLineNo">700</span><a id="line.700">        }</a>
-<span class="sourceLineNo">701</span><a id="line.701">    }</a>
-<span class="sourceLineNo">702</span><a id="line.702"></a>
-<span class="sourceLineNo">703</span><a id="line.703">    /**</a>
-<span class="sourceLineNo">704</span><a id="line.704">     * Verifies that a particular Principal possesses a Permission, as defined</a>
-<span class="sourceLineNo">705</span><a id="line.705">     * in the security policy file.</a>
-<span class="sourceLineNo">706</span><a id="line.706">     * @param principal the principal</a>
-<span class="sourceLineNo">707</span><a id="line.707">     * @param permission the permission</a>
-<span class="sourceLineNo">708</span><a id="line.708">     * @return the result, based on consultation with the active Java security</a>
-<span class="sourceLineNo">709</span><a id="line.709">     *         policy</a>
-<span class="sourceLineNo">710</span><a id="line.710">     */</a>
-<span class="sourceLineNo">711</span><a id="line.711">    boolean verifyStaticPermission( final Principal principal, final Permission permission )</a>
-<span class="sourceLineNo">712</span><a id="line.712">    {</a>
-<span class="sourceLineNo">713</span><a id="line.713">        final Subject subject = new Subject();</a>
-<span class="sourceLineNo">714</span><a id="line.714">        subject.getPrincipals().add( principal );</a>
-<span class="sourceLineNo">715</span><a id="line.715">        final boolean allowedByGlobalPolicy = (Boolean)</a>
-<span class="sourceLineNo">716</span><a id="line.716">            Subject.doAsPrivileged( subject, ( PrivilegedAction&lt; Object &gt; )() -&gt; {</a>
-<span class="sourceLineNo">717</span><a id="line.717">                try {</a>
-<span class="sourceLineNo">718</span><a id="line.718">                    AccessController.checkPermission( permission );</a>
-<span class="sourceLineNo">719</span><a id="line.719">                    return Boolean.TRUE;</a>
-<span class="sourceLineNo">720</span><a id="line.720">                } catch( final AccessControlException e ) {</a>
-<span class="sourceLineNo">721</span><a id="line.721">                    return Boolean.FALSE;</a>
-<span class="sourceLineNo">722</span><a id="line.722">                }</a>
-<span class="sourceLineNo">723</span><a id="line.723">            }, null );</a>
-<span class="sourceLineNo">724</span><a id="line.724"></a>
-<span class="sourceLineNo">725</span><a id="line.725">        if ( allowedByGlobalPolicy )</a>
-<span class="sourceLineNo">726</span><a id="line.726">        {</a>
-<span class="sourceLineNo">727</span><a id="line.727">            return true;</a>
-<span class="sourceLineNo">728</span><a id="line.728">        }</a>
-<span class="sourceLineNo">729</span><a id="line.729"></a>
-<span class="sourceLineNo">730</span><a id="line.730">        // Check local policy</a>
-<span class="sourceLineNo">731</span><a id="line.731">        final Principal[] principals = new Principal[]{ principal };</a>
-<span class="sourceLineNo">732</span><a id="line.732">        return m_engine.getManager( AuthorizationManager.class ).allowedByLocalPolicy( principals, permission );</a>
-<span class="sourceLineNo">733</span><a id="line.733">    }</a>
-<span class="sourceLineNo">734</span><a id="line.734"></a>
-<span class="sourceLineNo">735</span><a id="line.735">    /**</a>
-<span class="sourceLineNo">736</span><a id="line.736">     * Verifies that the user datbase was initialized properly, and that</a>
-<span class="sourceLineNo">737</span><a id="line.737">     * user add and delete operations work as they should.</a>
-<span class="sourceLineNo">738</span><a id="line.738">     */</a>
-<span class="sourceLineNo">739</span><a id="line.739">    void verifyUserDatabase()</a>
-<span class="sourceLineNo">740</span><a id="line.740">    {</a>
-<span class="sourceLineNo">741</span><a id="line.741">        final UserDatabase db = m_engine.getManager( UserManager.class ).getUserDatabase();</a>
-<span class="sourceLineNo">742</span><a id="line.742"></a>
-<span class="sourceLineNo">743</span><a id="line.743">        // Check for obvious error conditions</a>
-<span class="sourceLineNo">744</span><a id="line.744">        if ( db == null )</a>
-<span class="sourceLineNo">745</span><a id="line.745">        {</a>
-<span class="sourceLineNo">746</span><a id="line.746">            m_session.addMessage( ERROR_DB, "UserDatabase is null; JSPWiki could not " +</a>
-<span class="sourceLineNo">747</span><a id="line.747">                    "initialize it. Check the error logs." );</a>
-<span class="sourceLineNo">748</span><a id="line.748">            return;</a>
-<span class="sourceLineNo">749</span><a id="line.749">        }</a>
-<span class="sourceLineNo">750</span><a id="line.750"></a>
-<span class="sourceLineNo">751</span><a id="line.751">        if ( db instanceof DummyUserDatabase )</a>
-<span class="sourceLineNo">752</span><a id="line.752">        {</a>
-<span class="sourceLineNo">753</span><a id="line.753">            m_session.addMessage( ERROR_DB, "UserDatabase is DummyUserDatabase; JSPWiki " +</a>
-<span class="sourceLineNo">754</span><a id="line.754">                    "may not have been able to initialize the database you supplied in " +</a>
-<span class="sourceLineNo">755</span><a id="line.755">                    "jspwiki.properties, or you left the 'jspwiki.userdatabase' property " +</a>
-<span class="sourceLineNo">756</span><a id="line.756">                    "blank. Check the error logs." );</a>
-<span class="sourceLineNo">757</span><a id="line.757">        }</a>
-<span class="sourceLineNo">758</span><a id="line.758"></a>
-<span class="sourceLineNo">759</span><a id="line.759">        // Tell user what class of database this is.</a>
-<span class="sourceLineNo">760</span><a id="line.760">        m_session.addMessage( INFO_DB, "UserDatabase is of type '" + db.getClass().getName() +</a>
-<span class="sourceLineNo">761</span><a id="line.761">                                       "'. It appears to be initialized properly." );</a>
-<span class="sourceLineNo">762</span><a id="line.762"></a>
-<span class="sourceLineNo">763</span><a id="line.763">        // Now, see how many users we have.</a>
-<span class="sourceLineNo">764</span><a id="line.764">        final int oldUserCount;</a>
-<span class="sourceLineNo">765</span><a id="line.765">        try {</a>
-<span class="sourceLineNo">766</span><a id="line.766">            final Principal[] users = db.getWikiNames();</a>
-<span class="sourceLineNo">767</span><a id="line.767">            oldUserCount = users.length;</a>
-<span class="sourceLineNo">768</span><a id="line.768">            m_session.addMessage( INFO_DB, "The user database contains " + oldUserCount + " users." );</a>
-<span class="sourceLineNo">769</span><a id="line.769">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">770</span><a id="line.770">            m_session.addMessage( ERROR_DB, "Could not obtain a list of current users: " + e.getMessage() );</a>
-<span class="sourceLineNo">771</span><a id="line.771">            return;</a>
-<span class="sourceLineNo">772</span><a id="line.772">        }</a>
-<span class="sourceLineNo">773</span><a id="line.773"></a>
-<span class="sourceLineNo">774</span><a id="line.774">        // Try adding a bogus user with random name</a>
-<span class="sourceLineNo">775</span><a id="line.775">        final String loginName = "TestUser" + System.currentTimeMillis();</a>
-<span class="sourceLineNo">776</span><a id="line.776">        try {</a>
-<span class="sourceLineNo">777</span><a id="line.777">            final UserProfile profile = db.newProfile();</a>
-<span class="sourceLineNo">778</span><a id="line.778">            profile.setEmail( "jspwiki.tests@mailinator.com" );</a>
-<span class="sourceLineNo">779</span><a id="line.779">            profile.setLoginName( loginName );</a>
-<span class="sourceLineNo">780</span><a id="line.780">            profile.setFullname( "FullName" + loginName );</a>
-<span class="sourceLineNo">781</span><a id="line.781">            profile.setPassword( "password" );</a>
-<span class="sourceLineNo">782</span><a id="line.782">            db.save( profile );</a>
-<span class="sourceLineNo">783</span><a id="line.783"></a>
-<span class="sourceLineNo">784</span><a id="line.784">            // Make sure the profile saved successfully</a>
-<span class="sourceLineNo">785</span><a id="line.785">            if( db.getWikiNames().length == oldUserCount ) {</a>
-<span class="sourceLineNo">786</span><a id="line.786">                m_session.addMessage( ERROR_DB, "Could not add a test user to the database." );</a>
-<span class="sourceLineNo">787</span><a id="line.787">                return;</a>
-<span class="sourceLineNo">788</span><a id="line.788">            }</a>
-<span class="sourceLineNo">789</span><a id="line.789">            m_session.addMessage( INFO_DB, "The user database allows new users to be created, as it should." );</a>
-<span class="sourceLineNo">790</span><a id="line.790">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">791</span><a id="line.791">            m_session.addMessage( ERROR_DB, "Could not add a test user to the database: " + e.getMessage() );</a>
-<span class="sourceLineNo">792</span><a id="line.792">            return;</a>
-<span class="sourceLineNo">793</span><a id="line.793">        }</a>
-<span class="sourceLineNo">794</span><a id="line.794"></a>
-<span class="sourceLineNo">795</span><a id="line.795">        // Now delete the profile; should be back to old count</a>
-<span class="sourceLineNo">796</span><a id="line.796">        try {</a>
-<span class="sourceLineNo">797</span><a id="line.797">            db.deleteByLoginName( loginName );</a>
-<span class="sourceLineNo">798</span><a id="line.798">            if( db.getWikiNames().length != oldUserCount ) {</a>
-<span class="sourceLineNo">799</span><a id="line.799">                m_session.addMessage( ERROR_DB, "Could not delete a test user from the database." );</a>
-<span class="sourceLineNo">800</span><a id="line.800">                return;</a>
-<span class="sourceLineNo">801</span><a id="line.801">            }</a>
-<span class="sourceLineNo">802</span><a id="line.802">            m_session.addMessage( INFO_DB, "The user database allows users to be deleted, as it should." );</a>
-<span class="sourceLineNo">803</span><a id="line.803">        } catch( final WikiSecurityException e ) {</a>
-<span class="sourceLineNo">804</span><a id="line.804">            m_session.addMessage( ERROR_DB, "Could not delete a test user to the database: " + e.getMessage() );</a>
-<span class="sourceLineNo">805</span><a id="line.805">            return;</a>
-<span class="sourceLineNo">806</span><a id="line.806">        }</a>
-<span class="sourceLineNo">807</span><a id="line.807"></a>
-<span class="sourceLineNo">808</span><a id="line.808">        m_session.addMessage( INFO_DB, "The user database configuration looks fine." );</a>
-<span class="sourceLineNo">809</span><a id="line.809">    }</a>
-<span class="sourceLineNo">810</span><a id="line.810">}</a>
+<span class="sourceLineNo">270</span><a id="line.270">        // Now check the wiki-wide permissions</a>
+<span class="sourceLineNo">271</span><a id="line.271">        final String[] wikiPerms = new String[] { "createGroups", "createPages", "login", "editPreferences", "editProfile" };</a>
+<span class="sourceLineNo">272</span><a id="line.272">        for( final String wikiPerm : wikiPerms ) {</a>
+<span class="sourceLineNo">273</span><a id="line.273">            s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">274</span><a id="line.274">            s.append( "    &lt;td&gt;WikiPermission \"" ).append( wiki ).append( "\",\"" ).append( wikiPerm ).append( "\"&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">275</span><a id="line.275">            for( final Principal role : roles ) {</a>
+<span class="sourceLineNo">276</span><a id="line.276">                final Permission permission = new WikiPermission( wiki, wikiPerm );</a>
+<span class="sourceLineNo">277</span><a id="line.277">                s.append( printPermissionTest( permission, role, pageActionsLength ) );</a>
+<span class="sourceLineNo">278</span><a id="line.278">            }</a>
+<span class="sourceLineNo">279</span><a id="line.279">            s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">280</span><a id="line.280">        }</a>
+<span class="sourceLineNo">281</span><a id="line.281"></a>
+<span class="sourceLineNo">282</span><a id="line.282">        // Lastly, check for AllPermission</a>
+<span class="sourceLineNo">283</span><a id="line.283">        s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">284</span><a id="line.284">        s.append( "    &lt;td&gt;AllPermission \"" ).append( wiki ).append( "\"&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">285</span><a id="line.285">        for( final Principal role : roles )</a>
+<span class="sourceLineNo">286</span><a id="line.286">        {</a>
+<span class="sourceLineNo">287</span><a id="line.287">            final Permission permission = new AllPermission( wiki );</a>
+<span class="sourceLineNo">288</span><a id="line.288">            s.append( printPermissionTest( permission, role, pageActionsLength ) );</a>
+<span class="sourceLineNo">289</span><a id="line.289">        }</a>
+<span class="sourceLineNo">290</span><a id="line.290">        s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">291</span><a id="line.291"></a>
+<span class="sourceLineNo">292</span><a id="line.292">        // We're done!</a>
+<span class="sourceLineNo">293</span><a id="line.293">        s.append( "&lt;/table&gt;" );</a>
+<span class="sourceLineNo">294</span><a id="line.294">        return s.toString();</a>
+<span class="sourceLineNo">295</span><a id="line.295">    }</a>
+<span class="sourceLineNo">296</span><a id="line.296"></a>
+<span class="sourceLineNo">297</span><a id="line.297">    /**</a>
+<span class="sourceLineNo">298</span><a id="line.298">     * Prints a &amp;lt;td&amp;gt; HTML element with the results of a permission test.</a>
+<span class="sourceLineNo">299</span><a id="line.299">     * @param permission the permission to format</a>
+<span class="sourceLineNo">300</span><a id="line.300">     * @param principal</a>
+<span class="sourceLineNo">301</span><a id="line.301">     * @param cols</a>
+<span class="sourceLineNo">302</span><a id="line.302">     */</a>
+<span class="sourceLineNo">303</span><a id="line.303">    private String printPermissionTest( final Permission permission, final Principal principal, final int cols ) {</a>
+<span class="sourceLineNo">304</span><a id="line.304">        final StringBuilder s = new StringBuilder();</a>
+<span class="sourceLineNo">305</span><a id="line.305">        if( permission == null ) {</a>
+<span class="sourceLineNo">306</span><a id="line.306">            s.append( "    &lt;td colspan=\"" ).append( cols ).append( "\" align=\"center\" title=\"N/A\"&gt;" );</a>
+<span class="sourceLineNo">307</span><a id="line.307">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">308</span><a id="line.308">        } else {</a>
+<span class="sourceLineNo">309</span><a id="line.309">            final boolean allowed = verifyStaticPermission( principal, permission );</a>
+<span class="sourceLineNo">310</span><a id="line.310">            s.append( "    &lt;td colspan=\"" ).append( cols ).append( "\" align=\"center\" title=\"" );</a>
+<span class="sourceLineNo">311</span><a id="line.311">            s.append( allowed ? "ALLOW: " : "DENY: " );</a>
+<span class="sourceLineNo">312</span><a id="line.312">            s.append( permission.getClass().getName() );</a>
+<span class="sourceLineNo">313</span><a id="line.313">            s.append( " &amp;quot;" );</a>
+<span class="sourceLineNo">314</span><a id="line.314">            s.append( permission.getName() );</a>
+<span class="sourceLineNo">315</span><a id="line.315">            s.append( "&amp;quot;" );</a>
+<span class="sourceLineNo">316</span><a id="line.316">            if ( permission.getName() != null )</a>
+<span class="sourceLineNo">317</span><a id="line.317">            {</a>
+<span class="sourceLineNo">318</span><a id="line.318">                s.append( ",&amp;quot;" );</a>
+<span class="sourceLineNo">319</span><a id="line.319">                s.append( permission.getActions() );</a>
+<span class="sourceLineNo">320</span><a id="line.320">                s.append( "&amp;quot;" );</a>
+<span class="sourceLineNo">321</span><a id="line.321">            }</a>
+<span class="sourceLineNo">322</span><a id="line.322">            s.append( " " );</a>
+<span class="sourceLineNo">323</span><a id="line.323">            s.append( principal.getClass().getName() );</a>
+<span class="sourceLineNo">324</span><a id="line.324">            s.append( " &amp;quot;" );</a>
+<span class="sourceLineNo">325</span><a id="line.325">            s.append( principal.getName() );</a>
+<span class="sourceLineNo">326</span><a id="line.326">            s.append( "&amp;quot;" );</a>
+<span class="sourceLineNo">327</span><a id="line.327">            s.append( "\"" );</a>
+<span class="sourceLineNo">328</span><a id="line.328">            s.append( allowed ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
+<span class="sourceLineNo">329</span><a id="line.329">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">330</span><a id="line.330">        }</a>
+<span class="sourceLineNo">331</span><a id="line.331">        return s.toString();</a>
+<span class="sourceLineNo">332</span><a id="line.332">    }</a>
+<span class="sourceLineNo">333</span><a id="line.333"></a>
+<span class="sourceLineNo">334</span><a id="line.334">    /**</a>
+<span class="sourceLineNo">335</span><a id="line.335">     * Formats and returns an HTML table containing the roles the web container</a>
+<span class="sourceLineNo">336</span><a id="line.336">     * is aware of, and whether each role maps to particular JSPs. This method</a>
+<span class="sourceLineNo">337</span><a id="line.337">     * throws an {@link IllegalStateException} if the authorizer is not of type</a>
+<span class="sourceLineNo">338</span><a id="line.338">     * {@link org.apache.wiki.auth.authorize.WebContainerAuthorizer}</a>
+<span class="sourceLineNo">339</span><a id="line.339">     * @return the formatted HTML table containing the result of the tests</a>
+<span class="sourceLineNo">340</span><a id="line.340">     * @throws WikiException if tests fail for unexpected reasons</a>
+<span class="sourceLineNo">341</span><a id="line.341">     */</a>
+<span class="sourceLineNo">342</span><a id="line.342">    public String containerRoleTable() throws WikiException {</a>
+<span class="sourceLineNo">343</span><a id="line.343">        final AuthorizationManager authorizationManager = m_engine.getManager( AuthorizationManager.class );</a>
+<span class="sourceLineNo">344</span><a id="line.344">        final Authorizer authorizer = authorizationManager.getAuthorizer();</a>
+<span class="sourceLineNo">345</span><a id="line.345"></a>
+<span class="sourceLineNo">346</span><a id="line.346">        // If authorizer not WebContainerAuthorizer, print error message</a>
+<span class="sourceLineNo">347</span><a id="line.347">        if ( !( authorizer instanceof WebContainerAuthorizer ) ) {</a>
+<span class="sourceLineNo">348</span><a id="line.348">            throw new IllegalStateException( "Authorizer should be WebContainerAuthorizer" );</a>
+<span class="sourceLineNo">349</span><a id="line.349">        }</a>
+<span class="sourceLineNo">350</span><a id="line.350"></a>
+<span class="sourceLineNo">351</span><a id="line.351">        // Now, print a table with JSP pages listed on the left, and</a>
+<span class="sourceLineNo">352</span><a id="line.352">        // an evaluation of each pages' constraints for each role</a>
+<span class="sourceLineNo">353</span><a id="line.353">        // we discovered</a>
+<span class="sourceLineNo">354</span><a id="line.354">        final StringBuilder s = new StringBuilder();</a>
+<span class="sourceLineNo">355</span><a id="line.355">        final Principal[] roles = authorizer.getRoles();</a>
+<span class="sourceLineNo">356</span><a id="line.356">        s.append( "&lt;table class=\"wikitable\" border=\"1\"&gt;\n" );</a>
+<span class="sourceLineNo">357</span><a id="line.357">        s.append( "&lt;thead&gt;\n" );</a>
+<span class="sourceLineNo">358</span><a id="line.358">        s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">359</span><a id="line.359">        s.append( "    &lt;th rowspan=\"2\"&gt;Action&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">360</span><a id="line.360">        s.append( "    &lt;th rowspan=\"2\"&gt;Page&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">361</span><a id="line.361">        s.append( "    &lt;th colspan=\"" ).append( roles.length ).append( 1 ).append( "\"&gt;Roles&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">362</span><a id="line.362">        s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">363</span><a id="line.363">        s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">364</span><a id="line.364">        s.append( "    &lt;th&gt;Anonymous&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">365</span><a id="line.365">        for( final Principal role : roles ) {</a>
+<span class="sourceLineNo">366</span><a id="line.366">            s.append( "    &lt;th&gt;" ).append( role.getName() ).append( "&lt;/th&gt;\n" );</a>
+<span class="sourceLineNo">367</span><a id="line.367">        }</a>
+<span class="sourceLineNo">368</span><a id="line.368">        s.append( "&lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">369</span><a id="line.369">        s.append( "&lt;/thead&gt;\n" );</a>
+<span class="sourceLineNo">370</span><a id="line.370">        s.append( "&lt;tbody&gt;\n" );</a>
+<span class="sourceLineNo">371</span><a id="line.371"></a>
+<span class="sourceLineNo">372</span><a id="line.372">        final WebContainerAuthorizer wca = (WebContainerAuthorizer) authorizer;</a>
+<span class="sourceLineNo">373</span><a id="line.373">        for( int i = 0; i &lt; CONTAINER_ACTIONS.length; i++ ) {</a>
+<span class="sourceLineNo">374</span><a id="line.374">            final String action = CONTAINER_ACTIONS[i];</a>
+<span class="sourceLineNo">375</span><a id="line.375">            final String jsp = CONTAINER_JSPS[i];</a>
+<span class="sourceLineNo">376</span><a id="line.376"></a>
+<span class="sourceLineNo">377</span><a id="line.377">            // Print whether the page is constrained for each role</a>
+<span class="sourceLineNo">378</span><a id="line.378">            final boolean allowsAnonymous = !wca.isConstrained( jsp, Role.ALL );</a>
+<span class="sourceLineNo">379</span><a id="line.379">            s.append( "  &lt;tr&gt;\n" );</a>
+<span class="sourceLineNo">380</span><a id="line.380">            s.append( "    &lt;td&gt;" ).append( action ).append( "&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">381</span><a id="line.381">            s.append( "    &lt;td&gt;" ).append( jsp ).append( "&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">382</span><a id="line.382">            s.append( "    &lt;td title=\"" );</a>
+<span class="sourceLineNo">383</span><a id="line.383">            s.append( allowsAnonymous ? "ALLOW: " : "DENY: " );</a>
+<span class="sourceLineNo">384</span><a id="line.384">            s.append( jsp );</a>
+<span class="sourceLineNo">385</span><a id="line.385">            s.append( " Anonymous" );</a>
+<span class="sourceLineNo">386</span><a id="line.386">            s.append( "\"" );</a>
+<span class="sourceLineNo">387</span><a id="line.387">            s.append( allowsAnonymous ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
+<span class="sourceLineNo">388</span><a id="line.388">            s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">389</span><a id="line.389">            for( final Principal role : roles )</a>
+<span class="sourceLineNo">390</span><a id="line.390">            {</a>
+<span class="sourceLineNo">391</span><a id="line.391">                final boolean allowed = allowsAnonymous || wca.isConstrained( jsp, (Role)role );</a>
+<span class="sourceLineNo">392</span><a id="line.392">                s.append( "    &lt;td title=\"" );</a>
+<span class="sourceLineNo">393</span><a id="line.393">                s.append( allowed ? "ALLOW: " : "DENY: " );</a>
+<span class="sourceLineNo">394</span><a id="line.394">                s.append( jsp );</a>
+<span class="sourceLineNo">395</span><a id="line.395">                s.append( " " );</a>
+<span class="sourceLineNo">396</span><a id="line.396">                s.append( role.getClass().getName() );</a>
+<span class="sourceLineNo">397</span><a id="line.397">                s.append( " &amp;quot;" );</a>
+<span class="sourceLineNo">398</span><a id="line.398">                s.append( role.getName() );</a>
+<span class="sourceLineNo">399</span><a id="line.399">                s.append( "&amp;quot;" );</a>
+<span class="sourceLineNo">400</span><a id="line.400">                s.append( "\"" );</a>
+<span class="sourceLineNo">401</span><a id="line.401">                s.append( allowed ? BG_GREEN + "&gt;" : BG_RED + "&gt;" );</a>
+<span class="sourceLineNo">402</span><a id="line.402">                s.append( "&amp;nbsp;&lt;/td&gt;\n" );</a>
+<span class="sourceLineNo">403</span><a id="line.403">            }</a>
+<span class="sourceLineNo">404</span><a id="line.404">            s.append( "  &lt;/tr&gt;\n" );</a>
+<span class="sourceLineNo">405</span><a id="line.405">        }</a>
+<span class="sourceLineNo">406</span><a id="line.406"></a>
+<span class="sourceLineNo">407</span><a id="line.407">        s.append( "&lt;/tbody&gt;\n" );</a>
+<span class="sourceLineNo">408</span><a id="line.408">        s.append( "&lt;/table&gt;\n" );</a>
+<span class="sourceLineNo">409</span><a id="line.409">        return s.toString();</a>
+<span class="sourceLineNo">410</span><a id="line.410">    }</a>
+<span class="sourceLineNo">411</span><a id="line.411"></a>
+<span class="sourceLineNo">412</span><a id="line.412">    /**</a>
+<span class="sourceLineNo">413</span><a id="line.413">     * Returns &lt;code&gt;true&lt;/code&gt; if the Java security policy is configured</a>
+<span class="sourceLineNo">414</span><a id="line.414">     * correctly, and it verifies as valid.</a>
+<span class="sourceLineNo">415</span><a id="line.415">     * @return the result of the configuration check</a>
+<span class="sourceLineNo">416</span><a id="line.416">     */</a>
+<span class="sourceLineNo">417</span><a id="line.417">    public boolean isSecurityPolicyConfigured()</a>
+<span class="sourceLineNo">418</span><a id="line.418">    {</a>
+<span class="sourceLineNo">419</span><a id="line.419">        return m_isSecurityPolicyConfigured;</a>
+<span class="sourceLineNo">420</span><a id="line.420">    }</a>
+<span class="sourceLineNo">421</span><a id="line.421"></a>
+<span class="sourceLineNo">422</span><a id="line.422">    /**</a>
+<span class="sourceLineNo">423</span><a id="line.423">     * If the active Authorizer is the WebContainerAuthorizer, returns the roles it knows about; otherwise, a zero-length array.</a>
+<span class="sourceLineNo">424</span><a id="line.424">     *</a>
+<span class="sourceLineNo">425</span><a id="line.425">     * @return the roles parsed from &lt;code&gt;web.xml&lt;/code&gt;, or a zero-length array</a>
+<span class="sourceLineNo">426</span><a id="line.426">     * @throws WikiException if the web authorizer cannot obtain the list of roles</a>
+<span class="sourceLineNo">427</span><a id="line.427">     */</a>
+<span class="sourceLineNo">428</span><a id="line.428">    public Principal[] webContainerRoles() throws WikiException {</a>
+<span class="sourceLineNo">429</span><a id="line.429">        final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer();</a>
+<span class="sourceLineNo">430</span><a id="line.430">        if ( authorizer instanceof WebContainerAuthorizer ) {</a>
+<span class="sourceLineNo">431</span><a id="line.431">            return authorizer.getRoles();</a>
+<span class="sourceLineNo">432</span><a id="line.432">        }</a>
+<span class="sourceLineNo">433</span><a id="line.433">        return new Principal[0];</a>
+<span class="sourceLineNo">434</span><a id="line.434">    }</a>
+<span class="sourceLineNo">435</span><a id="line.435"></a>
+<span class="sourceLineNo">436</span><a id="line.436">    /**</a>
+<span class="sourceLineNo">437</span><a id="line.437">     * Verifies that the roles given in the security policy are reflected by the</a>
+<span class="sourceLineNo">438</span><a id="line.438">     * container &lt;code&gt;web.xml&lt;/code&gt; file.</a>
+<span class="sourceLineNo">439</span><a id="line.439">     * @throws WikiException if the web authorizer cannot verify the roles</a>
+<span class="sourceLineNo">440</span><a id="line.440">     */</a>
+<span class="sourceLineNo">441</span><a id="line.441">    void verifyPolicyAndContainerRoles() throws WikiException</a>
+<span class="sourceLineNo">442</span><a id="line.442">    {</a>
+<span class="sourceLineNo">443</span><a id="line.443">        final Authorizer authorizer = m_engine.getManager( AuthorizationManager.class ).getAuthorizer();</a>
+<span class="sourceLineNo">444</span><a id="line.444">        final Principal[] containerRoles = authorizer.getRoles();</a>
+<span class="sourceLineNo">445</span><a id="line.445">        boolean missing = false;</a>
+<span class="sourceLineNo">446</span><a id="line.446">        for( final Principal principal : m_policyPrincipals )</a>
+<span class="sourceLineNo">447</span><a id="line.447">        {</a>
+<span class="sourceLineNo">448</span><a id="line.448">            if ( principal instanceof Role )</a>
+<span class="sourceLineNo">449</span><a id="line.449">            {</a>
+<span class="sourceLineNo">450</span><a id="line.450">                final Role role = (Role) principal;</a>
+<span class="sourceLineNo">451</span><a id="line.451">                final boolean isContainerRole = ArrayUtils.contains( containerRoles, role );</a>
+<span class="sourceLineNo">452</span><a id="line.452">                if ( !Role.isBuiltInRole( role ) &amp;&amp; !isContainerRole )</a>
+<span class="sourceLineNo">453</span><a id="line.453">                {</a>
+<span class="sourceLineNo">454</span><a id="line.454">                    m_session.addMessage( ERROR_ROLES, "Role '" + role.getName() + "' is defined in security policy but not in web.xml." );</a>
+<span class="sourceLineNo">455</span><a id="line.455">                    missing = true;</a>
+<span class="sourceLineNo">456</span><a id="line.456">                }</a>
+<span class="sourceLineNo">457</span><a id="line.457">            }</a>
+<span class="sourceLineNo">458</span><a id="line.458">        }</a>
+<span class="sourceLineNo">459</span><a id="line.459">        if ( !missing )</a>
+<span class="sourceLineNo">460</span><a id="line.460">        {</a>
+<span class="sourceLineNo">461</span><a id="line.461">            m_session.addMessage( INFO_ROLES, "Every non-standard role defined in the security policy was also found in web.xml." );</a>
+<span class="sourceLineNo">462</span><a id="line.462">        }</a>
+<span class="sourceLineNo">463</span><a id="line.463">    }</a>
+<span class="sourceLineNo">464</span><a id="line.464"></a>
+<span class="sourceLineNo">465</span><a id="line.465">    /**</a>
+<span class="sourceLineNo">466</span><a id="line.466">     * Verifies that the group datbase was initialized properly, and that</a>
+<span class="sourceLineNo">467</span><a id="line.467">     * user add and delete operations work as they should.</a>
+<span class="sourceLineNo">468</span><a id="line.468">     */</a>
+<span class="sourceLineNo">469</span><a id="line.469">    void verifyGroupDatabase()</a>
+<span class="sourceLineNo">470</span><a id="line.470">    {</a>
+<span class="sourceLineNo">471</span><a id="line.471">        final GroupManager mgr = m_engine.getManager( GroupManager.class );</a>
+<span class="sourceLineNo">472</span><a id="line.472">        GroupDatabase db = null;</a>
+<span class="sourceLineNo">473</span><a id="line.473">        try {</a>
+<span class="sourceLineNo">474</span><a id="line.474">            db = m_engine.getManager( GroupManager.class ).getGroupDatabase();</a>
+<span class="sourceLineNo">475</span><a id="line.475">        } catch ( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">476</span><a id="line.476">            m_session.addMessage( ERROR_GROUPS, "Could not retrieve GroupManager: " + e.getMessage() );</a>
+<span class="sourceLineNo">477</span><a id="line.477">        }</a>
+<span class="sourceLineNo">478</span><a id="line.478"></a>
+<span class="sourceLineNo">479</span><a id="line.479">        // Check for obvious error conditions</a>
+<span class="sourceLineNo">480</span><a id="line.480">        if ( mgr == null || db == null ) {</a>
+<span class="sourceLineNo">481</span><a id="line.481">            if ( mgr == null ) {</a>
+<span class="sourceLineNo">482</span><a id="line.482">                m_session.addMessage( ERROR_GROUPS, "GroupManager is null; JSPWiki could not initialize it. Check the error logs." );</a>
+<span class="sourceLineNo">483</span><a id="line.483">            }</a>
+<span class="sourceLineNo">484</span><a id="line.484">            if ( db == null ) {</a>
+<span class="sourceLineNo">485</span><a id="line.485">                m_session.addMessage( ERROR_GROUPS, "GroupDatabase is null; JSPWiki could not initialize it. Check the error logs." );</a>
+<span class="sourceLineNo">486</span><a id="line.486">            }</a>
+<span class="sourceLineNo">487</span><a id="line.487">            return;</a>
+<span class="sourceLineNo">488</span><a id="line.488">        }</a>
+<span class="sourceLineNo">489</span><a id="line.489"></a>
+<span class="sourceLineNo">490</span><a id="line.490">        // Everything initialized OK...</a>
+<span class="sourceLineNo">491</span><a id="line.491"></a>
+<span class="sourceLineNo">492</span><a id="line.492">        // Tell user what class of database this is.</a>
+<span class="sourceLineNo">493</span><a id="line.493">        m_session.addMessage( INFO_GROUPS, "GroupDatabase is of type '" + db.getClass().getName() + "'. It appears to be initialized properly." );</a>
+<span class="sourceLineNo">494</span><a id="line.494"></a>
+<span class="sourceLineNo">495</span><a id="line.495">        // Now, see how many groups we have.</a>
+<span class="sourceLineNo">496</span><a id="line.496">        final int oldGroupCount;</a>
+<span class="sourceLineNo">497</span><a id="line.497">        try {</a>
+<span class="sourceLineNo">498</span><a id="line.498">            final Group[] groups = db.groups();</a>
+<span class="sourceLineNo">499</span><a id="line.499">            oldGroupCount = groups.length;</a>
+<span class="sourceLineNo">500</span><a id="line.500">            m_session.addMessage( INFO_GROUPS, "The group database contains " + oldGroupCount + " groups." );</a>
+<span class="sourceLineNo">501</span><a id="line.501">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">502</span><a id="line.502">            m_session.addMessage( ERROR_GROUPS, "Could not obtain a list of current groups: " + e.getMessage() );</a>
+<span class="sourceLineNo">503</span><a id="line.503">            return;</a>
+<span class="sourceLineNo">504</span><a id="line.504">        }</a>
+<span class="sourceLineNo">505</span><a id="line.505"></a>
+<span class="sourceLineNo">506</span><a id="line.506">        // Try adding a bogus group with random name</a>
+<span class="sourceLineNo">507</span><a id="line.507">        final String name = "TestGroup" + System.currentTimeMillis();</a>
+<span class="sourceLineNo">508</span><a id="line.508">        final Group group;</a>
+<span class="sourceLineNo">509</span><a id="line.509">        try {</a>
+<span class="sourceLineNo">510</span><a id="line.510">            // Create dummy test group</a>
+<span class="sourceLineNo">511</span><a id="line.511">            group = mgr.parseGroup( name, "", true );</a>
+<span class="sourceLineNo">512</span><a id="line.512">            final Principal user = new WikiPrincipal( "TestUser" );</a>
+<span class="sourceLineNo">513</span><a id="line.513">            group.add( user );</a>
+<span class="sourceLineNo">514</span><a id="line.514">            db.save( group, new WikiPrincipal( "SecurityVerifier" ) );</a>
+<span class="sourceLineNo">515</span><a id="line.515"></a>
+<span class="sourceLineNo">516</span><a id="line.516">            // Make sure the group saved successfully</a>
+<span class="sourceLineNo">517</span><a id="line.517">            if( db.groups().length == oldGroupCount ) {</a>
+<span class="sourceLineNo">518</span><a id="line.518">                m_session.addMessage( ERROR_GROUPS, "Could not add a test group to the database." );</a>
+<span class="sourceLineNo">519</span><a id="line.519">                return;</a>
+<span class="sourceLineNo">520</span><a id="line.520">            }</a>
+<span class="sourceLineNo">521</span><a id="line.521">            m_session.addMessage( INFO_GROUPS, "The group database allows new groups to be created, as it should." );</a>
+<span class="sourceLineNo">522</span><a id="line.522">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">523</span><a id="line.523">            m_session.addMessage( ERROR_GROUPS, "Could not add a group to the database: " + e.getMessage() );</a>
+<span class="sourceLineNo">524</span><a id="line.524">            return;</a>
+<span class="sourceLineNo">525</span><a id="line.525">        }</a>
+<span class="sourceLineNo">526</span><a id="line.526"></a>
+<span class="sourceLineNo">527</span><a id="line.527">        // Now delete the group; should be back to old count</a>
+<span class="sourceLineNo">528</span><a id="line.528">        try {</a>
+<span class="sourceLineNo">529</span><a id="line.529">            db.delete( group );</a>
+<span class="sourceLineNo">530</span><a id="line.530">            if( db.groups().length != oldGroupCount ) {</a>
+<span class="sourceLineNo">531</span><a id="line.531">                m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database." );</a>
+<span class="sourceLineNo">532</span><a id="line.532">                return;</a>
+<span class="sourceLineNo">533</span><a id="line.533">            }</a>
+<span class="sourceLineNo">534</span><a id="line.534">            m_session.addMessage( INFO_GROUPS, "The group database allows groups to be deleted, as it should." );</a>
+<span class="sourceLineNo">535</span><a id="line.535">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">536</span><a id="line.536">            m_session.addMessage( ERROR_GROUPS, "Could not delete a test group from the database: " + e.getMessage() );</a>
+<span class="sourceLineNo">537</span><a id="line.537">            return;</a>
+<span class="sourceLineNo">538</span><a id="line.538">        }</a>
+<span class="sourceLineNo">539</span><a id="line.539"></a>
+<span class="sourceLineNo">540</span><a id="line.540">        m_session.addMessage( INFO_GROUPS, "The group database configuration looks fine." );</a>
+<span class="sourceLineNo">541</span><a id="line.541">    }</a>
+<span class="sourceLineNo">542</span><a id="line.542"></a>
+<span class="sourceLineNo">543</span><a id="line.543">    /**</a>
+<span class="sourceLineNo">544</span><a id="line.544">     * Verfies the JAAS configuration. The configuration is valid if value of the</a>
+<span class="sourceLineNo">545</span><a id="line.545">     * &lt;code&gt;jspwiki.properties&lt;code&gt; property</a>
+<span class="sourceLineNo">546</span><a id="line.546">     * {@value org.apache.wiki.auth.AuthenticationManager#PROP_LOGIN_MODULE}</a>
+<span class="sourceLineNo">547</span><a id="line.547">     * resolves to a valid class on the classpath.</a>
+<span class="sourceLineNo">548</span><a id="line.548">     */</a>
+<span class="sourceLineNo">549</span><a id="line.549">    void verifyJaas() {</a>
+<span class="sourceLineNo">550</span><a id="line.550">        // Verify that the specified JAAS moduie corresponds to a class we can load successfully.</a>
+<span class="sourceLineNo">551</span><a id="line.551">        final String jaasClass = m_engine.getWikiProperties().getProperty( AuthenticationManager.PROP_LOGIN_MODULE );</a>
+<span class="sourceLineNo">552</span><a id="line.552">        if( jaasClass == null || jaasClass.isEmpty() ) {</a>
+<span class="sourceLineNo">553</span><a id="line.553">            m_session.addMessage( ERROR_JAAS, "The value of the '" + AuthenticationManager.PROP_LOGIN_MODULE</a>
+<span class="sourceLineNo">554</span><a id="line.554">                    + "' property was null or blank. This is a fatal error. This value should be set to a valid LoginModule implementation "</a>
+<span class="sourceLineNo">555</span><a id="line.555">                    + "on the classpath." );</a>
+<span class="sourceLineNo">556</span><a id="line.556">            return;</a>
+<span class="sourceLineNo">557</span><a id="line.557">        }</a>
+<span class="sourceLineNo">558</span><a id="line.558"></a>
+<span class="sourceLineNo">559</span><a id="line.559">        // See if we can find the LoginModule on the classpath</a>
+<span class="sourceLineNo">560</span><a id="line.560">        Class&lt; ? &gt; c = null;</a>
+<span class="sourceLineNo">561</span><a id="line.561">        try {</a>
+<span class="sourceLineNo">562</span><a id="line.562">            m_session.addMessage( INFO_JAAS,</a>
+<span class="sourceLineNo">563</span><a id="line.563">                    "The property '" + AuthenticationManager.PROP_LOGIN_MODULE + "' specified the class '" + jaasClass + ".'" );</a>
+<span class="sourceLineNo">564</span><a id="line.564">            c = Class.forName( jaasClass );</a>
+<span class="sourceLineNo">565</span><a id="line.565">        } catch( final ClassNotFoundException e ) {</a>
+<span class="sourceLineNo">566</span><a id="line.566">            m_session.addMessage( ERROR_JAAS, "We could not find the the class '" + jaasClass + "' on the " + "classpath. This is fatal error." );</a>
+<span class="sourceLineNo">567</span><a id="line.567">        }</a>
+<span class="sourceLineNo">568</span><a id="line.568"></a>
+<span class="sourceLineNo">569</span><a id="line.569">        // Is the specified class actually a LoginModule?</a>
+<span class="sourceLineNo">570</span><a id="line.570">        if( LoginModule.class.isAssignableFrom( c ) ) {</a>
+<span class="sourceLineNo">571</span><a id="line.571">            m_session.addMessage( INFO_JAAS, "We found the the class '" + jaasClass + "' on the classpath, and it is a LoginModule implementation. Good!" );</a>
+<span class="sourceLineNo">572</span><a id="line.572">        } else {</a>
+<span class="sourceLineNo">573</span><a id="line.573">            m_session.addMessage( ERROR_JAAS, "We found the the class '" + jaasClass + "' on the classpath, but it does not seem to be LoginModule implementation! This is fatal error." );</a>
+<span class="sourceLineNo">574</span><a id="line.574">        }</a>
+<span class="sourceLineNo">575</span><a id="line.575">    }</a>
+<span class="sourceLineNo">576</span><a id="line.576"></a>
+<span class="sourceLineNo">577</span><a id="line.577">    /**</a>
+<span class="sourceLineNo">578</span><a id="line.578">     * Looks up a file name based on a JRE system property and returns the associated</a>
+<span class="sourceLineNo">579</span><a id="line.579">     * File object if it exists. This method adds messages with the topic prefix </a>
+<span class="sourceLineNo">580</span><a id="line.580">     * {@link #ERROR} and {@link #INFO} as appropriate, with the suffix matching the </a>
+<span class="sourceLineNo">581</span><a id="line.581">     * supplied property.</a>
+<span class="sourceLineNo">582</span><a id="line.582">     * @param property the system property to look up</a>
+<span class="sourceLineNo">583</span><a id="line.583">     * @return the file object, or &lt;code&gt;null&lt;/code&gt; if not found</a>
+<span class="sourceLineNo">584</span><a id="line.584">     */</a>
+<span class="sourceLineNo">585</span><a id="line.585">    File getFileFromProperty( final String property )</a>
+<span class="sourceLineNo">586</span><a id="line.586">    {</a>
+<span class="sourceLineNo">587</span><a id="line.587">        String propertyValue;</a>
+<span class="sourceLineNo">588</span><a id="line.588">        try</a>
+<span class="sourceLineNo">589</span><a id="line.589">        {</a>
+<span class="sourceLineNo">590</span><a id="line.590">            propertyValue = System.getProperty( property );</a>
+<span class="sourceLineNo">591</span><a id="line.591">            if ( propertyValue == null )</a>
+<span class="sourceLineNo">592</span><a id="line.592">            {</a>
+<span class="sourceLineNo">593</span><a id="line.593">                m_session.addMessage( "Error." + property, "The system property '" + property + "' is null." );</a>
+<span class="sourceLineNo">594</span><a id="line.594">                return null;</a>
+<span class="sourceLineNo">595</span><a id="line.595">            }</a>
+<span class="sourceLineNo">596</span><a id="line.596"></a>
+<span class="sourceLineNo">597</span><a id="line.597">            //</a>
+<span class="sourceLineNo">598</span><a id="line.598">            //  It's also possible to use "==" to mark a property.  We remove that</a>
+<span class="sourceLineNo">599</span><a id="line.599">            //  here so that we can actually find the property file, then.</a>
+<span class="sourceLineNo">600</span><a id="line.600">            //</a>
+<span class="sourceLineNo">601</span><a id="line.601">            if( propertyValue.startsWith("=") )</a>
+<span class="sourceLineNo">602</span><a id="line.602">            {</a>
+<span class="sourceLineNo">603</span><a id="line.603">                propertyValue = propertyValue.substring(1);</a>
+<span class="sourceLineNo">604</span><a id="line.604">            }</a>
+<span class="sourceLineNo">605</span><a id="line.605"></a>
+<span class="sourceLineNo">606</span><a id="line.606">            try</a>
+<span class="sourceLineNo">607</span><a id="line.607">            {</a>
+<span class="sourceLineNo">608</span><a id="line.608">                m_session.addMessage( "Info." + property, "The system property '" + property + "' is set to: "</a>
+<span class="sourceLineNo">609</span><a id="line.609">                        + propertyValue + "." );</a>
+<span class="sourceLineNo">610</span><a id="line.610"></a>
+<span class="sourceLineNo">611</span><a id="line.611">                // Prepend a file: prefix if not there already</a>
+<span class="sourceLineNo">612</span><a id="line.612">                if ( !propertyValue.startsWith( "file:" ) )</a>
+<span class="sourceLineNo">613</span><a id="line.613">                {</a>
+<span class="sourceLineNo">614</span><a id="line.614">                  propertyValue = "file:" + propertyValue;</a>
+<span class="sourceLineNo">615</span><a id="line.615">                }</a>
+<span class="sourceLineNo">616</span><a id="line.616">                final URL url = new URL( propertyValue );</a>
+<span class="sourceLineNo">617</span><a id="line.617">                final File file = new File( url.getPath() );</a>
+<span class="sourceLineNo">618</span><a id="line.618">                if ( file.exists() )</a>
+<span class="sourceLineNo">619</span><a id="line.619">                {</a>
+<span class="sourceLineNo">620</span><a id="line.620">                    m_session.addMessage( "Info." + property, "File '" + propertyValue + "' exists in the filesystem." );</a>
+<span class="sourceLineNo">621</span><a id="line.621">                    return file;</a>
+<span class="sourceLineNo">622</span><a id="line.622">                }</a>
+<span class="sourceLineNo">623</span><a id="line.623">            }</a>
+<span class="sourceLineNo">624</span><a id="line.624">            catch( final MalformedURLException e )</a>
+<span class="sourceLineNo">625</span><a id="line.625">            {</a>
+<span class="sourceLineNo">626</span><a id="line.626">                // Swallow exception because we can't find it anyway</a>
+<span class="sourceLineNo">627</span><a id="line.627">            }</a>
+<span class="sourceLineNo">628</span><a id="line.628">            m_session.addMessage( "Error." + property, "File '" + propertyValue</a>
+<span class="sourceLineNo">629</span><a id="line.629">                    + "' doesn't seem to exist. This might be a problem." );</a>
+<span class="sourceLineNo">630</span><a id="line.630">            return null;</a>
+<span class="sourceLineNo">631</span><a id="line.631">        }</a>
+<span class="sourceLineNo">632</span><a id="line.632">        catch( final SecurityException e )</a>
+<span class="sourceLineNo">633</span><a id="line.633">        {</a>
+<span class="sourceLineNo">634</span><a id="line.634">            m_session.addMessage( "Error." + property, "We could not read system property '" + property</a>
+<span class="sourceLineNo">635</span><a id="line.635">                    + "'. This is probably because you are running with a security manager." );</a>
+<span class="sourceLineNo">636</span><a id="line.636">            return null;</a>
+<span class="sourceLineNo">637</span><a id="line.637">        }</a>
+<span class="sourceLineNo">638</span><a id="line.638">    }</a>
+<span class="sourceLineNo">639</span><a id="line.639"></a>
+<span class="sourceLineNo">640</span><a id="line.640">    /**</a>
+<span class="sourceLineNo">641</span><a id="line.641">     * Verfies the Java security policy configuration. The configuration is</a>
+<span class="sourceLineNo">642</span><a id="line.642">     * valid if value of the local policy (at &lt;code&gt;WEB-INF/jspwiki.policy&lt;/code&gt;</a>
+<span class="sourceLineNo">643</span><a id="line.643">     * resolves to an existing file, and the policy file contained therein</a>
+<span class="sourceLineNo">644</span><a id="line.644">     * represents a valid policy.</a>
+<span class="sourceLineNo">645</span><a id="line.645">     */</a>
+<span class="sourceLineNo">646</span><a id="line.646">    @SuppressWarnings("unchecked")</a>
+<span class="sourceLineNo">647</span><a id="line.647">    void verifyPolicy() {</a>
+<span class="sourceLineNo">648</span><a id="line.648">        // Look up the policy file and set the status text.</a>
+<span class="sourceLineNo">649</span><a id="line.649">        final URL policyURL = m_engine.findConfigFile( AuthorizationManager.DEFAULT_POLICY );</a>
+<span class="sourceLineNo">650</span><a id="line.650">        String path = policyURL.getPath();</a>
+<span class="sourceLineNo">651</span><a id="line.651">        if ( path.startsWith("file:") ) {</a>
+<span class="sourceLineNo">652</span><a id="line.652">            path = path.substring( 5 );</a>
+<span class="sourceLineNo">653</span><a id="line.653">        }</a>
+<span class="sourceLineNo">654</span><a id="line.654">        final File policyFile = new File( path );</a>
+<span class="sourceLineNo">655</span><a id="line.655"></a>
+<span class="sourceLineNo">656</span><a id="line.656">        // Next, verify the policy</a>
+<span class="sourceLineNo">657</span><a id="line.657">        try {</a>
+<span class="sourceLineNo">658</span><a id="line.658">            // Get the file</a>
+<span class="sourceLineNo">659</span><a id="line.659">            final PolicyReader policy = new PolicyReader( policyFile );</a>
+<span class="sourceLineNo">660</span><a id="line.660">            m_session.addMessage( INFO_POLICY, "The security policy '" + policy.getFile() + "' exists." );</a>
+<span class="sourceLineNo">661</span><a id="line.661"></a>
+<span class="sourceLineNo">662</span><a id="line.662">            // See if there is a keystore that's valid</a>
+<span class="sourceLineNo">663</span><a id="line.663">            final KeyStore ks = policy.getKeyStore();</a>
+<span class="sourceLineNo">664</span><a id="line.664">            if ( ks == null ) {</a>
+<span class="sourceLineNo">665</span><a id="line.665">                m_session.addMessage( WARNING_POLICY,</a>
+<span class="sourceLineNo">666</span><a id="line.666">                    "Policy file does not have a keystore... at least not one that we can locate. If your policy file " +</a>
+<span class="sourceLineNo">667</span><a id="line.667">                    "does not contain any 'signedBy' blocks, this is probably ok." );</a>
+<span class="sourceLineNo">668</span><a id="line.668">            } else {</a>
+<span class="sourceLineNo">669</span><a id="line.669">                m_session.addMessage( INFO_POLICY,</a>
+<span class="sourceLineNo">670</span><a id="line.670">                    "The security policy specifies a keystore, and we were able to locate it in the filesystem." );</a>
+<span class="sourceLineNo">671</span><a id="line.671">            }</a>
+<span class="sourceLineNo">672</span><a id="line.672"></a>
+<span class="sourceLineNo">673</span><a id="line.673">            // Verify the file</a>
+<span class="sourceLineNo">674</span><a id="line.674">            policy.read();</a>
+<span class="sourceLineNo">675</span><a id="line.675">            final List&lt;Exception&gt; errors = policy.getMessages();</a>
+<span class="sourceLineNo">676</span><a id="line.676">            if ( errors.size() &gt; 0 ) {</a>
+<span class="sourceLineNo">677</span><a id="line.677">                for( final Exception e : errors ) {</a>
+<span class="sourceLineNo">678</span><a id="line.678">                    m_session.addMessage( ERROR_POLICY, e.getMessage() );</a>
+<span class="sourceLineNo">679</span><a id="line.679">                }</a>
+<span class="sourceLineNo">680</span><a id="line.680">            } else {</a>
+<span class="sourceLineNo">681</span><a id="line.681">                m_session.addMessage( INFO_POLICY, "The security policy looks fine." );</a>
+<span class="sourceLineNo">682</span><a id="line.682">                m_isSecurityPolicyConfigured = true;</a>
+<span class="sourceLineNo">683</span><a id="line.683">            }</a>
+<span class="sourceLineNo">684</span><a id="line.684"></a>
+<span class="sourceLineNo">685</span><a id="line.685">            // Stash the unique principals mentioned in the file,</a>
+<span class="sourceLineNo">686</span><a id="line.686">            // plus our standard roles.</a>
+<span class="sourceLineNo">687</span><a id="line.687">            final Set&lt;Principal&gt; principals = new LinkedHashSet&lt;&gt;();</a>
+<span class="sourceLineNo">688</span><a id="line.688">            principals.add( Role.ALL );</a>
+<span class="sourceLineNo">689</span><a id="line.689">            principals.add( Role.ANONYMOUS );</a>
+<span class="sourceLineNo">690</span><a id="line.690">            principals.add( Role.ASSERTED );</a>
+<span class="sourceLineNo">691</span><a id="line.691">            principals.add( Role.AUTHENTICATED );</a>
+<span class="sourceLineNo">692</span><a id="line.692">            final ProtectionDomain[] domains = policy.getProtectionDomains();</a>
+<span class="sourceLineNo">693</span><a id="line.693">            for ( final ProtectionDomain domain : domains ) {</a>
+<span class="sourceLineNo">694</span><a id="line.694">                principals.addAll(Arrays.asList(domain.getPrincipals()));</a>
+<span class="sourceLineNo">695</span><a id="line.695">            }</a>
+<span class="sourceLineNo">696</span><a id="line.696">            m_policyPrincipals = principals.toArray( new Principal[0] );</a>
+<span class="sourceLineNo">697</span><a id="line.697">        } catch( final IOException e ) {</a>
+<span class="sourceLineNo">698</span><a id="line.698">            m_session.addMessage( ERROR_POLICY, e.getMessage() );</a>
+<span class="sourceLineNo">699</span><a id="line.699">        }</a>
+<span class="sourceLineNo">700</span><a id="line.700">    }</a>
+<span class="sourceLineNo">701</span><a id="line.701"></a>
+<span class="sourceLineNo">702</span><a id="line.702">    /**</a>
+<span class="sourceLineNo">703</span><a id="line.703">     * Verifies that a particular Principal possesses a Permission, as defined</a>
+<span class="sourceLineNo">704</span><a id="line.704">     * in the security policy file.</a>
+<span class="sourceLineNo">705</span><a id="line.705">     * @param principal the principal</a>
+<span class="sourceLineNo">706</span><a id="line.706">     * @param permission the permission</a>
+<span class="sourceLineNo">707</span><a id="line.707">     * @return the result, based on consultation with the active Java security</a>
+<span class="sourceLineNo">708</span><a id="line.708">     *         policy</a>
+<span class="sourceLineNo">709</span><a id="line.709">     */</a>
+<span class="sourceLineNo">710</span><a id="line.710">    boolean verifyStaticPermission( final Principal principal, final Permission permission )</a>
+<span class="sourceLineNo">711</span><a id="line.711">    {</a>
+<span class="sourceLineNo">712</span><a id="line.712">        final Subject subject = new Subject();</a>
+<span class="sourceLineNo">713</span><a id="line.713">        subject.getPrincipals().add( principal );</a>
+<span class="sourceLineNo">714</span><a id="line.714">        final boolean allowedByGlobalPolicy = (Boolean)</a>
+<span class="sourceLineNo">715</span><a id="line.715">            Subject.doAsPrivileged( subject, ( PrivilegedAction&lt; Object &gt; )() -&gt; {</a>
+<span class="sourceLineNo">716</span><a id="line.716">                try {</a>
+<span class="sourceLineNo">717</span><a id="line.717">                    AccessController.checkPermission( permission );</a>
+<span class="sourceLineNo">718</span><a id="line.718">                    return Boolean.TRUE;</a>
+<span class="sourceLineNo">719</span><a id="line.719">                } catch( final AccessControlException e ) {</a>
+<span class="sourceLineNo">720</span><a id="line.720">                    return Boolean.FALSE;</a>
+<span class="sourceLineNo">721</span><a id="line.721">                }</a>
+<span class="sourceLineNo">722</span><a id="line.722">            }, null );</a>
+<span class="sourceLineNo">723</span><a id="line.723"></a>
+<span class="sourceLineNo">724</span><a id="line.724">        if ( allowedByGlobalPolicy )</a>
+<span class="sourceLineNo">725</span><a id="line.725">        {</a>
+<span class="sourceLineNo">726</span><a id="line.726">            return true;</a>
+<span class="sourceLineNo">727</span><a id="line.727">        }</a>
+<span class="sourceLineNo">728</span><a id="line.728"></a>
+<span class="sourceLineNo">729</span><a id="line.729">        // Check local policy</a>
+<span class="sourceLineNo">730</span><a id="line.730">        final Principal[] principals = new Principal[]{ principal };</a>
+<span class="sourceLineNo">731</span><a id="line.731">        return m_engine.getManager( AuthorizationManager.class ).allowedByLocalPolicy( principals, permission );</a>
+<span class="sourceLineNo">732</span><a id="line.732">    }</a>
+<span class="sourceLineNo">733</span><a id="line.733"></a>
+<span class="sourceLineNo">734</span><a id="line.734">    /**</a>
+<span class="sourceLineNo">735</span><a id="line.735">     * Verifies that the user datbase was initialized properly, and that</a>
+<span class="sourceLineNo">736</span><a id="line.736">     * user add and delete operations work as they should.</a>
+<span class="sourceLineNo">737</span><a id="line.737">     */</a>
+<span class="sourceLineNo">738</span><a id="line.738">    void verifyUserDatabase()</a>
+<span class="sourceLineNo">739</span><a id="line.739">    {</a>
+<span class="sourceLineNo">740</span><a id="line.740">        final UserDatabase db = m_engine.getManager( UserManager.class ).getUserDatabase();</a>
+<span class="sourceLineNo">741</span><a id="line.741"></a>
+<span class="sourceLineNo">742</span><a id="line.742">        // Check for obvious error conditions</a>
+<span class="sourceLineNo">743</span><a id="line.743">        if ( db == null )</a>
+<span class="sourceLineNo">744</span><a id="line.744">        {</a>
+<span class="sourceLineNo">745</span><a id="line.745">            m_session.addMessage( ERROR_DB, "UserDatabase is null; JSPWiki could not " +</a>
+<span class="sourceLineNo">746</span><a id="line.746">                    "initialize it. Check the error logs." );</a>
+<span class="sourceLineNo">747</span><a id="line.747">            return;</a>
+<span class="sourceLineNo">748</span><a id="line.748">        }</a>
+<span class="sourceLineNo">749</span><a id="line.749"></a>
+<span class="sourceLineNo">750</span><a id="line.750">        if ( db instanceof DummyUserDatabase )</a>
+<span class="sourceLineNo">751</span><a id="line.751">        {</a>
+<span class="sourceLineNo">752</span><a id="line.752">            m_session.addMessage( ERROR_DB, "UserDatabase is DummyUserDatabase; JSPWiki " +</a>
+<span class="sourceLineNo">753</span><a id="line.753">                    "may not have been able to initialize the database you supplied in " +</a>
+<span class="sourceLineNo">754</span><a id="line.754">                    "jspwiki.properties, or you left the 'jspwiki.userdatabase' property " +</a>
+<span class="sourceLineNo">755</span><a id="line.755">                    "blank. Check the error logs." );</a>
+<span class="sourceLineNo">756</span><a id="line.756">        }</a>
+<span class="sourceLineNo">757</span><a id="line.757"></a>
+<span class="sourceLineNo">758</span><a id="line.758">        // Tell user what class of database this is.</a>
+<span class="sourceLineNo">759</span><a id="line.759">        m_session.addMessage( INFO_DB, "UserDatabase is of type '" + db.getClass().getName() +</a>
+<span class="sourceLineNo">760</span><a id="line.760">                                       "'. It appears to be initialized properly." );</a>
+<span class="sourceLineNo">761</span><a id="line.761"></a>
+<span class="sourceLineNo">762</span><a id="line.762">        // Now, see how many users we have.</a>
+<span class="sourceLineNo">763</span><a id="line.763">        final int oldUserCount;</a>
+<span class="sourceLineNo">764</span><a id="line.764">        try {</a>
+<span class="sourceLineNo">765</span><a id="line.765">            final Principal[] users = db.getWikiNames();</a>
+<span class="sourceLineNo">766</span><a id="line.766">            oldUserCount = users.length;</a>
+<span class="sourceLineNo">767</span><a id="line.767">            m_session.addMessage( INFO_DB, "The user database contains " + oldUserCount + " users." );</a>
+<span class="sourceLineNo">768</span><a id="line.768">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">769</span><a id="line.769">            m_session.addMessage( ERROR_DB, "Could not obtain a list of current users: " + e.getMessage() );</a>
+<span class="sourceLineNo">770</span><a id="line.770">            return;</a>
+<span class="sourceLineNo">771</span><a id="line.771">        }</a>
+<span class="sourceLineNo">772</span><a id="line.772"></a>
+<span class="sourceLineNo">773</span><a id="line.773">        // Try adding a bogus user with random name</a>
+<span class="sourceLineNo">774</span><a id="line.774">        final String loginName = "TestUser" + System.currentTimeMillis();</a>
+<span class="sourceLineNo">775</span><a id="line.775">        try {</a>
+<span class="sourceLineNo">776</span><a id="line.776">            final UserProfile profile = db.newProfile();</a>
+<span class="sourceLineNo">777</span><a id="line.777">            profile.setEmail( "jspwiki.tests@mailinator.com" );</a>
+<span class="sourceLineNo">778</span><a id="line.778">            profile.setLoginName( loginName );</a>
+<span class="sourceLineNo">779</span><a id="line.779">            profile.setFullname( "FullName" + loginName );</a>
+<span class="sourceLineNo">780</span><a id="line.780">            profile.setPassword( "password" );</a>
+<span class="sourceLineNo">781</span><a id="line.781">            db.save( profile );</a>
+<span class="sourceLineNo">782</span><a id="line.782"></a>
+<span class="sourceLineNo">783</span><a id="line.783">            // Make sure the profile saved successfully</a>
+<span class="sourceLineNo">784</span><a id="line.784">            if( db.getWikiNames().length == oldUserCount ) {</a>
+<span class="sourceLineNo">785</span><a id="line.785">                m_session.addMessage( ERROR_DB, "Could not add a test user to the database." );</a>
+<span class="sourceLineNo">786</span><a id="line.786">                return;</a>
+<span class="sourceLineNo">787</span><a id="line.787">            }</a>
+<span class="sourceLineNo">788</span><a id="line.788">            m_session.addMessage( INFO_DB, "The user database allows new users to be created, as it should." );</a>
+<span class="sourceLineNo">789</span><a id="line.789">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">790</span><a id="line.790">            m_session.addMessage( ERROR_DB, "Could not add a test user to the database: " + e.getMessage() );</a>
+<span class="sourceLineNo">791</span><a id="line.791">            return;</a>
+<span class="sourceLineNo">792</span><a id="line.792">        }</a>
+<span class="sourceLineNo">793</span><a id="line.793"></a>
+<span class="sourceLineNo">794</span><a id="line.794">        // Now delete the profile; should be back to old count</a>
+<span class="sourceLineNo">795</span><a id="line.795">        try {</a>
+<span class="sourceLineNo">796</span><a id="line.796">            db.deleteByLoginName( loginName );</a>
+<span class="sourceLineNo">797</span><a id="line.797">            if( db.getWikiNames().length != oldUserCount ) {</a>
+<span class="sourceLineNo">798</span><a id="line.798">                m_session.addMessage( ERROR_DB, "Could not delete a test user from the database." );</a>
+<span class="sourceLineNo">799</span><a id="line.799">                return;</a>
+<span class="sourceLineNo">800</span><a id="line.800">            }</a>
+<span class="sourceLineNo">801</span><a id="line.801">            m_session.addMessage( INFO_DB, "The user database allows users to be deleted, as it should." );</a>
+<span class="sourceLineNo">802</span><a id="line.802">        } catch( final WikiSecurityException e ) {</a>
+<span class="sourceLineNo">803</span><a id="line.803">            m_session.addMessage( ERROR_DB, "Could not delete a test user to the database: " + e.getMessage() );</a>
+<span class="sourceLineNo">804</span><a id="line.804">            return;</a>
+<span class="sourceLineNo">805</span><a id="line.805">        }</a>
+<span class="sourceLineNo">806</span><a id="line.806"></a>
+<span class="sourceLineNo">807</span><a id="line.807">        m_session.addMessage( INFO_DB, "The user database configuration looks fine." );</a>
+<span class="sourceLineNo">808</span><a id="line.808">    }</a>
+<span class="sourceLineNo">809</span><a id="line.809">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/Acl.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/Acl.html
index 9004f9c166..0faa0a4b40 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/Acl.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/Acl.html
@@ -41,7 +41,7 @@
 <span class="sourceLineNo">032</span><a id="line.32"> * &lt;/p&gt;</a>
 <span class="sourceLineNo">033</span><a id="line.33"> * {@inheritDoc}</a>
 <span class="sourceLineNo">034</span><a id="line.34"> * @since 2.3</a>
-<span class="sourceLineNo">035</span><a id="line.35"> * @deprecated use {@link org.apache.wiki.api.core.Acl} insteaad</a>
+<span class="sourceLineNo">035</span><a id="line.35"> * @deprecated use {@link org.apache.wiki.api.core.Acl} instead</a>
 <span class="sourceLineNo">036</span><a id="line.36"> * @see org.apache.wiki.api.core.Acl</a>
 <span class="sourceLineNo">037</span><a id="line.37"> */</a>
 <span class="sourceLineNo">038</span><a id="line.38">@Deprecated</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/AclEntry.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/AclEntry.html
index c05a761d38..b050d1140f 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/AclEntry.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/AclEntry.html
@@ -37,7 +37,7 @@
 <span class="sourceLineNo">028</span><a id="line.28"> *</a>
 <span class="sourceLineNo">029</span><a id="line.29"> * @see Acl</a>
 <span class="sourceLineNo">030</span><a id="line.30"> * @since 2.3</a>
-<span class="sourceLineNo">031</span><a id="line.31"> * @deprecated use {@link org.apache.wiki.api.core.AclEntry} insteaad</a>
+<span class="sourceLineNo">031</span><a id="line.31"> * @deprecated use {@link org.apache.wiki.api.core.AclEntry} instead</a>
 <span class="sourceLineNo">032</span><a id="line.32"> * @see org.apache.wiki.api.core.AclEntry</a>
 <span class="sourceLineNo">033</span><a id="line.33"> */</a>
 <span class="sourceLineNo">034</span><a id="line.34">@Deprecated</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/UnresolvedPrincipal.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
index 423ad17e5a..b3343921c4 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/acl/UnresolvedPrincipal.html
@@ -36,7 +36,7 @@
 <span class="sourceLineNo">027</span><a id="line.27"> * manager, and built-in role definitions.</a>
 <span class="sourceLineNo">028</span><a id="line.28"> * Creating a principal marked "unresolved" allows</a>
 <span class="sourceLineNo">029</span><a id="line.29"> * delayed resolution, which enables principals to be resolved</a>
-<span class="sourceLineNo">030</span><a id="line.30"> * lazily during a later access control check. Conceptuallly,</a>
+<span class="sourceLineNo">030</span><a id="line.30"> * lazily during a later access control check. Conceptually,</a>
 <span class="sourceLineNo">031</span><a id="line.31"> * UnresolvedPrincipal performs a function similar to</a>
 <span class="sourceLineNo">032</span><a id="line.32"> * {@link java.security.UnresolvedPermission}.</a>
 <span class="sourceLineNo">033</span><a id="line.33"> * </a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/Group.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/Group.html
index 6d962e2032..74f902eb0f 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/Group.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/Group.html
@@ -237,7 +237,7 @@
 <span class="sourceLineNo">228</span><a id="line.228">     * Returns &lt;code&gt;true&lt;/code&gt; if a Principal is a member of the group. Specifically, the Principal's &lt;code&gt;getName()&lt;/code&gt; method must</a>
 <span class="sourceLineNo">229</span><a id="line.229">     * return the same value as one of the Principals in the group member list. The Principal's type does &lt;em&gt;not&lt;/em&gt; need to match.</a>
 <span class="sourceLineNo">230</span><a id="line.230">     *</a>
-<span class="sourceLineNo">231</span><a id="line.231">     * @param principal the principal about whom membeship status is sought</a>
+<span class="sourceLineNo">231</span><a id="line.231">     * @param principal the principal about whom membership status is sought</a>
 <span class="sourceLineNo">232</span><a id="line.232">     * @return the result of the operation</a>
 <span class="sourceLineNo">233</span><a id="line.233">     */</a>
 <span class="sourceLineNo">234</span><a id="line.234">    public boolean isMember( final Principal principal ) {</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
index 7e26144d3a..8400ca1902 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/JDBCGroupDatabase.html
@@ -421,275 +421,273 @@
 <span class="sourceLineNo">412</span><a id="line.412">            // Insert group member records</a>
 <span class="sourceLineNo">413</span><a id="line.413">            ps = conn.prepareStatement( m_insertGroupMembers );</a>
 <span class="sourceLineNo">414</span><a id="line.414">            final Principal[] members = group.members();</a>
-<span class="sourceLineNo">415</span><a id="line.415">            for( int i = 0; i &lt; members.length; i++ )</a>
-<span class="sourceLineNo">416</span><a id="line.416">            {</a>
-<span class="sourceLineNo">417</span><a id="line.417">                final Principal member = members[i];</a>
-<span class="sourceLineNo">418</span><a id="line.418">                ps.setString( 1, group.getName() );</a>
-<span class="sourceLineNo">419</span><a id="line.419">                ps.setString( 2, member.getName() );</a>
-<span class="sourceLineNo">420</span><a id="line.420">                ps.execute();</a>
-<span class="sourceLineNo">421</span><a id="line.421">            }</a>
-<span class="sourceLineNo">422</span><a id="line.422"></a>
-<span class="sourceLineNo">423</span><a id="line.423">            // Commit and close connection</a>
-<span class="sourceLineNo">424</span><a id="line.424">            if( m_supportsCommits )</a>
-<span class="sourceLineNo">425</span><a id="line.425">            {</a>
-<span class="sourceLineNo">426</span><a id="line.426">                conn.commit();</a>
-<span class="sourceLineNo">427</span><a id="line.427">            }</a>
-<span class="sourceLineNo">428</span><a id="line.428">        }</a>
-<span class="sourceLineNo">429</span><a id="line.429">        catch( final SQLException e )</a>
-<span class="sourceLineNo">430</span><a id="line.430">        {</a>
-<span class="sourceLineNo">431</span><a id="line.431">            closeQuietly(conn, ps, null );</a>
-<span class="sourceLineNo">432</span><a id="line.432">            throw new WikiSecurityException( e.getMessage(), e );</a>
-<span class="sourceLineNo">433</span><a id="line.433">        }</a>
-<span class="sourceLineNo">434</span><a id="line.434">        finally</a>
-<span class="sourceLineNo">435</span><a id="line.435">        {</a>
-<span class="sourceLineNo">436</span><a id="line.436">            closeQuietly(conn, ps, null );</a>
-<span class="sourceLineNo">437</span><a id="line.437">        }</a>
-<span class="sourceLineNo">438</span><a id="line.438">    }</a>
-<span class="sourceLineNo">439</span><a id="line.439"></a>
-<span class="sourceLineNo">440</span><a id="line.440">    /**</a>
-<span class="sourceLineNo">441</span><a id="line.441">     * Initializes the group database based on values from a Properties object.</a>
-<span class="sourceLineNo">442</span><a id="line.442">     * </a>
-<span class="sourceLineNo">443</span><a id="line.443">     * @param engine the wiki engine</a>
-<span class="sourceLineNo">444</span><a id="line.444">     * @param props the properties used to initialize the group database</a>
-<span class="sourceLineNo">445</span><a id="line.445">     * @throws WikiSecurityException if the database could not be initialized</a>
-<span class="sourceLineNo">446</span><a id="line.446">     *             successfully</a>
-<span class="sourceLineNo">447</span><a id="line.447">     * @throws NoRequiredPropertyException if a required property is not present</a>
-<span class="sourceLineNo">448</span><a id="line.448">     */</a>
-<span class="sourceLineNo">449</span><a id="line.449">    @Override public void initialize( final Engine engine, final Properties props ) throws NoRequiredPropertyException, WikiSecurityException</a>
-<span class="sourceLineNo">450</span><a id="line.450">    {</a>
-<span class="sourceLineNo">451</span><a id="line.451">        final String table;</a>
-<span class="sourceLineNo">452</span><a id="line.452">        final String memberTable;</a>
+<span class="sourceLineNo">415</span><a id="line.415">            for (final Principal member : members) {</a>
+<span class="sourceLineNo">416</span><a id="line.416">                ps.setString(1, group.getName());</a>
+<span class="sourceLineNo">417</span><a id="line.417">                ps.setString(2, member.getName());</a>
+<span class="sourceLineNo">418</span><a id="line.418">                ps.execute();</a>
+<span class="sourceLineNo">419</span><a id="line.419">            }</a>
+<span class="sourceLineNo">420</span><a id="line.420"></a>
+<span class="sourceLineNo">421</span><a id="line.421">            // Commit and close connection</a>
+<span class="sourceLineNo">422</span><a id="line.422">            if( m_supportsCommits )</a>
+<span class="sourceLineNo">423</span><a id="line.423">            {</a>
+<span class="sourceLineNo">424</span><a id="line.424">                conn.commit();</a>
+<span class="sourceLineNo">425</span><a id="line.425">            }</a>
+<span class="sourceLineNo">426</span><a id="line.426">        }</a>
+<span class="sourceLineNo">427</span><a id="line.427">        catch( final SQLException e )</a>
+<span class="sourceLineNo">428</span><a id="line.428">        {</a>
+<span class="sourceLineNo">429</span><a id="line.429">            closeQuietly(conn, ps, null );</a>
+<span class="sourceLineNo">430</span><a id="line.430">            throw new WikiSecurityException( e.getMessage(), e );</a>
+<span class="sourceLineNo">431</span><a id="line.431">        }</a>
+<span class="sourceLineNo">432</span><a id="line.432">        finally</a>
+<span class="sourceLineNo">433</span><a id="line.433">        {</a>
+<span class="sourceLineNo">434</span><a id="line.434">            closeQuietly(conn, ps, null );</a>
+<span class="sourceLineNo">435</span><a id="line.435">        }</a>
+<span class="sourceLineNo">436</span><a id="line.436">    }</a>
+<span class="sourceLineNo">437</span><a id="line.437"></a>
+<span class="sourceLineNo">438</span><a id="line.438">    /**</a>
+<span class="sourceLineNo">439</span><a id="line.439">     * Initializes the group database based on values from a Properties object.</a>
+<span class="sourceLineNo">440</span><a id="line.440">     * </a>
+<span class="sourceLineNo">441</span><a id="line.441">     * @param engine the wiki engine</a>
+<span class="sourceLineNo">442</span><a id="line.442">     * @param props the properties used to initialize the group database</a>
+<span class="sourceLineNo">443</span><a id="line.443">     * @throws WikiSecurityException if the database could not be initialized</a>
+<span class="sourceLineNo">444</span><a id="line.444">     *             successfully</a>
+<span class="sourceLineNo">445</span><a id="line.445">     * @throws NoRequiredPropertyException if a required property is not present</a>
+<span class="sourceLineNo">446</span><a id="line.446">     */</a>
+<span class="sourceLineNo">447</span><a id="line.447">    @Override public void initialize( final Engine engine, final Properties props ) throws NoRequiredPropertyException, WikiSecurityException</a>
+<span class="sourceLineNo">448</span><a id="line.448">    {</a>
+<span class="sourceLineNo">449</span><a id="line.449">        final String table;</a>
+<span class="sourceLineNo">450</span><a id="line.450">        final String memberTable;</a>
+<span class="sourceLineNo">451</span><a id="line.451"></a>
+<span class="sourceLineNo">452</span><a id="line.452">        m_engine = engine;</a>
 <span class="sourceLineNo">453</span><a id="line.453"></a>
-<span class="sourceLineNo">454</span><a id="line.454">        m_engine = engine;</a>
-<span class="sourceLineNo">455</span><a id="line.455"></a>
-<span class="sourceLineNo">456</span><a id="line.456">        final String jndiName = props.getProperty( PROP_GROUPDB_DATASOURCE, DEFAULT_GROUPDB_DATASOURCE );</a>
-<span class="sourceLineNo">457</span><a id="line.457">        try</a>
-<span class="sourceLineNo">458</span><a id="line.458">        {</a>
-<span class="sourceLineNo">459</span><a id="line.459">            final Context initCtx = new InitialContext();</a>
-<span class="sourceLineNo">460</span><a id="line.460">            final Context ctx = (Context) initCtx.lookup( "java:comp/env" );</a>
-<span class="sourceLineNo">461</span><a id="line.461">            m_ds = (DataSource) ctx.lookup( jndiName );</a>
-<span class="sourceLineNo">462</span><a id="line.462"></a>
-<span class="sourceLineNo">463</span><a id="line.463">            // Prepare the SQL selectors</a>
-<span class="sourceLineNo">464</span><a id="line.464">            table = props.getProperty( PROP_GROUPDB_TABLE, DEFAULT_GROUPDB_TABLE );</a>
-<span class="sourceLineNo">465</span><a id="line.465">            memberTable = props.getProperty( PROP_GROUPDB_MEMBER_TABLE, DEFAULT_GROUPDB_MEMBER_TABLE );</a>
-<span class="sourceLineNo">466</span><a id="line.466">            m_name = props.getProperty( PROP_GROUPDB_NAME, DEFAULT_GROUPDB_NAME );</a>
-<span class="sourceLineNo">467</span><a id="line.467">            m_created = props.getProperty( PROP_GROUPDB_CREATED, DEFAULT_GROUPDB_CREATED );</a>
-<span class="sourceLineNo">468</span><a id="line.468">            m_creator = props.getProperty( PROP_GROUPDB_CREATOR, DEFAULT_GROUPDB_CREATOR );</a>
-<span class="sourceLineNo">469</span><a id="line.469">            m_modifier = props.getProperty( PROP_GROUPDB_MODIFIER, DEFAULT_GROUPDB_MODIFIER );</a>
-<span class="sourceLineNo">470</span><a id="line.470">            m_modified = props.getProperty( PROP_GROUPDB_MODIFIED, DEFAULT_GROUPDB_MODIFIED );</a>
-<span class="sourceLineNo">471</span><a id="line.471">            m_member = props.getProperty( PROP_GROUPDB_MEMBER, DEFAULT_GROUPDB_MEMBER );</a>
-<span class="sourceLineNo">472</span><a id="line.472"></a>
-<span class="sourceLineNo">473</span><a id="line.473">            m_findAll = "SELECT DISTINCT * FROM " + table;</a>
-<span class="sourceLineNo">474</span><a id="line.474">            m_findGroup = "SELECT DISTINCT * FROM " + table + " WHERE " + m_name + "=?";</a>
-<span class="sourceLineNo">475</span><a id="line.475">            m_findMembers = "SELECT * FROM " + memberTable + " WHERE " + m_name + "=?";</a>
-<span class="sourceLineNo">476</span><a id="line.476"></a>
-<span class="sourceLineNo">477</span><a id="line.477">            // Prepare the group insert/update SQL</a>
-<span class="sourceLineNo">478</span><a id="line.478">            m_insertGroup = "INSERT INTO " + table + " (" + m_name + "," + m_modified + "," + m_modifier + "," + m_created + ","</a>
-<span class="sourceLineNo">479</span><a id="line.479">                            + m_creator + ") VALUES (?,?,?,?,?)";</a>
-<span class="sourceLineNo">480</span><a id="line.480">            m_updateGroup = "UPDATE " + table + " SET " + m_modified + "=?," + m_modifier + "=? WHERE " + m_name + "=?";</a>
-<span class="sourceLineNo">481</span><a id="line.481"></a>
-<span class="sourceLineNo">482</span><a id="line.482">            // Prepare the group member insert SQL</a>
-<span class="sourceLineNo">483</span><a id="line.483">            m_insertGroupMembers = "INSERT INTO " + memberTable + " (" + m_name + "," + m_member + ") VALUES (?,?)";</a>
-<span class="sourceLineNo">484</span><a id="line.484"></a>
-<span class="sourceLineNo">485</span><a id="line.485">            // Prepare the group delete SQL</a>
-<span class="sourceLineNo">486</span><a id="line.486">            m_deleteGroup = "DELETE FROM " + table + " WHERE " + m_name + "=?";</a>
-<span class="sourceLineNo">487</span><a id="line.487">            m_deleteGroupMembers = "DELETE FROM " + memberTable + " WHERE " + m_name + "=?";</a>
-<span class="sourceLineNo">488</span><a id="line.488">        }</a>
-<span class="sourceLineNo">489</span><a id="line.489">        catch( final NamingException e )</a>
-<span class="sourceLineNo">490</span><a id="line.490">        {</a>
-<span class="sourceLineNo">491</span><a id="line.491">            log.error( "JDBCGroupDatabase initialization error: " + e );</a>
-<span class="sourceLineNo">492</span><a id="line.492">            throw new NoRequiredPropertyException( PROP_GROUPDB_DATASOURCE, "JDBCGroupDatabase initialization error: " + e);</a>
-<span class="sourceLineNo">493</span><a id="line.493">        }</a>
-<span class="sourceLineNo">494</span><a id="line.494"></a>
-<span class="sourceLineNo">495</span><a id="line.495">        // Test connection by doing a quickie select</a>
-<span class="sourceLineNo">496</span><a id="line.496">        Connection conn = null;</a>
-<span class="sourceLineNo">497</span><a id="line.497">        PreparedStatement ps = null;</a>
-<span class="sourceLineNo">498</span><a id="line.498">        try</a>
-<span class="sourceLineNo">499</span><a id="line.499">        {</a>
-<span class="sourceLineNo">500</span><a id="line.500">            conn = m_ds.getConnection();</a>
-<span class="sourceLineNo">501</span><a id="line.501">            ps = conn.prepareStatement( m_findAll );</a>
-<span class="sourceLineNo">502</span><a id="line.502">            ps.executeQuery();</a>
-<span class="sourceLineNo">503</span><a id="line.503">            ps.close();</a>
-<span class="sourceLineNo">504</span><a id="line.504">        }</a>
-<span class="sourceLineNo">505</span><a id="line.505">        catch( final SQLException e )</a>
-<span class="sourceLineNo">506</span><a id="line.506">        {</a>
-<span class="sourceLineNo">507</span><a id="line.507">            closeQuietly( conn, ps, null );</a>
-<span class="sourceLineNo">508</span><a id="line.508">            log.error( "DB connectivity error: " + e.getMessage() );</a>
-<span class="sourceLineNo">509</span><a id="line.509">            throw new WikiSecurityException("DB connectivity error: " + e.getMessage(), e );</a>
-<span class="sourceLineNo">510</span><a id="line.510">        }</a>
-<span class="sourceLineNo">511</span><a id="line.511">        finally</a>
-<span class="sourceLineNo">512</span><a id="line.512">        {</a>
-<span class="sourceLineNo">513</span><a id="line.513">            closeQuietly( conn, ps, null );</a>
-<span class="sourceLineNo">514</span><a id="line.514">        }</a>
-<span class="sourceLineNo">515</span><a id="line.515">        log.info( "JDBCGroupDatabase initialized from JNDI DataSource: " + jndiName );</a>
-<span class="sourceLineNo">516</span><a id="line.516"></a>
-<span class="sourceLineNo">517</span><a id="line.517">        // Determine if the datasource supports commits</a>
-<span class="sourceLineNo">518</span><a id="line.518">        try</a>
-<span class="sourceLineNo">519</span><a id="line.519">        {</a>
-<span class="sourceLineNo">520</span><a id="line.520">            conn = m_ds.getConnection();</a>
-<span class="sourceLineNo">521</span><a id="line.521">            final DatabaseMetaData dmd = conn.getMetaData();</a>
-<span class="sourceLineNo">522</span><a id="line.522">            if( dmd.supportsTransactions() )</a>
-<span class="sourceLineNo">523</span><a id="line.523">            {</a>
-<span class="sourceLineNo">524</span><a id="line.524">                m_supportsCommits = true;</a>
-<span class="sourceLineNo">525</span><a id="line.525">                conn.setAutoCommit( false );</a>
-<span class="sourceLineNo">526</span><a id="line.526">                log.info( "JDBCGroupDatabase supports transactions. Good; we will use them." );</a>
-<span class="sourceLineNo">527</span><a id="line.527">            }</a>
-<span class="sourceLineNo">528</span><a id="line.528">        }</a>
-<span class="sourceLineNo">529</span><a id="line.529">        catch( final SQLException e )</a>
-<span class="sourceLineNo">530</span><a id="line.530">        {</a>
-<span class="sourceLineNo">531</span><a id="line.531">            closeQuietly( conn, null, null );</a>
-<span class="sourceLineNo">532</span><a id="line.532">            log.warn( "JDBCGroupDatabase warning: user database doesn't seem to support transactions. Reason: " + e);</a>
-<span class="sourceLineNo">533</span><a id="line.533">        }</a>
-<span class="sourceLineNo">534</span><a id="line.534">        finally</a>
-<span class="sourceLineNo">535</span><a id="line.535">        {</a>
-<span class="sourceLineNo">536</span><a id="line.536">            closeQuietly( conn, null, null );</a>
-<span class="sourceLineNo">537</span><a id="line.537">        }</a>
-<span class="sourceLineNo">538</span><a id="line.538">    }</a>
-<span class="sourceLineNo">539</span><a id="line.539"></a>
-<span class="sourceLineNo">540</span><a id="line.540">    /**</a>
-<span class="sourceLineNo">541</span><a id="line.541">     * Returns &lt;code&gt;true&lt;/code&gt; if the Group exists in back-end storage.</a>
-<span class="sourceLineNo">542</span><a id="line.542">     * </a>
-<span class="sourceLineNo">543</span><a id="line.543">     * @param group the Group to look for</a>
-<span class="sourceLineNo">544</span><a id="line.544">     * @return the result of the search</a>
-<span class="sourceLineNo">545</span><a id="line.545">     */</a>
-<span class="sourceLineNo">546</span><a id="line.546">    private boolean exists( final Group group )</a>
-<span class="sourceLineNo">547</span><a id="line.547">    {</a>
-<span class="sourceLineNo">548</span><a id="line.548">        final String index = group.getName();</a>
-<span class="sourceLineNo">549</span><a id="line.549">        try</a>
-<span class="sourceLineNo">550</span><a id="line.550">        {</a>
-<span class="sourceLineNo">551</span><a id="line.551">            findGroup( index );</a>
-<span class="sourceLineNo">552</span><a id="line.552">            return true;</a>
-<span class="sourceLineNo">553</span><a id="line.553">        }</a>
-<span class="sourceLineNo">554</span><a id="line.554">        catch( final NoSuchPrincipalException e )</a>
-<span class="sourceLineNo">555</span><a id="line.555">        {</a>
-<span class="sourceLineNo">556</span><a id="line.556">            return false;</a>
-<span class="sourceLineNo">557</span><a id="line.557">        }</a>
-<span class="sourceLineNo">558</span><a id="line.558">    }</a>
-<span class="sourceLineNo">559</span><a id="line.559"></a>
-<span class="sourceLineNo">560</span><a id="line.560">    /**</a>
-<span class="sourceLineNo">561</span><a id="line.561">     * Loads and returns a Group from the back-end database matching a supplied</a>
-<span class="sourceLineNo">562</span><a id="line.562">     * name.</a>
-<span class="sourceLineNo">563</span><a id="line.563">     * </a>
-<span class="sourceLineNo">564</span><a id="line.564">     * @param index the name of the Group to find</a>
-<span class="sourceLineNo">565</span><a id="line.565">     * @return the populated Group</a>
-<span class="sourceLineNo">566</span><a id="line.566">     * @throws NoSuchPrincipalException if the Group cannot be found</a>
-<span class="sourceLineNo">567</span><a id="line.567">     * @throws SQLException if the database query returns an error</a>
-<span class="sourceLineNo">568</span><a id="line.568">     */</a>
-<span class="sourceLineNo">569</span><a id="line.569">    private Group findGroup( final String index ) throws NoSuchPrincipalException</a>
-<span class="sourceLineNo">570</span><a id="line.570">    {</a>
-<span class="sourceLineNo">571</span><a id="line.571">        Group group = null;</a>
-<span class="sourceLineNo">572</span><a id="line.572">        boolean found = false;</a>
-<span class="sourceLineNo">573</span><a id="line.573">        boolean unique = true;</a>
-<span class="sourceLineNo">574</span><a id="line.574">        ResultSet rs = null;</a>
-<span class="sourceLineNo">575</span><a id="line.575">        PreparedStatement ps = null;</a>
-<span class="sourceLineNo">576</span><a id="line.576">        Connection conn = null;</a>
-<span class="sourceLineNo">577</span><a id="line.577">        try</a>
-<span class="sourceLineNo">578</span><a id="line.578">        {</a>
-<span class="sourceLineNo">579</span><a id="line.579">            // Open the database connection</a>
-<span class="sourceLineNo">580</span><a id="line.580">            conn = m_ds.getConnection();</a>
-<span class="sourceLineNo">581</span><a id="line.581"></a>
-<span class="sourceLineNo">582</span><a id="line.582">            ps = conn.prepareStatement( m_findGroup );</a>
-<span class="sourceLineNo">583</span><a id="line.583">            ps.setString( 1, index );</a>
-<span class="sourceLineNo">584</span><a id="line.584">            rs = ps.executeQuery();</a>
-<span class="sourceLineNo">585</span><a id="line.585">            while ( rs.next() )</a>
-<span class="sourceLineNo">586</span><a id="line.586">            {</a>
-<span class="sourceLineNo">587</span><a id="line.587">                if( group != null )</a>
-<span class="sourceLineNo">588</span><a id="line.588">                {</a>
-<span class="sourceLineNo">589</span><a id="line.589">                    unique = false;</a>
-<span class="sourceLineNo">590</span><a id="line.590">                    break;</a>
-<span class="sourceLineNo">591</span><a id="line.591">                }</a>
-<span class="sourceLineNo">592</span><a id="line.592">                group = new Group( index, m_engine.getApplicationName() );</a>
-<span class="sourceLineNo">593</span><a id="line.593">                group.setCreated( rs.getTimestamp( m_created ) );</a>
-<span class="sourceLineNo">594</span><a id="line.594">                group.setCreator( rs.getString( m_creator ) );</a>
-<span class="sourceLineNo">595</span><a id="line.595">                group.setLastModified( rs.getTimestamp( m_modified ) );</a>
-<span class="sourceLineNo">596</span><a id="line.596">                group.setModifier( rs.getString( m_modifier ) );</a>
-<span class="sourceLineNo">597</span><a id="line.597">                populateGroup( group );</a>
-<span class="sourceLineNo">598</span><a id="line.598">                found = true;</a>
-<span class="sourceLineNo">599</span><a id="line.599">            }</a>
-<span class="sourceLineNo">600</span><a id="line.600">        }</a>
-<span class="sourceLineNo">601</span><a id="line.601">        catch( final SQLException e )</a>
-<span class="sourceLineNo">602</span><a id="line.602">        {</a>
-<span class="sourceLineNo">603</span><a id="line.603">            closeQuietly( conn, ps, rs );</a>
-<span class="sourceLineNo">604</span><a id="line.604">            throw new NoSuchPrincipalException( e.getMessage() );</a>
-<span class="sourceLineNo">605</span><a id="line.605">        }</a>
-<span class="sourceLineNo">606</span><a id="line.606">        finally</a>
-<span class="sourceLineNo">607</span><a id="line.607">        {</a>
-<span class="sourceLineNo">608</span><a id="line.608">            closeQuietly( conn, ps, rs );</a>
-<span class="sourceLineNo">609</span><a id="line.609">        }</a>
-<span class="sourceLineNo">610</span><a id="line.610"></a>
-<span class="sourceLineNo">611</span><a id="line.611">        if( !found )</a>
-<span class="sourceLineNo">612</span><a id="line.612">        {</a>
-<span class="sourceLineNo">613</span><a id="line.613">            throw new NoSuchPrincipalException( "Could not find group in database!" );</a>
-<span class="sourceLineNo">614</span><a id="line.614">        }</a>
-<span class="sourceLineNo">615</span><a id="line.615">        if( !unique )</a>
-<span class="sourceLineNo">616</span><a id="line.616">        {</a>
-<span class="sourceLineNo">617</span><a id="line.617">            throw new NoSuchPrincipalException( "More than one group in database!" );</a>
-<span class="sourceLineNo">618</span><a id="line.618">        }</a>
-<span class="sourceLineNo">619</span><a id="line.619">        return group;</a>
-<span class="sourceLineNo">620</span><a id="line.620">    }</a>
-<span class="sourceLineNo">621</span><a id="line.621"></a>
-<span class="sourceLineNo">622</span><a id="line.622">    /**</a>
-<span class="sourceLineNo">623</span><a id="line.623">     * Fills a Group with members.</a>
-<span class="sourceLineNo">624</span><a id="line.624">     * </a>
-<span class="sourceLineNo">625</span><a id="line.625">     * @param group the group to populate</a>
-<span class="sourceLineNo">626</span><a id="line.626">     * @return the populated Group</a>
-<span class="sourceLineNo">627</span><a id="line.627">     */</a>
-<span class="sourceLineNo">628</span><a id="line.628">    private Group populateGroup( final Group group )</a>
-<span class="sourceLineNo">629</span><a id="line.629">    {</a>
-<span class="sourceLineNo">630</span><a id="line.630">        ResultSet rs = null;</a>
-<span class="sourceLineNo">631</span><a id="line.631">        PreparedStatement ps = null;</a>
-<span class="sourceLineNo">632</span><a id="line.632">        Connection conn = null;</a>
-<span class="sourceLineNo">633</span><a id="line.633">        try</a>
-<span class="sourceLineNo">634</span><a id="line.634">        {</a>
-<span class="sourceLineNo">635</span><a id="line.635">            // Open the database connection</a>
-<span class="sourceLineNo">636</span><a id="line.636">            conn = m_ds.getConnection();</a>
-<span class="sourceLineNo">637</span><a id="line.637"></a>
-<span class="sourceLineNo">638</span><a id="line.638">            ps = conn.prepareStatement( m_findMembers );</a>
-<span class="sourceLineNo">639</span><a id="line.639">            ps.setString( 1, group.getName() );</a>
-<span class="sourceLineNo">640</span><a id="line.640">            rs = ps.executeQuery();</a>
-<span class="sourceLineNo">641</span><a id="line.641">            while ( rs.next() )</a>
-<span class="sourceLineNo">642</span><a id="line.642">            {</a>
-<span class="sourceLineNo">643</span><a id="line.643">                final String memberName = rs.getString( m_member );</a>
-<span class="sourceLineNo">644</span><a id="line.644">                if( memberName != null )</a>
-<span class="sourceLineNo">645</span><a id="line.645">                {</a>
-<span class="sourceLineNo">646</span><a id="line.646">                    final WikiPrincipal principal = new WikiPrincipal( memberName, WikiPrincipal.UNSPECIFIED );</a>
-<span class="sourceLineNo">647</span><a id="line.647">                    group.add( principal );</a>
-<span class="sourceLineNo">648</span><a id="line.648">                }</a>
-<span class="sourceLineNo">649</span><a id="line.649">            }</a>
-<span class="sourceLineNo">650</span><a id="line.650">        }</a>
-<span class="sourceLineNo">651</span><a id="line.651">        catch( final SQLException e )</a>
-<span class="sourceLineNo">652</span><a id="line.652">        {</a>
-<span class="sourceLineNo">653</span><a id="line.653">            // I guess that means there aren't any principals...</a>
-<span class="sourceLineNo">654</span><a id="line.654">        }</a>
-<span class="sourceLineNo">655</span><a id="line.655">        finally</a>
-<span class="sourceLineNo">656</span><a id="line.656">        {</a>
-<span class="sourceLineNo">657</span><a id="line.657">            closeQuietly( conn, ps, rs );</a>
-<span class="sourceLineNo">658</span><a id="line.658">        }</a>
-<span class="sourceLineNo">659</span><a id="line.659">        return group;</a>
-<span class="sourceLineNo">660</span><a id="line.660">    }</a>
-<span class="sourceLineNo">661</span><a id="line.661">    </a>
-<span class="sourceLineNo">662</span><a id="line.662">    void closeQuietly( final Connection conn, final PreparedStatement ps, final ResultSet rs ) {</a>
-<span class="sourceLineNo">663</span><a id="line.663">        if( conn != null ) {</a>
-<span class="sourceLineNo">664</span><a id="line.664">            try {</a>
-<span class="sourceLineNo">665</span><a id="line.665">                conn.close();</a>
-<span class="sourceLineNo">666</span><a id="line.666">            } catch( final Exception e ) {</a>
-<span class="sourceLineNo">667</span><a id="line.667">            }</a>
-<span class="sourceLineNo">668</span><a id="line.668">        }</a>
-<span class="sourceLineNo">669</span><a id="line.669">        if( ps != null )  {</a>
-<span class="sourceLineNo">670</span><a id="line.670">            try {</a>
-<span class="sourceLineNo">671</span><a id="line.671">                ps.close();</a>
-<span class="sourceLineNo">672</span><a id="line.672">            } catch( final Exception e ) {</a>
-<span class="sourceLineNo">673</span><a id="line.673">            }</a>
-<span class="sourceLineNo">674</span><a id="line.674">        }</a>
-<span class="sourceLineNo">675</span><a id="line.675">        if( rs != null )  {</a>
-<span class="sourceLineNo">676</span><a id="line.676">            try {</a>
-<span class="sourceLineNo">677</span><a id="line.677">                rs.close();</a>
-<span class="sourceLineNo">678</span><a id="line.678">            } catch( final Exception e ) {</a>
-<span class="sourceLineNo">679</span><a id="line.679">            }</a>
-<span class="sourceLineNo">680</span><a id="line.680">        }</a>
-<span class="sourceLineNo">681</span><a id="line.681">    }</a>
-<span class="sourceLineNo">682</span><a id="line.682"></a>
-<span class="sourceLineNo">683</span><a id="line.683">}</a>
+<span class="sourceLineNo">454</span><a id="line.454">        final String jndiName = props.getProperty( PROP_GROUPDB_DATASOURCE, DEFAULT_GROUPDB_DATASOURCE );</a>
+<span class="sourceLineNo">455</span><a id="line.455">        try</a>
+<span class="sourceLineNo">456</span><a id="line.456">        {</a>
+<span class="sourceLineNo">457</span><a id="line.457">            final Context initCtx = new InitialContext();</a>
+<span class="sourceLineNo">458</span><a id="line.458">            final Context ctx = (Context) initCtx.lookup( "java:comp/env" );</a>
+<span class="sourceLineNo">459</span><a id="line.459">            m_ds = (DataSource) ctx.lookup( jndiName );</a>
+<span class="sourceLineNo">460</span><a id="line.460"></a>
+<span class="sourceLineNo">461</span><a id="line.461">            // Prepare the SQL selectors</a>
+<span class="sourceLineNo">462</span><a id="line.462">            table = props.getProperty( PROP_GROUPDB_TABLE, DEFAULT_GROUPDB_TABLE );</a>
+<span class="sourceLineNo">463</span><a id="line.463">            memberTable = props.getProperty( PROP_GROUPDB_MEMBER_TABLE, DEFAULT_GROUPDB_MEMBER_TABLE );</a>
+<span class="sourceLineNo">464</span><a id="line.464">            m_name = props.getProperty( PROP_GROUPDB_NAME, DEFAULT_GROUPDB_NAME );</a>
+<span class="sourceLineNo">465</span><a id="line.465">            m_created = props.getProperty( PROP_GROUPDB_CREATED, DEFAULT_GROUPDB_CREATED );</a>
+<span class="sourceLineNo">466</span><a id="line.466">            m_creator = props.getProperty( PROP_GROUPDB_CREATOR, DEFAULT_GROUPDB_CREATOR );</a>
+<span class="sourceLineNo">467</span><a id="line.467">            m_modifier = props.getProperty( PROP_GROUPDB_MODIFIER, DEFAULT_GROUPDB_MODIFIER );</a>
+<span class="sourceLineNo">468</span><a id="line.468">            m_modified = props.getProperty( PROP_GROUPDB_MODIFIED, DEFAULT_GROUPDB_MODIFIED );</a>
+<span class="sourceLineNo">469</span><a id="line.469">            m_member = props.getProperty( PROP_GROUPDB_MEMBER, DEFAULT_GROUPDB_MEMBER );</a>
+<span class="sourceLineNo">470</span><a id="line.470"></a>
+<span class="sourceLineNo">471</span><a id="line.471">            m_findAll = "SELECT DISTINCT * FROM " + table;</a>
+<span class="sourceLineNo">472</span><a id="line.472">            m_findGroup = "SELECT DISTINCT * FROM " + table + " WHERE " + m_name + "=?";</a>
+<span class="sourceLineNo">473</span><a id="line.473">            m_findMembers = "SELECT * FROM " + memberTable + " WHERE " + m_name + "=?";</a>
+<span class="sourceLineNo">474</span><a id="line.474"></a>
+<span class="sourceLineNo">475</span><a id="line.475">            // Prepare the group insert/update SQL</a>
+<span class="sourceLineNo">476</span><a id="line.476">            m_insertGroup = "INSERT INTO " + table + " (" + m_name + "," + m_modified + "," + m_modifier + "," + m_created + ","</a>
+<span class="sourceLineNo">477</span><a id="line.477">                            + m_creator + ") VALUES (?,?,?,?,?)";</a>
+<span class="sourceLineNo">478</span><a id="line.478">            m_updateGroup = "UPDATE " + table + " SET " + m_modified + "=?," + m_modifier + "=? WHERE " + m_name + "=?";</a>
+<span class="sourceLineNo">479</span><a id="line.479"></a>
+<span class="sourceLineNo">480</span><a id="line.480">            // Prepare the group member insert SQL</a>
+<span class="sourceLineNo">481</span><a id="line.481">            m_insertGroupMembers = "INSERT INTO " + memberTable + " (" + m_name + "," + m_member + ") VALUES (?,?)";</a>
+<span class="sourceLineNo">482</span><a id="line.482"></a>
+<span class="sourceLineNo">483</span><a id="line.483">            // Prepare the group delete SQL</a>
+<span class="sourceLineNo">484</span><a id="line.484">            m_deleteGroup = "DELETE FROM " + table + " WHERE " + m_name + "=?";</a>
+<span class="sourceLineNo">485</span><a id="line.485">            m_deleteGroupMembers = "DELETE FROM " + memberTable + " WHERE " + m_name + "=?";</a>
+<span class="sourceLineNo">486</span><a id="line.486">        }</a>
+<span class="sourceLineNo">487</span><a id="line.487">        catch( final NamingException e )</a>
+<span class="sourceLineNo">488</span><a id="line.488">        {</a>
+<span class="sourceLineNo">489</span><a id="line.489">            log.error( "JDBCGroupDatabase initialization error: " + e );</a>
+<span class="sourceLineNo">490</span><a id="line.490">            throw new NoRequiredPropertyException( PROP_GROUPDB_DATASOURCE, "JDBCGroupDatabase initialization error: " + e);</a>
+<span class="sourceLineNo">491</span><a id="line.491">        }</a>
+<span class="sourceLineNo">492</span><a id="line.492"></a>
+<span class="sourceLineNo">493</span><a id="line.493">        // Test connection by doing a quickie select</a>
+<span class="sourceLineNo">494</span><a id="line.494">        Connection conn = null;</a>
+<span class="sourceLineNo">495</span><a id="line.495">        PreparedStatement ps = null;</a>
+<span class="sourceLineNo">496</span><a id="line.496">        try</a>
+<span class="sourceLineNo">497</span><a id="line.497">        {</a>
+<span class="sourceLineNo">498</span><a id="line.498">            conn = m_ds.getConnection();</a>
+<span class="sourceLineNo">499</span><a id="line.499">            ps = conn.prepareStatement( m_findAll );</a>
+<span class="sourceLineNo">500</span><a id="line.500">            ps.executeQuery();</a>
+<span class="sourceLineNo">501</span><a id="line.501">            ps.close();</a>
+<span class="sourceLineNo">502</span><a id="line.502">        }</a>
+<span class="sourceLineNo">503</span><a id="line.503">        catch( final SQLException e )</a>
+<span class="sourceLineNo">504</span><a id="line.504">        {</a>
+<span class="sourceLineNo">505</span><a id="line.505">            closeQuietly( conn, ps, null );</a>
+<span class="sourceLineNo">506</span><a id="line.506">            log.error( "DB connectivity error: " + e.getMessage() );</a>
+<span class="sourceLineNo">507</span><a id="line.507">            throw new WikiSecurityException("DB connectivity error: " + e.getMessage(), e );</a>
+<span class="sourceLineNo">508</span><a id="line.508">        }</a>
+<span class="sourceLineNo">509</span><a id="line.509">        finally</a>
+<span class="sourceLineNo">510</span><a id="line.510">        {</a>
+<span class="sourceLineNo">511</span><a id="line.511">            closeQuietly( conn, ps, null );</a>
+<span class="sourceLineNo">512</span><a id="line.512">        }</a>
+<span class="sourceLineNo">513</span><a id="line.513">        log.info( "JDBCGroupDatabase initialized from JNDI DataSource: " + jndiName );</a>
+<span class="sourceLineNo">514</span><a id="line.514"></a>
+<span class="sourceLineNo">515</span><a id="line.515">        // Determine if the datasource supports commits</a>
+<span class="sourceLineNo">516</span><a id="line.516">        try</a>
+<span class="sourceLineNo">517</span><a id="line.517">        {</a>
+<span class="sourceLineNo">518</span><a id="line.518">            conn = m_ds.getConnection();</a>
+<span class="sourceLineNo">519</span><a id="line.519">            final DatabaseMetaData dmd = conn.getMetaData();</a>
+<span class="sourceLineNo">520</span><a id="line.520">            if( dmd.supportsTransactions() )</a>
+<span class="sourceLineNo">521</span><a id="line.521">            {</a>
+<span class="sourceLineNo">522</span><a id="line.522">                m_supportsCommits = true;</a>
+<span class="sourceLineNo">523</span><a id="line.523">                conn.setAutoCommit( false );</a>
+<span class="sourceLineNo">524</span><a id="line.524">                log.info( "JDBCGroupDatabase supports transactions. Good; we will use them." );</a>
+<span class="sourceLineNo">525</span><a id="line.525">            }</a>
+<span class="sourceLineNo">526</span><a id="line.526">        }</a>
+<span class="sourceLineNo">527</span><a id="line.527">        catch( final SQLException e )</a>
+<span class="sourceLineNo">528</span><a id="line.528">        {</a>
+<span class="sourceLineNo">529</span><a id="line.529">            closeQuietly( conn, null, null );</a>
+<span class="sourceLineNo">530</span><a id="line.530">            log.warn( "JDBCGroupDatabase warning: user database doesn't seem to support transactions. Reason: " + e);</a>
+<span class="sourceLineNo">531</span><a id="line.531">        }</a>
+<span class="sourceLineNo">532</span><a id="line.532">        finally</a>
+<span class="sourceLineNo">533</span><a id="line.533">        {</a>
+<span class="sourceLineNo">534</span><a id="line.534">            closeQuietly( conn, null, null );</a>
+<span class="sourceLineNo">535</span><a id="line.535">        }</a>
+<span class="sourceLineNo">536</span><a id="line.536">    }</a>
+<span class="sourceLineNo">537</span><a id="line.537"></a>
+<span class="sourceLineNo">538</span><a id="line.538">    /**</a>
+<span class="sourceLineNo">539</span><a id="line.539">     * Returns &lt;code&gt;true&lt;/code&gt; if the Group exists in back-end storage.</a>
+<span class="sourceLineNo">540</span><a id="line.540">     * </a>
+<span class="sourceLineNo">541</span><a id="line.541">     * @param group the Group to look for</a>
+<span class="sourceLineNo">542</span><a id="line.542">     * @return the result of the search</a>
+<span class="sourceLineNo">543</span><a id="line.543">     */</a>
+<span class="sourceLineNo">544</span><a id="line.544">    private boolean exists( final Group group )</a>
+<span class="sourceLineNo">545</span><a id="line.545">    {</a>
+<span class="sourceLineNo">546</span><a id="line.546">        final String index = group.getName();</a>
+<span class="sourceLineNo">547</span><a id="line.547">        try</a>
+<span class="sourceLineNo">548</span><a id="line.548">        {</a>
+<span class="sourceLineNo">549</span><a id="line.549">            findGroup( index );</a>
+<span class="sourceLineNo">550</span><a id="line.550">            return true;</a>
+<span class="sourceLineNo">551</span><a id="line.551">        }</a>
+<span class="sourceLineNo">552</span><a id="line.552">        catch( final NoSuchPrincipalException e )</a>
+<span class="sourceLineNo">553</span><a id="line.553">        {</a>
+<span class="sourceLineNo">554</span><a id="line.554">            return false;</a>
+<span class="sourceLineNo">555</span><a id="line.555">        }</a>
+<span class="sourceLineNo">556</span><a id="line.556">    }</a>
+<span class="sourceLineNo">557</span><a id="line.557"></a>
+<span class="sourceLineNo">558</span><a id="line.558">    /**</a>
+<span class="sourceLineNo">559</span><a id="line.559">     * Loads and returns a Group from the back-end database matching a supplied</a>
+<span class="sourceLineNo">560</span><a id="line.560">     * name.</a>
+<span class="sourceLineNo">561</span><a id="line.561">     * </a>
+<span class="sourceLineNo">562</span><a id="line.562">     * @param index the name of the Group to find</a>
+<span class="sourceLineNo">563</span><a id="line.563">     * @return the populated Group</a>
+<span class="sourceLineNo">564</span><a id="line.564">     * @throws NoSuchPrincipalException if the Group cannot be found</a>
+<span class="sourceLineNo">565</span><a id="line.565">     * @throws SQLException if the database query returns an error</a>
+<span class="sourceLineNo">566</span><a id="line.566">     */</a>
+<span class="sourceLineNo">567</span><a id="line.567">    private Group findGroup( final String index ) throws NoSuchPrincipalException</a>
+<span class="sourceLineNo">568</span><a id="line.568">    {</a>
+<span class="sourceLineNo">569</span><a id="line.569">        Group group = null;</a>
+<span class="sourceLineNo">570</span><a id="line.570">        boolean found = false;</a>
+<span class="sourceLineNo">571</span><a id="line.571">        boolean unique = true;</a>
+<span class="sourceLineNo">572</span><a id="line.572">        ResultSet rs = null;</a>
+<span class="sourceLineNo">573</span><a id="line.573">        PreparedStatement ps = null;</a>
+<span class="sourceLineNo">574</span><a id="line.574">        Connection conn = null;</a>
+<span class="sourceLineNo">575</span><a id="line.575">        try</a>
+<span class="sourceLineNo">576</span><a id="line.576">        {</a>
+<span class="sourceLineNo">577</span><a id="line.577">            // Open the database connection</a>
+<span class="sourceLineNo">578</span><a id="line.578">            conn = m_ds.getConnection();</a>
+<span class="sourceLineNo">579</span><a id="line.579"></a>
+<span class="sourceLineNo">580</span><a id="line.580">            ps = conn.prepareStatement( m_findGroup );</a>
+<span class="sourceLineNo">581</span><a id="line.581">            ps.setString( 1, index );</a>
+<span class="sourceLineNo">582</span><a id="line.582">            rs = ps.executeQuery();</a>
+<span class="sourceLineNo">583</span><a id="line.583">            while ( rs.next() )</a>
+<span class="sourceLineNo">584</span><a id="line.584">            {</a>
+<span class="sourceLineNo">585</span><a id="line.585">                if( group != null )</a>
+<span class="sourceLineNo">586</span><a id="line.586">                {</a>
+<span class="sourceLineNo">587</span><a id="line.587">                    unique = false;</a>
+<span class="sourceLineNo">588</span><a id="line.588">                    break;</a>
+<span class="sourceLineNo">589</span><a id="line.589">                }</a>
+<span class="sourceLineNo">590</span><a id="line.590">                group = new Group( index, m_engine.getApplicationName() );</a>
+<span class="sourceLineNo">591</span><a id="line.591">                group.setCreated( rs.getTimestamp( m_created ) );</a>
+<span class="sourceLineNo">592</span><a id="line.592">                group.setCreator( rs.getString( m_creator ) );</a>
+<span class="sourceLineNo">593</span><a id="line.593">                group.setLastModified( rs.getTimestamp( m_modified ) );</a>
+<span class="sourceLineNo">594</span><a id="line.594">                group.setModifier( rs.getString( m_modifier ) );</a>
+<span class="sourceLineNo">595</span><a id="line.595">                populateGroup( group );</a>
+<span class="sourceLineNo">596</span><a id="line.596">                found = true;</a>
+<span class="sourceLineNo">597</span><a id="line.597">            }</a>
+<span class="sourceLineNo">598</span><a id="line.598">        }</a>
+<span class="sourceLineNo">599</span><a id="line.599">        catch( final SQLException e )</a>
+<span class="sourceLineNo">600</span><a id="line.600">        {</a>
+<span class="sourceLineNo">601</span><a id="line.601">            closeQuietly( conn, ps, rs );</a>
+<span class="sourceLineNo">602</span><a id="line.602">            throw new NoSuchPrincipalException( e.getMessage() );</a>
+<span class="sourceLineNo">603</span><a id="line.603">        }</a>
+<span class="sourceLineNo">604</span><a id="line.604">        finally</a>
+<span class="sourceLineNo">605</span><a id="line.605">        {</a>
+<span class="sourceLineNo">606</span><a id="line.606">            closeQuietly( conn, ps, rs );</a>
+<span class="sourceLineNo">607</span><a id="line.607">        }</a>
+<span class="sourceLineNo">608</span><a id="line.608"></a>
+<span class="sourceLineNo">609</span><a id="line.609">        if( !found )</a>
+<span class="sourceLineNo">610</span><a id="line.610">        {</a>
+<span class="sourceLineNo">611</span><a id="line.611">            throw new NoSuchPrincipalException( "Could not find group in database!" );</a>
+<span class="sourceLineNo">612</span><a id="line.612">        }</a>
+<span class="sourceLineNo">613</span><a id="line.613">        if( !unique )</a>
+<span class="sourceLineNo">614</span><a id="line.614">        {</a>
+<span class="sourceLineNo">615</span><a id="line.615">            throw new NoSuchPrincipalException( "More than one group in database!" );</a>
+<span class="sourceLineNo">616</span><a id="line.616">        }</a>
+<span class="sourceLineNo">617</span><a id="line.617">        return group;</a>
+<span class="sourceLineNo">618</span><a id="line.618">    }</a>
+<span class="sourceLineNo">619</span><a id="line.619"></a>
+<span class="sourceLineNo">620</span><a id="line.620">    /**</a>
+<span class="sourceLineNo">621</span><a id="line.621">     * Fills a Group with members.</a>
+<span class="sourceLineNo">622</span><a id="line.622">     * </a>
+<span class="sourceLineNo">623</span><a id="line.623">     * @param group the group to populate</a>
+<span class="sourceLineNo">624</span><a id="line.624">     * @return the populated Group</a>
+<span class="sourceLineNo">625</span><a id="line.625">     */</a>
+<span class="sourceLineNo">626</span><a id="line.626">    private Group populateGroup( final Group group )</a>
+<span class="sourceLineNo">627</span><a id="line.627">    {</a>
+<span class="sourceLineNo">628</span><a id="line.628">        ResultSet rs = null;</a>
+<span class="sourceLineNo">629</span><a id="line.629">        PreparedStatement ps = null;</a>
+<span class="sourceLineNo">630</span><a id="line.630">        Connection conn = null;</a>
+<span class="sourceLineNo">631</span><a id="line.631">        try</a>
+<span class="sourceLineNo">632</span><a id="line.632">        {</a>
+<span class="sourceLineNo">633</span><a id="line.633">            // Open the database connection</a>
+<span class="sourceLineNo">634</span><a id="line.634">            conn = m_ds.getConnection();</a>
+<span class="sourceLineNo">635</span><a id="line.635"></a>
+<span class="sourceLineNo">636</span><a id="line.636">            ps = conn.prepareStatement( m_findMembers );</a>
+<span class="sourceLineNo">637</span><a id="line.637">            ps.setString( 1, group.getName() );</a>
+<span class="sourceLineNo">638</span><a id="line.638">            rs = ps.executeQuery();</a>
+<span class="sourceLineNo">639</span><a id="line.639">            while ( rs.next() )</a>
+<span class="sourceLineNo">640</span><a id="line.640">            {</a>
+<span class="sourceLineNo">641</span><a id="line.641">                final String memberName = rs.getString( m_member );</a>
+<span class="sourceLineNo">642</span><a id="line.642">                if( memberName != null )</a>
+<span class="sourceLineNo">643</span><a id="line.643">                {</a>
+<span class="sourceLineNo">644</span><a id="line.644">                    final WikiPrincipal principal = new WikiPrincipal( memberName, WikiPrincipal.UNSPECIFIED );</a>
+<span class="sourceLineNo">645</span><a id="line.645">                    group.add( principal );</a>
+<span class="sourceLineNo">646</span><a id="line.646">                }</a>
+<span class="sourceLineNo">647</span><a id="line.647">            }</a>
+<span class="sourceLineNo">648</span><a id="line.648">        }</a>
+<span class="sourceLineNo">649</span><a id="line.649">        catch( final SQLException e )</a>
+<span class="sourceLineNo">650</span><a id="line.650">        {</a>
+<span class="sourceLineNo">651</span><a id="line.651">            // I guess that means there aren't any principals...</a>
+<span class="sourceLineNo">652</span><a id="line.652">        }</a>
+<span class="sourceLineNo">653</span><a id="line.653">        finally</a>
+<span class="sourceLineNo">654</span><a id="line.654">        {</a>
+<span class="sourceLineNo">655</span><a id="line.655">            closeQuietly( conn, ps, rs );</a>
+<span class="sourceLineNo">656</span><a id="line.656">        }</a>
+<span class="sourceLineNo">657</span><a id="line.657">        return group;</a>
+<span class="sourceLineNo">658</span><a id="line.658">    }</a>
+<span class="sourceLineNo">659</span><a id="line.659">    </a>
+<span class="sourceLineNo">660</span><a id="line.660">    void closeQuietly( final Connection conn, final PreparedStatement ps, final ResultSet rs ) {</a>
+<span class="sourceLineNo">661</span><a id="line.661">        if( conn != null ) {</a>
+<span class="sourceLineNo">662</span><a id="line.662">            try {</a>
+<span class="sourceLineNo">663</span><a id="line.663">                conn.close();</a>
+<span class="sourceLineNo">664</span><a id="line.664">            } catch( final Exception e ) {</a>
+<span class="sourceLineNo">665</span><a id="line.665">            }</a>
+<span class="sourceLineNo">666</span><a id="line.666">        }</a>
+<span class="sourceLineNo">667</span><a id="line.667">        if( ps != null )  {</a>
+<span class="sourceLineNo">668</span><a id="line.668">            try {</a>
+<span class="sourceLineNo">669</span><a id="line.669">                ps.close();</a>
+<span class="sourceLineNo">670</span><a id="line.670">            } catch( final Exception e ) {</a>
+<span class="sourceLineNo">671</span><a id="line.671">            }</a>
+<span class="sourceLineNo">672</span><a id="line.672">        }</a>
+<span class="sourceLineNo">673</span><a id="line.673">        if( rs != null )  {</a>
+<span class="sourceLineNo">674</span><a id="line.674">            try {</a>
+<span class="sourceLineNo">675</span><a id="line.675">                rs.close();</a>
+<span class="sourceLineNo">676</span><a id="line.676">            } catch( final Exception e ) {</a>
+<span class="sourceLineNo">677</span><a id="line.677">            }</a>
+<span class="sourceLineNo">678</span><a id="line.678">        }</a>
+<span class="sourceLineNo">679</span><a id="line.679">    }</a>
+<span class="sourceLineNo">680</span><a id="line.680"></a>
+<span class="sourceLineNo">681</span><a id="line.681">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/WebAuthorizer.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/WebAuthorizer.html
index 5081541e02..7f8882dfa0 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/WebAuthorizer.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/authorize/WebAuthorizer.html
@@ -34,7 +34,7 @@
 <span class="sourceLineNo">025</span><a id="line.25"></a>
 <span class="sourceLineNo">026</span><a id="line.26"></a>
 <span class="sourceLineNo">027</span><a id="line.27">/**</a>
-<span class="sourceLineNo">028</span><a id="line.28"> * Extends the {@link org.apache.wiki.auth.Authorizer} interface by including a delgate method for</a>
+<span class="sourceLineNo">028</span><a id="line.28"> * Extends the {@link org.apache.wiki.auth.Authorizer} interface by including a delegate method for</a>
 <span class="sourceLineNo">029</span><a id="line.29"> * {@link javax.servlet.http.HttpServletRequest#isUserInRole(String)}.</a>
 <span class="sourceLineNo">030</span><a id="line.30"> */</a>
 <span class="sourceLineNo">031</span><a id="line.31">public interface WebAuthorizer extends Authorizer {</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/permissions/WikiPermission.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/permissions/WikiPermission.html
index 84d1c0f003..da57c122bf 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/permissions/WikiPermission.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/permissions/WikiPermission.html
@@ -247,37 +247,24 @@
 <span class="sourceLineNo">238</span><a id="line.238">        }</a>
 <span class="sourceLineNo">239</span><a id="line.239">        int mask = 0;</a>
 <span class="sourceLineNo">240</span><a id="line.240">        final String[] actionList = actions.split( "," );</a>
-<span class="sourceLineNo">241</span><a id="line.241">        for( int i = 0; i &lt; actionList.length; i++ )</a>
-<span class="sourceLineNo">242</span><a id="line.242">        {</a>
-<span class="sourceLineNo">243</span><a id="line.243">            final String action = actionList[i];</a>
-<span class="sourceLineNo">244</span><a id="line.244">            if ( action.equalsIgnoreCase( CREATE_GROUPS_ACTION ) )</a>
-<span class="sourceLineNo">245</span><a id="line.245">            {</a>
-<span class="sourceLineNo">246</span><a id="line.246">                mask |= CREATE_GROUPS_MASK;</a>
-<span class="sourceLineNo">247</span><a id="line.247">            }</a>
-<span class="sourceLineNo">248</span><a id="line.248">            else if ( action.equalsIgnoreCase( CREATE_PAGES_ACTION ) )</a>
-<span class="sourceLineNo">249</span><a id="line.249">            {</a>
-<span class="sourceLineNo">250</span><a id="line.250">                mask |= CREATE_PAGES_MASK;</a>
-<span class="sourceLineNo">251</span><a id="line.251">            }</a>
-<span class="sourceLineNo">252</span><a id="line.252">            else if ( action.equalsIgnoreCase( LOGIN_ACTION ) )</a>
-<span class="sourceLineNo">253</span><a id="line.253">            {</a>
-<span class="sourceLineNo">254</span><a id="line.254">                mask |= LOGIN_MASK;</a>
-<span class="sourceLineNo">255</span><a id="line.255">            }</a>
-<span class="sourceLineNo">256</span><a id="line.256">            else if ( action.equalsIgnoreCase( EDIT_PREFERENCES_ACTION ) )</a>
-<span class="sourceLineNo">257</span><a id="line.257">            {</a>
-<span class="sourceLineNo">258</span><a id="line.258">                mask |= EDIT_PREFERENCES_MASK;</a>
-<span class="sourceLineNo">259</span><a id="line.259">            }</a>
-<span class="sourceLineNo">260</span><a id="line.260">            else if ( action.equalsIgnoreCase( EDIT_PROFILE_ACTION ) )</a>
-<span class="sourceLineNo">261</span><a id="line.261">            {</a>
-<span class="sourceLineNo">262</span><a id="line.262">                mask |= EDIT_PROFILE_MASK;</a>
-<span class="sourceLineNo">263</span><a id="line.263">            }</a>
-<span class="sourceLineNo">264</span><a id="line.264">            else</a>
-<span class="sourceLineNo">265</span><a id="line.265">            {</a>
-<span class="sourceLineNo">266</span><a id="line.266">                throw new IllegalArgumentException( "Unrecognized action: " + action );</a>
-<span class="sourceLineNo">267</span><a id="line.267">            }</a>
-<span class="sourceLineNo">268</span><a id="line.268">        }</a>
-<span class="sourceLineNo">269</span><a id="line.269">        return mask;</a>
-<span class="sourceLineNo">270</span><a id="line.270">    }</a>
-<span class="sourceLineNo">271</span><a id="line.271">}</a>
+<span class="sourceLineNo">241</span><a id="line.241">        for (final String action : actionList) {</a>
+<span class="sourceLineNo">242</span><a id="line.242">            if (action.equalsIgnoreCase(CREATE_GROUPS_ACTION)) {</a>
+<span class="sourceLineNo">243</span><a id="line.243">                mask |= CREATE_GROUPS_MASK;</a>
+<span class="sourceLineNo">244</span><a id="line.244">            } else if (action.equalsIgnoreCase(CREATE_PAGES_ACTION)) {</a>
+<span class="sourceLineNo">245</span><a id="line.245">                mask |= CREATE_PAGES_MASK;</a>
+<span class="sourceLineNo">246</span><a id="line.246">            } else if (action.equalsIgnoreCase(LOGIN_ACTION)) {</a>
+<span class="sourceLineNo">247</span><a id="line.247">                mask |= LOGIN_MASK;</a>
+<span class="sourceLineNo">248</span><a id="line.248">            } else if (action.equalsIgnoreCase(EDIT_PREFERENCES_ACTION)) {</a>
+<span class="sourceLineNo">249</span><a id="line.249">                mask |= EDIT_PREFERENCES_MASK;</a>
+<span class="sourceLineNo">250</span><a id="line.250">            } else if (action.equalsIgnoreCase(EDIT_PROFILE_ACTION)) {</a>
+<span class="sourceLineNo">251</span><a id="line.251">                mask |= EDIT_PROFILE_MASK;</a>
+<span class="sourceLineNo">252</span><a id="line.252">            } else {</a>
+<span class="sourceLineNo">253</span><a id="line.253">                throw new IllegalArgumentException("Unrecognized action: " + action);</a>
+<span class="sourceLineNo">254</span><a id="line.254">            }</a>
+<span class="sourceLineNo">255</span><a id="line.255">        }</a>
+<span class="sourceLineNo">256</span><a id="line.256">        return mask;</a>
+<span class="sourceLineNo">257</span><a id="line.257">    }</a>
+<span class="sourceLineNo">258</span><a id="line.258">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/user/UserDatabase.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/user/UserDatabase.html
index 2eae6c88a0..d168c95523 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/user/UserDatabase.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/auth/user/UserDatabase.html
@@ -59,7 +59,7 @@
 <span class="sourceLineNo">050</span><a id="line.50">     * a user with the supplied identifier, throws a {@link NoSuchPrincipalException}.</a>
 <span class="sourceLineNo">051</span><a id="line.51">     * &lt;/p&gt;</a>
 <span class="sourceLineNo">052</span><a id="line.52">     * &lt;p&gt;</a>
-<span class="sourceLineNo">053</span><a id="line.53">     * Note that if an implememtation wishes to mark one of the returned Principals as representing the user's common name, it should</a>
+<span class="sourceLineNo">053</span><a id="line.53">     * Note that if an implementation wishes to mark one of the returned Principals as representing the user's common name, it should</a>
 <span class="sourceLineNo">054</span><a id="line.54">     * instantiate this Principal using {@link org.apache.wiki.auth.WikiPrincipal#WikiPrincipal(String, String)} with the &lt;code&gt;type&lt;/code&gt;</a>
 <span class="sourceLineNo">055</span><a id="line.55">     * parameter set to {@link org.apache.wiki.auth.WikiPrincipal#WIKI_NAME}. The method</a>
 <span class="sourceLineNo">056</span><a id="line.56">     * {@link org.apache.wiki.api.core.Session#getUserPrincipal()} will return this principal as the "primary" principal. Note that this method</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/event/WikiSecurityEvent.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/event/WikiSecurityEvent.html
index 9eb57767fd..9c8757ef38 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/event/WikiSecurityEvent.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/event/WikiSecurityEvent.html
@@ -173,7 +173,7 @@
 <span class="sourceLineNo">164</span><a id="line.164">    }</a>
 <span class="sourceLineNo">165</span><a id="line.165"></a>
 <span class="sourceLineNo">166</span><a id="line.166">    /**</a>
-<span class="sourceLineNo">167</span><a id="line.167">     * Returns the principal to whom the opeation applied, if supplied. This method may return &lt;code&gt;null&lt;/code&gt;</a>
+<span class="sourceLineNo">167</span><a id="line.167">     * Returns the principal to whom the operation applied, if supplied. This method may return &lt;code&gt;null&lt;/code&gt;</a>
 <span class="sourceLineNo">168</span><a id="line.168">     * &lt;em&gt;&amp;#8212; and calling methods should check for this condition&lt;/em&gt;.</a>
 <span class="sourceLineNo">169</span><a id="line.169">     *</a>
 <span class="sourceLineNo">170</span><a id="line.170">     * @return the changed object</a>
@@ -205,7 +205,7 @@
 <span class="sourceLineNo">196</span><a id="line.196">        final Object obj = getSrc(); // cfr. https://forums.oracle.com/forums/thread.jspa?threadID=1184115</a>
 <span class="sourceLineNo">197</span><a id="line.197">        msg.append( " [source=" ).append( obj.toString() );</a>
 <span class="sourceLineNo">198</span><a id="line.198">        if( m_principal != null ) {</a>
-<span class="sourceLineNo">199</span><a id="line.199">            msg.append( ", princpal=" ).append( m_principal.getClass().getName() );</a>
+<span class="sourceLineNo">199</span><a id="line.199">            msg.append( ", principal=" ).append( m_principal.getClass().getName() );</a>
 <span class="sourceLineNo">200</span><a id="line.200">            msg.append( " " ).append( m_principal.getName() );</a>
 <span class="sourceLineNo">201</span><a id="line.201">        }</a>
 <span class="sourceLineNo">202</span><a id="line.202">        msg.append( ", target=" ).append( m_target );</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/htmltowiki/SyntaxDecorator.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/htmltowiki/SyntaxDecorator.html
index 15c7465b0a..f4504e59e5 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/htmltowiki/SyntaxDecorator.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/htmltowiki/SyntaxDecorator.html
@@ -49,7 +49,7 @@
 <span class="sourceLineNo">040</span><a id="line.40">     * @param preStack stack containing the amount of nested {@code pre}s.</a>
 <span class="sourceLineNo">041</span><a id="line.41">     * @param outTrimmer writer capable of trimming whitespaces and of checking if it's currently writing a line start.</a>
 <span class="sourceLineNo">042</span><a id="line.42">     * @param config xhtml to wiki configuration object.</a>
-<span class="sourceLineNo">043</span><a id="line.43">     * @param chain chain (in the chain of responsabilities pattern) that is expected to be called by the different xhtml decorations.</a>
+<span class="sourceLineNo">043</span><a id="line.43">     * @param chain chain (in the chain of responsibilities patterns) that is expected to be called by the different xhtml decorations.</a>
 <span class="sourceLineNo">044</span><a id="line.44">     */</a>
 <span class="sourceLineNo">045</span><a id="line.45">    void init( PrintWriter out, Deque&lt; String &gt; liStack, Deque&lt; String &gt; preStack, WhitespaceTrimWriter outTrimmer, XHtmlToWikiConfig config, XHtmlElementToWikiTranslator chain );</a>
 <span class="sourceLineNo">046</span><a id="line.46"></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/pages/PageSorter.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/pages/PageSorter.html
index 03f56eb412..ffc2bd9fa0 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/pages/PageSorter.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/pages/PageSorter.html
@@ -104,7 +104,7 @@
 <span class="sourceLineNo">095</span><a id="line.95">        if( className != null &amp;&amp; !className.isEmpty() ) {</a>
 <span class="sourceLineNo">096</span><a id="line.96">            try {</a>
 <span class="sourceLineNo">097</span><a id="line.97">                final Class&lt; Comparator&lt; String &gt; &gt; cl = ClassUtil.findClass( "org.apache.wiki.util.comparators", className );</a>
-<span class="sourceLineNo">098</span><a id="line.98">                m_comparator = ClassUtil.buildInstance( cl );;</a>
+<span class="sourceLineNo">098</span><a id="line.98">                m_comparator = ClassUtil.buildInstance( cl );</a>
 <span class="sourceLineNo">099</span><a id="line.99">            } catch( final Exception e ) {</a>
 <span class="sourceLineNo">100</span><a id="line.100">                LOG.error( "Falling back to default \"natural\" comparator", e );</a>
 <span class="sourceLineNo">101</span><a id="line.101">            }</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/CreoleToJSPWikiTranslator.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/CreoleToJSPWikiTranslator.html
index 1c54118716..e04b2eae5f 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/CreoleToJSPWikiTranslator.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/CreoleToJSPWikiTranslator.html
@@ -172,9 +172,9 @@
 <span class="sourceLineNo">163</span><a id="line.163"></a>
 <span class="sourceLineNo">164</span><a id="line.164">    private static final String ESCAPE_PROTECTED = "~(\\*\\*|~|//|-|#|\\{\\{|}}|\\\\|~\\[~~[|]]|----|=|\\|)";</a>
 <span class="sourceLineNo">165</span><a id="line.165"></a>
-<span class="sourceLineNo">166</span><a id="line.166">    private static final Map&lt;String, String&gt; c_protectionMap = new HashMap&lt;String, String&gt;();</a>
+<span class="sourceLineNo">166</span><a id="line.166">    private static final Map&lt;String, String&gt; c_protectionMap = new HashMap&lt;&gt;();</a>
 <span class="sourceLineNo">167</span><a id="line.167"></a>
-<span class="sourceLineNo">168</span><a id="line.168">    private        ArrayList&lt;String&gt; m_hashList = new ArrayList&lt;String&gt;();</a>
+<span class="sourceLineNo">168</span><a id="line.168">    private        ArrayList&lt;String&gt; m_hashList = new ArrayList&lt;&gt;();</a>
 <span class="sourceLineNo">169</span><a id="line.169"></a>
 <span class="sourceLineNo">170</span><a id="line.170">    /**</a>
 <span class="sourceLineNo">171</span><a id="line.171">     *  I have no idea what this method does.  Could someone please tell me?</a>
@@ -194,7 +194,7 @@
 <span class="sourceLineNo">185</span><a id="line.185">            dateFormat = DEFAULT_DATEFORMAT;</a>
 <span class="sourceLineNo">186</span><a id="line.186">        }</a>
 <span class="sourceLineNo">187</span><a id="line.187"></a>
-<span class="sourceLineNo">188</span><a id="line.188">        SimpleDateFormat df = null;</a>
+<span class="sourceLineNo">188</span><a id="line.188">        SimpleDateFormat df;</a>
 <span class="sourceLineNo">189</span><a id="line.189">        try</a>
 <span class="sourceLineNo">190</span><a id="line.190">        {</a>
 <span class="sourceLineNo">191</span><a id="line.191">            df = new SimpleDateFormat(dateFormat);</a>
@@ -392,7 +392,7 @@
 <span class="sourceLineNo">383</span><a id="line.383">    private String protectMarkup(String content)</a>
 <span class="sourceLineNo">384</span><a id="line.384">    {</a>
 <span class="sourceLineNo">385</span><a id="line.385">        c_protectionMap.clear();</a>
-<span class="sourceLineNo">386</span><a id="line.386">        m_hashList = new ArrayList&lt;String&gt;();</a>
+<span class="sourceLineNo">386</span><a id="line.386">        m_hashList = new ArrayList&lt;&gt;();</a>
 <span class="sourceLineNo">387</span><a id="line.387">        content = protectMarkup(content, PREFORMATTED_PROTECTED, "", "");</a>
 <span class="sourceLineNo">388</span><a id="line.388">        content = protectMarkup(content, URL_PROTECTED, "", "");</a>
 <span class="sourceLineNo">389</span><a id="line.389">        content = protectMarkup(content, ESCAPE_PROTECTED, "", "");</a>
@@ -407,166 +407,157 @@
 <span class="sourceLineNo">398</span><a id="line.398">    {</a>
 <span class="sourceLineNo">399</span><a id="line.399">        final Set&lt; Object &gt; keySet = wikiProps.keySet();</a>
 <span class="sourceLineNo">400</span><a id="line.400">        final Object[] keys = keySet.toArray();</a>
-<span class="sourceLineNo">401</span><a id="line.401">        final ArrayList&lt;String[]&gt; result = new ArrayList&lt;String[]&gt;();</a>
+<span class="sourceLineNo">401</span><a id="line.401">        final ArrayList&lt;String[]&gt; result = new ArrayList&lt;&gt;();</a>
 <span class="sourceLineNo">402</span><a id="line.402"></a>
-<span class="sourceLineNo">403</span><a id="line.403">        for( int i = 0; i &lt; keys.length; i++ )</a>
-<span class="sourceLineNo">404</span><a id="line.404">        {</a>
-<span class="sourceLineNo">405</span><a id="line.405">            final String key = keys[i] + "";</a>
-<span class="sourceLineNo">406</span><a id="line.406">            final String value = wikiProps.getProperty( keys[i] + "" );</a>
-<span class="sourceLineNo">407</span><a id="line.407">            if( key.indexOf( "creole.imagePlugin.para.%" ) &gt; -1 )</a>
-<span class="sourceLineNo">408</span><a id="line.408">            {</a>
-<span class="sourceLineNo">409</span><a id="line.409">                final String[] pair = new String[2];</a>
-<span class="sourceLineNo">410</span><a id="line.410">                pair[0] = key.replaceAll( "creole.imagePlugin.para.%", "" );</a>
-<span class="sourceLineNo">411</span><a id="line.411">                pair[1] = value;</a>
-<span class="sourceLineNo">412</span><a id="line.412">                result.add( pair );</a>
-<span class="sourceLineNo">413</span><a id="line.413">            }</a>
-<span class="sourceLineNo">414</span><a id="line.414">        }</a>
-<span class="sourceLineNo">415</span><a id="line.415">        return result;</a>
-<span class="sourceLineNo">416</span><a id="line.416">    }</a>
-<span class="sourceLineNo">417</span><a id="line.417"></a>
-<span class="sourceLineNo">418</span><a id="line.418">    private String replaceImageArea(final Properties wikiProps, final String content, final String markupRegex, final String replaceContent, final int groupPos,</a>
-<span class="sourceLineNo">419</span><a id="line.419">                                    final String imagePlugin)</a>
-<span class="sourceLineNo">420</span><a id="line.420">    {</a>
-<span class="sourceLineNo">421</span><a id="line.421">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
-<span class="sourceLineNo">422</span><a id="line.422">        String contentCopy = content;</a>
+<span class="sourceLineNo">403</span><a id="line.403">        for (final Object o : keys) {</a>
+<span class="sourceLineNo">404</span><a id="line.404">            final String key = o + "";</a>
+<span class="sourceLineNo">405</span><a id="line.405">            final String value = wikiProps.getProperty(o + "");</a>
+<span class="sourceLineNo">406</span><a id="line.406">            if (key.contains("creole.imagePlugin.para.%")) {</a>
+<span class="sourceLineNo">407</span><a id="line.407">                final String[] pair = new String[2];</a>
+<span class="sourceLineNo">408</span><a id="line.408">                pair[0] = key.replaceAll("creole.imagePlugin.para.%", "");</a>
+<span class="sourceLineNo">409</span><a id="line.409">                pair[1] = value;</a>
+<span class="sourceLineNo">410</span><a id="line.410">                result.add(pair);</a>
+<span class="sourceLineNo">411</span><a id="line.411">            }</a>
+<span class="sourceLineNo">412</span><a id="line.412">        }</a>
+<span class="sourceLineNo">413</span><a id="line.413">        return result;</a>
+<span class="sourceLineNo">414</span><a id="line.414">    }</a>
+<span class="sourceLineNo">415</span><a id="line.415"></a>
+<span class="sourceLineNo">416</span><a id="line.416">    private String replaceImageArea(final Properties wikiProps, final String content, final String markupRegex, final String replaceContent, final int groupPos,</a>
+<span class="sourceLineNo">417</span><a id="line.417">                                    final String imagePlugin)</a>
+<span class="sourceLineNo">418</span><a id="line.418">    {</a>
+<span class="sourceLineNo">419</span><a id="line.419">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
+<span class="sourceLineNo">420</span><a id="line.420">        String contentCopy = content;</a>
+<span class="sourceLineNo">421</span><a id="line.421"></a>
+<span class="sourceLineNo">422</span><a id="line.422">        final ArrayList&lt; String[] &gt; plProperties = readPlaceholderProperties(wikiProps);</a>
 <span class="sourceLineNo">423</span><a id="line.423"></a>
-<span class="sourceLineNo">424</span><a id="line.424">        final ArrayList&lt; String[] &gt; plProperties = readPlaceholderProperties(wikiProps);</a>
-<span class="sourceLineNo">425</span><a id="line.425"></a>
-<span class="sourceLineNo">426</span><a id="line.426">        while (matcher.find())</a>
-<span class="sourceLineNo">427</span><a id="line.427">        {</a>
-<span class="sourceLineNo">428</span><a id="line.428">            String protectedMarkup = matcher.group(0);</a>
-<span class="sourceLineNo">429</span><a id="line.429">            final String paramsField = matcher.group(groupPos);</a>
-<span class="sourceLineNo">430</span><a id="line.430">            final StringBuilder paramsString = new StringBuilder();</a>
-<span class="sourceLineNo">431</span><a id="line.431"></a>
-<span class="sourceLineNo">432</span><a id="line.432">            if (paramsField != null)</a>
-<span class="sourceLineNo">433</span><a id="line.433">            {</a>
-<span class="sourceLineNo">434</span><a id="line.434">                final String[] params = paramsField.split(",");</a>
-<span class="sourceLineNo">435</span><a id="line.435"></a>
-<span class="sourceLineNo">436</span><a id="line.436">                for (int i = 0; i &lt; params.length; i++)</a>
-<span class="sourceLineNo">437</span><a id="line.437">                {</a>
-<span class="sourceLineNo">438</span><a id="line.438">                    final String param = params[i].replaceAll("\\||\\s", "").toUpperCase();</a>
-<span class="sourceLineNo">439</span><a id="line.439"></a>
-<span class="sourceLineNo">440</span><a id="line.440">                    // Replace placeholder params</a>
-<span class="sourceLineNo">441</span><a id="line.441">                    for (int j = 0; j &lt; plProperties.size(); j++)</a>
-<span class="sourceLineNo">442</span><a id="line.442">                    {</a>
-<span class="sourceLineNo">443</span><a id="line.443">                        final String[] pair = plProperties.get(j);</a>
-<span class="sourceLineNo">444</span><a id="line.444">                        final String key = pair[0];</a>
-<span class="sourceLineNo">445</span><a id="line.445">                        final String value = pair[1];</a>
-<span class="sourceLineNo">446</span><a id="line.446">                        String code = param.replaceAll("(?i)([0-9]+)" + key, value + "&lt;check&gt;" + "$1" + "&lt;/check&gt;");</a>
-<span class="sourceLineNo">447</span><a id="line.447">                        code = code.replaceAll("(.*?)%(.*?)&lt;check&gt;(.*?)&lt;/check&gt;", "$1$3$2");</a>
-<span class="sourceLineNo">448</span><a id="line.448">                        if (!code.equals(param)) {</a>
-<span class="sourceLineNo">449</span><a id="line.449">                            paramsString.append(code);</a>
-<span class="sourceLineNo">450</span><a id="line.450">                        }</a>
-<span class="sourceLineNo">451</span><a id="line.451">                    }</a>
-<span class="sourceLineNo">452</span><a id="line.452"></a>
-<span class="sourceLineNo">453</span><a id="line.453">                    // Check if it is a number</a>
-<span class="sourceLineNo">454</span><a id="line.454">                    try</a>
-<span class="sourceLineNo">455</span><a id="line.455">                    {</a>
-<span class="sourceLineNo">456</span><a id="line.456">                        Integer.parseInt(param);</a>
-<span class="sourceLineNo">457</span><a id="line.457">                        paramsString.append(" width='").append(param).append("px'");</a>
-<span class="sourceLineNo">458</span><a id="line.458">                    }</a>
-<span class="sourceLineNo">459</span><a id="line.459">                    catch (final Exception e)</a>
-<span class="sourceLineNo">460</span><a id="line.460">                    {</a>
+<span class="sourceLineNo">424</span><a id="line.424">        while (matcher.find())</a>
+<span class="sourceLineNo">425</span><a id="line.425">        {</a>
+<span class="sourceLineNo">426</span><a id="line.426">            String protectedMarkup = matcher.group(0);</a>
+<span class="sourceLineNo">427</span><a id="line.427">            final String paramsField = matcher.group(groupPos);</a>
+<span class="sourceLineNo">428</span><a id="line.428">            final StringBuilder paramsString = new StringBuilder();</a>
+<span class="sourceLineNo">429</span><a id="line.429"></a>
+<span class="sourceLineNo">430</span><a id="line.430">            if (paramsField != null)</a>
+<span class="sourceLineNo">431</span><a id="line.431">            {</a>
+<span class="sourceLineNo">432</span><a id="line.432">                final String[] params = paramsField.split(",");</a>
+<span class="sourceLineNo">433</span><a id="line.433"></a>
+<span class="sourceLineNo">434</span><a id="line.434">                for (final String s : params) {</a>
+<span class="sourceLineNo">435</span><a id="line.435">                    final String param = s.replaceAll("\\||\\s", "").toUpperCase();</a>
+<span class="sourceLineNo">436</span><a id="line.436"></a>
+<span class="sourceLineNo">437</span><a id="line.437">                    // Replace placeholder params</a>
+<span class="sourceLineNo">438</span><a id="line.438">                    for (final String[] pair : plProperties) {</a>
+<span class="sourceLineNo">439</span><a id="line.439">                        final String key = pair[0];</a>
+<span class="sourceLineNo">440</span><a id="line.440">                        final String value = pair[1];</a>
+<span class="sourceLineNo">441</span><a id="line.441">                        String code = param.replaceAll("(?i)([0-9]+)" + key, value + "&lt;check&gt;" + "$1" + "&lt;/check&gt;");</a>
+<span class="sourceLineNo">442</span><a id="line.442">                        code = code.replaceAll("(.*?)%(.*?)&lt;check&gt;(.*?)&lt;/check&gt;", "$1$3$2");</a>
+<span class="sourceLineNo">443</span><a id="line.443">                        if (!code.equals(param)) {</a>
+<span class="sourceLineNo">444</span><a id="line.444">                            paramsString.append(code);</a>
+<span class="sourceLineNo">445</span><a id="line.445">                        }</a>
+<span class="sourceLineNo">446</span><a id="line.446">                    }</a>
+<span class="sourceLineNo">447</span><a id="line.447"></a>
+<span class="sourceLineNo">448</span><a id="line.448">                    // Check if it is a number</a>
+<span class="sourceLineNo">449</span><a id="line.449">                    try {</a>
+<span class="sourceLineNo">450</span><a id="line.450">                        Integer.parseInt(param);</a>
+<span class="sourceLineNo">451</span><a id="line.451">                        paramsString.append(" width='").append(param).append("px'");</a>
+<span class="sourceLineNo">452</span><a id="line.452">                    } catch (final Exception e) {</a>
+<span class="sourceLineNo">453</span><a id="line.453"></a>
+<span class="sourceLineNo">454</span><a id="line.454">                        if (wikiProps.getProperty("creole.imagePlugin.para." + param) != null)</a>
+<span class="sourceLineNo">455</span><a id="line.455">                            paramsString.append(" ").append(wikiProps.getProperty("creole.imagePlugin.para." + param)</a>
+<span class="sourceLineNo">456</span><a id="line.456">                                    .replaceAll("^(\"|')(.*)(\"|')$", "$2"));</a>
+<span class="sourceLineNo">457</span><a id="line.457">                    }</a>
+<span class="sourceLineNo">458</span><a id="line.458">                }</a>
+<span class="sourceLineNo">459</span><a id="line.459">            }</a>
+<span class="sourceLineNo">460</span><a id="line.460">            final String temp = protectedMarkup;</a>
 <span class="sourceLineNo">461</span><a id="line.461"></a>
-<span class="sourceLineNo">462</span><a id="line.462">                        if (wikiProps.getProperty("creole.imagePlugin.para." + param) != null)</a>
-<span class="sourceLineNo">463</span><a id="line.463">                            paramsString.append(" ").append(wikiProps.getProperty("creole.imagePlugin.para." + param)</a>
-<span class="sourceLineNo">464</span><a id="line.464">                                    .replaceAll("^(\"|')(.*)(\"|')$", "$2"));</a>
-<span class="sourceLineNo">465</span><a id="line.465">                    }</a>
-<span class="sourceLineNo">466</span><a id="line.466">                }</a>
-<span class="sourceLineNo">467</span><a id="line.467">            }</a>
-<span class="sourceLineNo">468</span><a id="line.468">            final String temp = protectedMarkup;</a>
-<span class="sourceLineNo">469</span><a id="line.469"></a>
-<span class="sourceLineNo">470</span><a id="line.470">            protectedMarkup = translateElement(protectedMarkup, markupRegex, replaceContent);</a>
-<span class="sourceLineNo">471</span><a id="line.471">            protectedMarkup = protectedMarkup.replaceAll("\u2015", paramsString.toString());</a>
-<span class="sourceLineNo">472</span><a id="line.472">            protectedMarkup = protectedMarkup.replaceAll("\u2016", imagePlugin);</a>
-<span class="sourceLineNo">473</span><a id="line.473">            protectedMarkup = protectedMarkup.replaceAll("caption=''", "");</a>
-<span class="sourceLineNo">474</span><a id="line.474">            protectedMarkup = protectedMarkup.replaceAll("\\s+", " ");</a>
-<span class="sourceLineNo">475</span><a id="line.475"></a>
-<span class="sourceLineNo">476</span><a id="line.476">            final int pos = contentCopy.indexOf(temp);</a>
-<span class="sourceLineNo">477</span><a id="line.477">            contentCopy = contentCopy.substring(0, pos) + protectedMarkup</a>
-<span class="sourceLineNo">478</span><a id="line.478">                          + contentCopy.substring(pos + temp.length());</a>
-<span class="sourceLineNo">479</span><a id="line.479">        }</a>
-<span class="sourceLineNo">480</span><a id="line.480">        return contentCopy;</a>
-<span class="sourceLineNo">481</span><a id="line.481">    }</a>
-<span class="sourceLineNo">482</span><a id="line.482"></a>
-<span class="sourceLineNo">483</span><a id="line.483">    private String replaceArea(final String content, final String markupRegex, final String replaceSource, final String replaceTarget)</a>
-<span class="sourceLineNo">484</span><a id="line.484">    {</a>
-<span class="sourceLineNo">485</span><a id="line.485">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
-<span class="sourceLineNo">486</span><a id="line.486">        String contentCopy = content;</a>
-<span class="sourceLineNo">487</span><a id="line.487"></a>
-<span class="sourceLineNo">488</span><a id="line.488">        while (matcher.find())</a>
-<span class="sourceLineNo">489</span><a id="line.489">        {</a>
-<span class="sourceLineNo">490</span><a id="line.490">            String protectedMarkup = matcher.group(0);</a>
-<span class="sourceLineNo">491</span><a id="line.491">            final String temp = protectedMarkup;</a>
-<span class="sourceLineNo">492</span><a id="line.492">            protectedMarkup = protectedMarkup.replaceAll(replaceSource, replaceTarget);</a>
-<span class="sourceLineNo">493</span><a id="line.493">            final int pos = contentCopy.indexOf(temp);</a>
-<span class="sourceLineNo">494</span><a id="line.494">            contentCopy = contentCopy.substring(0, pos) + protectedMarkup</a>
-<span class="sourceLineNo">495</span><a id="line.495">                          + contentCopy.substring(pos + temp.length() );</a>
-<span class="sourceLineNo">496</span><a id="line.496">        }</a>
-<span class="sourceLineNo">497</span><a id="line.497">        return contentCopy;</a>
-<span class="sourceLineNo">498</span><a id="line.498">    }</a>
-<span class="sourceLineNo">499</span><a id="line.499"></a>
-<span class="sourceLineNo">500</span><a id="line.500">    /**</a>
-<span class="sourceLineNo">501</span><a id="line.501">     * Protects a specific markup</a>
-<span class="sourceLineNo">502</span><a id="line.502">     *</a>
-<span class="sourceLineNo">503</span><a id="line.503">     * @see #protectMarkup(String)</a>
-<span class="sourceLineNo">504</span><a id="line.504">     */</a>
-<span class="sourceLineNo">505</span><a id="line.505">    private String protectMarkup(final String content, final String markupRegex, final String replaceSource, final String replaceTarget)</a>
-<span class="sourceLineNo">506</span><a id="line.506">    {</a>
-<span class="sourceLineNo">507</span><a id="line.507">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
-<span class="sourceLineNo">508</span><a id="line.508">        final StringBuffer result = new StringBuffer();</a>
-<span class="sourceLineNo">509</span><a id="line.509">        while (matcher.find())</a>
-<span class="sourceLineNo">510</span><a id="line.510">        {</a>
-<span class="sourceLineNo">511</span><a id="line.511">            String protectedMarkup = matcher.group();</a>
-<span class="sourceLineNo">512</span><a id="line.512">            protectedMarkup = protectedMarkup.replaceAll(replaceSource, replaceTarget);</a>
-<span class="sourceLineNo">513</span><a id="line.513">            try</a>
-<span class="sourceLineNo">514</span><a id="line.514">            {</a>
-<span class="sourceLineNo">515</span><a id="line.515">                final MessageDigest digest = MessageDigest.getInstance("MD5");</a>
-<span class="sourceLineNo">516</span><a id="line.516">                digest.reset();</a>
-<span class="sourceLineNo">517</span><a id="line.517">                digest.update(protectedMarkup.getBytes(StandardCharsets.UTF_8.name()));</a>
-<span class="sourceLineNo">518</span><a id="line.518">                final String hash = bytesToHash(digest.digest());</a>
-<span class="sourceLineNo">519</span><a id="line.519">                matcher.appendReplacement(result, hash);</a>
-<span class="sourceLineNo">520</span><a id="line.520">                c_protectionMap.put(hash, protectedMarkup);</a>
-<span class="sourceLineNo">521</span><a id="line.521">                m_hashList.add(hash);</a>
-<span class="sourceLineNo">522</span><a id="line.522">            }</a>
-<span class="sourceLineNo">523</span><a id="line.523">            catch (final NoSuchAlgorithmException e)</a>
-<span class="sourceLineNo">524</span><a id="line.524">            {</a>
-<span class="sourceLineNo">525</span><a id="line.525">                // FIXME: Should log properly</a>
-<span class="sourceLineNo">526</span><a id="line.526">                e.printStackTrace();</a>
-<span class="sourceLineNo">527</span><a id="line.527">            }</a>
-<span class="sourceLineNo">528</span><a id="line.528">            catch (final UnsupportedEncodingException e)</a>
-<span class="sourceLineNo">529</span><a id="line.529">            {</a>
-<span class="sourceLineNo">530</span><a id="line.530">                // FIXME: Auto-generated catch block</a>
-<span class="sourceLineNo">531</span><a id="line.531">                e.printStackTrace();</a>
-<span class="sourceLineNo">532</span><a id="line.532">            }</a>
-<span class="sourceLineNo">533</span><a id="line.533">        }</a>
-<span class="sourceLineNo">534</span><a id="line.534">        matcher.appendTail(result);</a>
-<span class="sourceLineNo">535</span><a id="line.535">        return result.toString();</a>
-<span class="sourceLineNo">536</span><a id="line.536">    }</a>
-<span class="sourceLineNo">537</span><a id="line.537"></a>
-<span class="sourceLineNo">538</span><a id="line.538">    private String bytesToHash(final byte[] b)</a>
-<span class="sourceLineNo">539</span><a id="line.539">    {</a>
-<span class="sourceLineNo">540</span><a id="line.540">        final StringBuilder hash = new StringBuilder();</a>
-<span class="sourceLineNo">541</span><a id="line.541">        for (int i = 0; i &lt; b.length; i++)</a>
-<span class="sourceLineNo">542</span><a id="line.542">        {</a>
-<span class="sourceLineNo">543</span><a id="line.543">            hash.append(Integer.toString((b[i] &amp; 0xff) + 0x100, 16).substring(1));</a>
-<span class="sourceLineNo">544</span><a id="line.544">        }</a>
-<span class="sourceLineNo">545</span><a id="line.545">        return hash.toString();</a>
-<span class="sourceLineNo">546</span><a id="line.546">    }</a>
-<span class="sourceLineNo">547</span><a id="line.547"></a>
-<span class="sourceLineNo">548</span><a id="line.548">    private String translateElement(final String content, final String fromMarkup, final String toMarkup)</a>
-<span class="sourceLineNo">549</span><a id="line.549">    {</a>
-<span class="sourceLineNo">550</span><a id="line.550">        final Matcher matcher = Pattern.compile(fromMarkup, Pattern.MULTILINE).matcher(content);</a>
-<span class="sourceLineNo">551</span><a id="line.551">        final StringBuffer result = new StringBuffer();</a>
-<span class="sourceLineNo">552</span><a id="line.552"></a>
-<span class="sourceLineNo">553</span><a id="line.553">        while (matcher.find())</a>
-<span class="sourceLineNo">554</span><a id="line.554">        {</a>
-<span class="sourceLineNo">555</span><a id="line.555">            matcher.appendReplacement(result, toMarkup);</a>
-<span class="sourceLineNo">556</span><a id="line.556">        }</a>
-<span class="sourceLineNo">557</span><a id="line.557">        matcher.appendTail(result);</a>
-<span class="sourceLineNo">558</span><a id="line.558">        return result.toString();</a>
-<span class="sourceLineNo">559</span><a id="line.559">    }</a>
-<span class="sourceLineNo">560</span><a id="line.560">}</a>
+<span class="sourceLineNo">462</span><a id="line.462">            protectedMarkup = translateElement(protectedMarkup, markupRegex, replaceContent);</a>
+<span class="sourceLineNo">463</span><a id="line.463">            protectedMarkup = protectedMarkup.replaceAll("\u2015", paramsString.toString());</a>
+<span class="sourceLineNo">464</span><a id="line.464">            protectedMarkup = protectedMarkup.replaceAll("\u2016", imagePlugin);</a>
+<span class="sourceLineNo">465</span><a id="line.465">            protectedMarkup = protectedMarkup.replaceAll("caption=''", "");</a>
+<span class="sourceLineNo">466</span><a id="line.466">            protectedMarkup = protectedMarkup.replaceAll("\\s+", " ");</a>
+<span class="sourceLineNo">467</span><a id="line.467"></a>
+<span class="sourceLineNo">468</span><a id="line.468">            final int pos = contentCopy.indexOf(temp);</a>
+<span class="sourceLineNo">469</span><a id="line.469">            contentCopy = contentCopy.substring(0, pos) + protectedMarkup</a>
+<span class="sourceLineNo">470</span><a id="line.470">                          + contentCopy.substring(pos + temp.length());</a>
+<span class="sourceLineNo">471</span><a id="line.471">        }</a>
+<span class="sourceLineNo">472</span><a id="line.472">        return contentCopy;</a>
+<span class="sourceLineNo">473</span><a id="line.473">    }</a>
+<span class="sourceLineNo">474</span><a id="line.474"></a>
+<span class="sourceLineNo">475</span><a id="line.475">    private String replaceArea(final String content, final String markupRegex, final String replaceSource, final String replaceTarget)</a>
+<span class="sourceLineNo">476</span><a id="line.476">    {</a>
+<span class="sourceLineNo">477</span><a id="line.477">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
+<span class="sourceLineNo">478</span><a id="line.478">        String contentCopy = content;</a>
+<span class="sourceLineNo">479</span><a id="line.479"></a>
+<span class="sourceLineNo">480</span><a id="line.480">        while (matcher.find())</a>
+<span class="sourceLineNo">481</span><a id="line.481">        {</a>
+<span class="sourceLineNo">482</span><a id="line.482">            String protectedMarkup = matcher.group(0);</a>
+<span class="sourceLineNo">483</span><a id="line.483">            final String temp = protectedMarkup;</a>
+<span class="sourceLineNo">484</span><a id="line.484">            protectedMarkup = protectedMarkup.replaceAll(replaceSource, replaceTarget);</a>
+<span class="sourceLineNo">485</span><a id="line.485">            final int pos = contentCopy.indexOf(temp);</a>
+<span class="sourceLineNo">486</span><a id="line.486">            contentCopy = contentCopy.substring(0, pos) + protectedMarkup</a>
+<span class="sourceLineNo">487</span><a id="line.487">                          + contentCopy.substring(pos + temp.length() );</a>
+<span class="sourceLineNo">488</span><a id="line.488">        }</a>
+<span class="sourceLineNo">489</span><a id="line.489">        return contentCopy;</a>
+<span class="sourceLineNo">490</span><a id="line.490">    }</a>
+<span class="sourceLineNo">491</span><a id="line.491"></a>
+<span class="sourceLineNo">492</span><a id="line.492">    /**</a>
+<span class="sourceLineNo">493</span><a id="line.493">     * Protects a specific markup</a>
+<span class="sourceLineNo">494</span><a id="line.494">     *</a>
+<span class="sourceLineNo">495</span><a id="line.495">     * @see #protectMarkup(String)</a>
+<span class="sourceLineNo">496</span><a id="line.496">     */</a>
+<span class="sourceLineNo">497</span><a id="line.497">    private String protectMarkup(final String content, final String markupRegex, final String replaceSource, final String replaceTarget)</a>
+<span class="sourceLineNo">498</span><a id="line.498">    {</a>
+<span class="sourceLineNo">499</span><a id="line.499">        final Matcher matcher = Pattern.compile(markupRegex, Pattern.MULTILINE | Pattern.DOTALL).matcher(content);</a>
+<span class="sourceLineNo">500</span><a id="line.500">        final StringBuffer result = new StringBuffer();</a>
+<span class="sourceLineNo">501</span><a id="line.501">        while (matcher.find())</a>
+<span class="sourceLineNo">502</span><a id="line.502">        {</a>
+<span class="sourceLineNo">503</span><a id="line.503">            String protectedMarkup = matcher.group();</a>
+<span class="sourceLineNo">504</span><a id="line.504">            protectedMarkup = protectedMarkup.replaceAll(replaceSource, replaceTarget);</a>
+<span class="sourceLineNo">505</span><a id="line.505">            try</a>
+<span class="sourceLineNo">506</span><a id="line.506">            {</a>
+<span class="sourceLineNo">507</span><a id="line.507">                final MessageDigest digest = MessageDigest.getInstance("MD5");</a>
+<span class="sourceLineNo">508</span><a id="line.508">                digest.reset();</a>
+<span class="sourceLineNo">509</span><a id="line.509">                digest.update(protectedMarkup.getBytes(StandardCharsets.UTF_8.name()));</a>
+<span class="sourceLineNo">510</span><a id="line.510">                final String hash = bytesToHash(digest.digest());</a>
+<span class="sourceLineNo">511</span><a id="line.511">                matcher.appendReplacement(result, hash);</a>
+<span class="sourceLineNo">512</span><a id="line.512">                c_protectionMap.put(hash, protectedMarkup);</a>
+<span class="sourceLineNo">513</span><a id="line.513">                m_hashList.add(hash);</a>
+<span class="sourceLineNo">514</span><a id="line.514">            }</a>
+<span class="sourceLineNo">515</span><a id="line.515">            catch (final NoSuchAlgorithmException e)</a>
+<span class="sourceLineNo">516</span><a id="line.516">            {</a>
+<span class="sourceLineNo">517</span><a id="line.517">                // FIXME: Should log properly</a>
+<span class="sourceLineNo">518</span><a id="line.518">                e.printStackTrace();</a>
+<span class="sourceLineNo">519</span><a id="line.519">            }</a>
+<span class="sourceLineNo">520</span><a id="line.520">            catch (final UnsupportedEncodingException e)</a>
+<span class="sourceLineNo">521</span><a id="line.521">            {</a>
+<span class="sourceLineNo">522</span><a id="line.522">                // FIXME: Auto-generated catch block</a>
+<span class="sourceLineNo">523</span><a id="line.523">                e.printStackTrace();</a>
+<span class="sourceLineNo">524</span><a id="line.524">            }</a>
+<span class="sourceLineNo">525</span><a id="line.525">        }</a>
+<span class="sourceLineNo">526</span><a id="line.526">        matcher.appendTail(result);</a>
+<span class="sourceLineNo">527</span><a id="line.527">        return result.toString();</a>
+<span class="sourceLineNo">528</span><a id="line.528">    }</a>
+<span class="sourceLineNo">529</span><a id="line.529"></a>
+<span class="sourceLineNo">530</span><a id="line.530">    private String bytesToHash(final byte[] b)</a>
+<span class="sourceLineNo">531</span><a id="line.531">    {</a>
+<span class="sourceLineNo">532</span><a id="line.532">        final StringBuilder hash = new StringBuilder();</a>
+<span class="sourceLineNo">533</span><a id="line.533">        for (final byte value : b) {</a>
+<span class="sourceLineNo">534</span><a id="line.534">            hash.append(Integer.toString((value &amp; 0xff) + 0x100, 16).substring(1));</a>
+<span class="sourceLineNo">535</span><a id="line.535">        }</a>
+<span class="sourceLineNo">536</span><a id="line.536">        return hash.toString();</a>
+<span class="sourceLineNo">537</span><a id="line.537">    }</a>
+<span class="sourceLineNo">538</span><a id="line.538"></a>
+<span class="sourceLineNo">539</span><a id="line.539">    private String translateElement(final String content, final String fromMarkup, final String toMarkup)</a>
+<span class="sourceLineNo">540</span><a id="line.540">    {</a>
+<span class="sourceLineNo">541</span><a id="line.541">        final Matcher matcher = Pattern.compile(fromMarkup, Pattern.MULTILINE).matcher(content);</a>
+<span class="sourceLineNo">542</span><a id="line.542">        final StringBuffer result = new StringBuffer();</a>
+<span class="sourceLineNo">543</span><a id="line.543"></a>
+<span class="sourceLineNo">544</span><a id="line.544">        while (matcher.find())</a>
+<span class="sourceLineNo">545</span><a id="line.545">        {</a>
+<span class="sourceLineNo">546</span><a id="line.546">            matcher.appendReplacement(result, toMarkup);</a>
+<span class="sourceLineNo">547</span><a id="line.547">        }</a>
+<span class="sourceLineNo">548</span><a id="line.548">        matcher.appendTail(result);</a>
+<span class="sourceLineNo">549</span><a id="line.549">        return result.toString();</a>
+<span class="sourceLineNo">550</span><a id="line.550">    }</a>
+<span class="sourceLineNo">551</span><a id="line.551">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/JSPWikiMarkupParser.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/JSPWikiMarkupParser.html
index 4be6f73cd2..0a9337e911 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/JSPWikiMarkupParser.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/JSPWikiMarkupParser.html
@@ -1467,7 +1467,7 @@
 <span class="sourceLineNo">1458</span><a id="line.1458">    private Element handleHeading()</a>
 <span class="sourceLineNo">1459</span><a id="line.1459">        throws IOException</a>
 <span class="sourceLineNo">1460</span><a id="line.1460">    {</a>
-<span class="sourceLineNo">1461</span><a id="line.1461">        Element el = null;</a>
+<span class="sourceLineNo">1461</span><a id="line.1461">        Element el;</a>
 <span class="sourceLineNo">1462</span><a id="line.1462"></a>
 <span class="sourceLineNo">1463</span><a id="line.1463">        final int ch  = nextToken();</a>
 <span class="sourceLineNo">1464</span><a id="line.1464"></a>
@@ -1946,7 +1946,7 @@
 <span class="sourceLineNo">1937</span><a id="line.1937">                    {</a>
 <span class="sourceLineNo">1938</span><a id="line.1938">                        // Fail quietly</a>
 <span class="sourceLineNo">1939</span><a id="line.1939">                    }</a>
-<span class="sourceLineNo">1940</span><a id="line.1940">                    else if( isSpan.booleanValue() )</a>
+<span class="sourceLineNo">1940</span><a id="line.1940">                    else if(isSpan)</a>
 <span class="sourceLineNo">1941</span><a id="line.1941">                    {</a>
 <span class="sourceLineNo">1942</span><a id="line.1942">                        el = popElement( "span" );</a>
 <span class="sourceLineNo">1943</span><a id="line.1943">                    }</a>
@@ -1971,7 +1971,7 @@
 <span class="sourceLineNo">1962</span><a id="line.1962">            try</a>
 <span class="sourceLineNo">1963</span><a id="line.1963">            {</a>
 <span class="sourceLineNo">1964</span><a id="line.1964">                style = StringEscapeUtils.unescapeHtml4(style);</a>
-<span class="sourceLineNo">1965</span><a id="line.1965">                if( style != null &amp;&amp; style.indexOf("javascript:") != -1 )</a>
+<span class="sourceLineNo">1965</span><a id="line.1965">                if( style != null &amp;&amp; style.contains("javascript:"))</a>
 <span class="sourceLineNo">1966</span><a id="line.1966">                {</a>
 <span class="sourceLineNo">1967</span><a id="line.1967">                    log.debug("Attempt to output javascript within CSS:"+style);</a>
 <span class="sourceLineNo">1968</span><a id="line.1968">                    final ResourceBundle rb = Preferences.getBundle( m_context, InternationalizationManager.CORE_BUNDLE );</a>
@@ -2037,7 +2037,7 @@
 <span class="sourceLineNo">2028</span><a id="line.2028">    private Element handleBar( final boolean newLine )</a>
 <span class="sourceLineNo">2029</span><a id="line.2029">        throws IOException</a>
 <span class="sourceLineNo">2030</span><a id="line.2030">    {</a>
-<span class="sourceLineNo">2031</span><a id="line.2031">        Element el = null;</a>
+<span class="sourceLineNo">2031</span><a id="line.2031">        Element el;</a>
 <span class="sourceLineNo">2032</span><a id="line.2032"></a>
 <span class="sourceLineNo">2033</span><a id="line.2033">        if( !m_istable &amp;&amp; !newLine )</a>
 <span class="sourceLineNo">2034</span><a id="line.2034">        {</a>
@@ -2550,24 +2550,21 @@
 <span class="sourceLineNo">2541</span><a id="line.2541">            {</a>
 <span class="sourceLineNo">2542</span><a id="line.2542">                final Element newel = new Element("p");</a>
 <span class="sourceLineNo">2543</span><a id="line.2543"></a>
-<span class="sourceLineNo">2544</span><a id="line.2544">                for( final Iterator&lt; Content &gt; i = ls.iterator(); i.hasNext(); )</a>
-<span class="sourceLineNo">2545</span><a id="line.2545">                {</a>
-<span class="sourceLineNo">2546</span><a id="line.2546">                    final Content c = i.next();</a>
-<span class="sourceLineNo">2547</span><a id="line.2547"></a>
-<span class="sourceLineNo">2548</span><a id="line.2548">                    c.detach();</a>
-<span class="sourceLineNo">2549</span><a id="line.2549">                    newel.addContent(c);</a>
-<span class="sourceLineNo">2550</span><a id="line.2550">                }</a>
-<span class="sourceLineNo">2551</span><a id="line.2551"></a>
-<span class="sourceLineNo">2552</span><a id="line.2552">                //</a>
-<span class="sourceLineNo">2553</span><a id="line.2553">                // Make sure there are no empty &lt;p/&gt; tags added.</a>
-<span class="sourceLineNo">2554</span><a id="line.2554">                //</a>
-<span class="sourceLineNo">2555</span><a id="line.2555">                if( !newel.getTextTrim().isEmpty() || !newel.getChildren().isEmpty() )</a>
-<span class="sourceLineNo">2556</span><a id="line.2556">                    rootElement.addContent(idxOfFirstContent, newel);</a>
-<span class="sourceLineNo">2557</span><a id="line.2557">            }</a>
-<span class="sourceLineNo">2558</span><a id="line.2558">        }</a>
-<span class="sourceLineNo">2559</span><a id="line.2559">    }</a>
-<span class="sourceLineNo">2560</span><a id="line.2560"></a>
-<span class="sourceLineNo">2561</span><a id="line.2561">}</a>
+<span class="sourceLineNo">2544</span><a id="line.2544">                for (final Content c : ls) {</a>
+<span class="sourceLineNo">2545</span><a id="line.2545">                    c.detach();</a>
+<span class="sourceLineNo">2546</span><a id="line.2546">                    newel.addContent(c);</a>
+<span class="sourceLineNo">2547</span><a id="line.2547">                }</a>
+<span class="sourceLineNo">2548</span><a id="line.2548"></a>
+<span class="sourceLineNo">2549</span><a id="line.2549">                //</a>
+<span class="sourceLineNo">2550</span><a id="line.2550">                // Make sure there are no empty &lt;p/&gt; tags added.</a>
+<span class="sourceLineNo">2551</span><a id="line.2551">                //</a>
+<span class="sourceLineNo">2552</span><a id="line.2552">                if( !newel.getTextTrim().isEmpty() || !newel.getChildren().isEmpty() )</a>
+<span class="sourceLineNo">2553</span><a id="line.2553">                    rootElement.addContent(idxOfFirstContent, newel);</a>
+<span class="sourceLineNo">2554</span><a id="line.2554">            }</a>
+<span class="sourceLineNo">2555</span><a id="line.2555">        }</a>
+<span class="sourceLineNo">2556</span><a id="line.2556">    }</a>
+<span class="sourceLineNo">2557</span><a id="line.2557"></a>
+<span class="sourceLineNo">2558</span><a id="line.2558">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.Link.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.Link.html
index ca51b00777..9b9e3ab4fd 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.Link.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.Link.html
@@ -241,7 +241,7 @@
 <span class="sourceLineNo">232</span><a id="line.232"></a>
 <span class="sourceLineNo">233</span><a id="line.233">            // parse attributes</a>
 <span class="sourceLineNo">234</span><a id="line.234">            // contains "='" that looks like attrib spec</a>
-<span class="sourceLineNo">235</span><a id="line.235">            if( attribs.indexOf(EQSQUO) != -1 )</a>
+<span class="sourceLineNo">235</span><a id="line.235">            if(attribs.contains(EQSQUO))</a>
 <span class="sourceLineNo">236</span><a id="line.236">            {</a>
 <span class="sourceLineNo">237</span><a id="line.237">                try</a>
 <span class="sourceLineNo">238</span><a id="line.238">                {</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.html
index ca51b00777..9b9e3ab4fd 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/parser/LinkParser.html
@@ -241,7 +241,7 @@
 <span class="sourceLineNo">232</span><a id="line.232"></a>
 <span class="sourceLineNo">233</span><a id="line.233">            // parse attributes</a>
 <span class="sourceLineNo">234</span><a id="line.234">            // contains "='" that looks like attrib spec</a>
-<span class="sourceLineNo">235</span><a id="line.235">            if( attribs.indexOf(EQSQUO) != -1 )</a>
+<span class="sourceLineNo">235</span><a id="line.235">            if(attribs.contains(EQSQUO))</a>
 <span class="sourceLineNo">236</span><a id="line.236">            {</a>
 <span class="sourceLineNo">237</span><a id="line.237">                try</a>
 <span class="sourceLineNo">238</span><a id="line.238">                {</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/AbstractReferralPlugin.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/AbstractReferralPlugin.html
index 217e0c2da4..22ce872ccc 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/AbstractReferralPlugin.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/AbstractReferralPlugin.html
@@ -138,7 +138,7 @@
 <span class="sourceLineNo">129</span><a id="line.129">    protected String m_before = ""; // null not blank</a>
 <span class="sourceLineNo">130</span><a id="line.130">    protected String m_separator = ""; // null not blank</a>
 <span class="sourceLineNo">131</span><a id="line.131">    protected String m_after = "\\\\";</a>
-<span class="sourceLineNo">132</span><a id="line.132">    protected int items = 0;</a>
+<span class="sourceLineNo">132</span><a id="line.132">    protected int items;</a>
 <span class="sourceLineNo">133</span><a id="line.133"></a>
 <span class="sourceLineNo">134</span><a id="line.134">    protected Pattern[]  m_exclude;</a>
 <span class="sourceLineNo">135</span><a id="line.135">    protected Pattern[]  m_include;</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/ReferredPagesPlugin.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/ReferredPagesPlugin.html
index ec1153ca62..623db70592 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/ReferredPagesPlugin.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/plugin/ReferredPagesPlugin.html
@@ -75,7 +75,7 @@
 <span class="sourceLineNo">066</span><a id="line.66">    private final PatternMatcher m_matcher = new Perl5Matcher();</a>
 <span class="sourceLineNo">067</span><a id="line.67">    private Pattern m_includePattern;</a>
 <span class="sourceLineNo">068</span><a id="line.68">    private Pattern m_excludePattern;</a>
-<span class="sourceLineNo">069</span><a id="line.69">    private int items = 0;</a>
+<span class="sourceLineNo">069</span><a id="line.69">    private int items;</a>
 <span class="sourceLineNo">070</span><a id="line.70">    private boolean m_formatCompact = true;</a>
 <span class="sourceLineNo">071</span><a id="line.71">    private boolean m_formatSort;</a>
 <span class="sourceLineNo">072</span><a id="line.72"></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.FixedQueue.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.FixedQueue.html
index 772826a3fd..47f393457d 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.FixedQueue.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.FixedQueue.html
@@ -163,7 +163,7 @@
 <span class="sourceLineNo">154</span><a id="line.154">        final JspWriter out     = pageContext.getOut();</a>
 <span class="sourceLineNo">155</span><a id="line.155">        final int queueSize     = trail.size();</a>
 <span class="sourceLineNo">156</span><a id="line.156">        final String linkclass  = "wikipage";</a>
-<span class="sourceLineNo">157</span><a id="line.157">        String curPage    = null;</a>
+<span class="sourceLineNo">157</span><a id="line.157">        String curPage;</a>
 <span class="sourceLineNo">158</span><a id="line.158"></a>
 <span class="sourceLineNo">159</span><a id="line.159">        for( int i = 0; i &lt; queueSize - 1; i++ ) {</a>
 <span class="sourceLineNo">160</span><a id="line.160">            curPage = trail.get(i);</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.html
index 772826a3fd..47f393457d 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/BreadcrumbsTag.html
@@ -163,7 +163,7 @@
 <span class="sourceLineNo">154</span><a id="line.154">        final JspWriter out     = pageContext.getOut();</a>
 <span class="sourceLineNo">155</span><a id="line.155">        final int queueSize     = trail.size();</a>
 <span class="sourceLineNo">156</span><a id="line.156">        final String linkclass  = "wikipage";</a>
-<span class="sourceLineNo">157</span><a id="line.157">        String curPage    = null;</a>
+<span class="sourceLineNo">157</span><a id="line.157">        String curPage;</a>
 <span class="sourceLineNo">158</span><a id="line.158"></a>
 <span class="sourceLineNo">159</span><a id="line.159">        for( int i = 0; i &lt; queueSize - 1; i++ ) {</a>
 <span class="sourceLineNo">160</span><a id="line.160">            curPage = trail.get(i);</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CalendarTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CalendarTag.html
index 5eb4c0cf2d..0cfbd58b1e 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CalendarTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CalendarTag.html
@@ -99,7 +99,7 @@
 <span class="sourceLineNo">090</span><a id="line.90">     *  Sets the page format.  If a page corresponding to the format is found when</a>
 <span class="sourceLineNo">091</span><a id="line.91">     *  the calendar is being rendered, a link to that page is created.  E.g. if the</a>
 <span class="sourceLineNo">092</span><a id="line.92">     *  format is set to &lt;tt&gt;'Main_blogentry_'ddMMyy&lt;/tt&gt;, it works nicely in</a>
-<span class="sourceLineNo">093</span><a id="line.93">     *  conjuction to the WeblogPlugin.</a>
+<span class="sourceLineNo">093</span><a id="line.93">     *  conjunction to the WeblogPlugin.</a>
 <span class="sourceLineNo">094</span><a id="line.94">     *  </a>
 <span class="sourceLineNo">095</span><a id="line.95">     *  @param format The format in the SimpleDateFormat fashion.</a>
 <span class="sourceLineNo">096</span><a id="line.96">     *  </a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CookieTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CookieTag.html
index d9df84c661..15fa65fca3 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CookieTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/CookieTag.html
@@ -336,7 +336,7 @@
 <span class="sourceLineNo">327</span><a id="line.327">     */</a>
 <span class="sourceLineNo">328</span><a id="line.328">    private Map&lt;String, String&gt; parseCookieValues(final String s )</a>
 <span class="sourceLineNo">329</span><a id="line.329">    {</a>
-<span class="sourceLineNo">330</span><a id="line.330">        final Map&lt; String, String &gt; rval = new HashMap&lt; String, String &gt;();</a>
+<span class="sourceLineNo">330</span><a id="line.330">        final Map&lt; String, String &gt; rval = new HashMap&lt;&gt;();</a>
 <span class="sourceLineNo">331</span><a id="line.331">        if( s == null ) {</a>
 <span class="sourceLineNo">332</span><a id="line.332">            return rval;</a>
 <span class="sourceLineNo">333</span><a id="line.333">        }</a>
@@ -344,107 +344,104 @@
 <span class="sourceLineNo">335</span><a id="line.335">        if( nvps.length == 0 ) {</a>
 <span class="sourceLineNo">336</span><a id="line.336">            return rval;</a>
 <span class="sourceLineNo">337</span><a id="line.337">        }</a>
-<span class="sourceLineNo">338</span><a id="line.338">        for( int i = 0; i &lt; nvps.length; i++ ) {</a>
-<span class="sourceLineNo">339</span><a id="line.339">            final String nvp = decode( nvps[i] );</a>
-<span class="sourceLineNo">340</span><a id="line.340">            final String[] nv = nvp.split( "=" );</a>
-<span class="sourceLineNo">341</span><a id="line.341">            if( nv[0] != null &amp;&amp; !nv[0].trim().isEmpty() )</a>
-<span class="sourceLineNo">342</span><a id="line.342">            {</a>
-<span class="sourceLineNo">343</span><a id="line.343">                rval.put( nv[0], nv[1] );</a>
-<span class="sourceLineNo">344</span><a id="line.344">            }</a>
-<span class="sourceLineNo">345</span><a id="line.345">        }</a>
-<span class="sourceLineNo">346</span><a id="line.346"></a>
-<span class="sourceLineNo">347</span><a id="line.347">        return rval;</a>
-<span class="sourceLineNo">348</span><a id="line.348">    }</a>
-<span class="sourceLineNo">349</span><a id="line.349"></a>
-<span class="sourceLineNo">350</span><a id="line.350">    /**</a>
-<span class="sourceLineNo">351</span><a id="line.351">     * Encodes name-value pairs in the map into a single string, in a format</a>
-<span class="sourceLineNo">352</span><a id="line.352">     * understood by this class and JavaScript decodeURIComponent().</a>
-<span class="sourceLineNo">353</span><a id="line.353">     */</a>
-<span class="sourceLineNo">354</span><a id="line.354">    private String encodeValues(final Map&lt;String, String&gt; values )</a>
-<span class="sourceLineNo">355</span><a id="line.355">    {</a>
-<span class="sourceLineNo">356</span><a id="line.356">        final StringBuilder rval = new StringBuilder();</a>
-<span class="sourceLineNo">357</span><a id="line.357">        if( values == null || values.size() == 0 ) {</a>
-<span class="sourceLineNo">358</span><a id="line.358">            return rval.toString();</a>
-<span class="sourceLineNo">359</span><a id="line.359">        }</a>
-<span class="sourceLineNo">360</span><a id="line.360"></a>
-<span class="sourceLineNo">361</span><a id="line.361">        final Iterator&lt; Map.Entry&lt; String, String &gt; &gt; it = values.entrySet().iterator();</a>
-<span class="sourceLineNo">362</span><a id="line.362">        while( it.hasNext() ) {</a>
-<span class="sourceLineNo">363</span><a id="line.363">            final Map.Entry&lt; String, String &gt; e = it.next();</a>
-<span class="sourceLineNo">364</span><a id="line.364">            final String n = e.getKey();</a>
-<span class="sourceLineNo">365</span><a id="line.365">            final String v = e.getValue();</a>
-<span class="sourceLineNo">366</span><a id="line.366">            if( v != null ) {</a>
-<span class="sourceLineNo">367</span><a id="line.367">                final String nv = n + "=" + v;</a>
-<span class="sourceLineNo">368</span><a id="line.368">                rval.append( encode( nv ) );</a>
-<span class="sourceLineNo">369</span><a id="line.369">            }</a>
-<span class="sourceLineNo">370</span><a id="line.370">        }</a>
-<span class="sourceLineNo">371</span><a id="line.371"></a>
-<span class="sourceLineNo">372</span><a id="line.372">        return rval.toString();</a>
-<span class="sourceLineNo">373</span><a id="line.373">    }</a>
-<span class="sourceLineNo">374</span><a id="line.374"></a>
-<span class="sourceLineNo">375</span><a id="line.375">    /**</a>
-<span class="sourceLineNo">376</span><a id="line.376">     * Converts a String to an encoding understood by JavaScript</a>
-<span class="sourceLineNo">377</span><a id="line.377">     * decodeURIComponent.</a>
-<span class="sourceLineNo">378</span><a id="line.378">     */</a>
-<span class="sourceLineNo">379</span><a id="line.379">    private String encode(final String nvp )</a>
-<span class="sourceLineNo">380</span><a id="line.380">    {</a>
-<span class="sourceLineNo">381</span><a id="line.381">        String coded = "";</a>
-<span class="sourceLineNo">382</span><a id="line.382">        try</a>
-<span class="sourceLineNo">383</span><a id="line.383">        {</a>
-<span class="sourceLineNo">384</span><a id="line.384">            coded = URLEncoder.encode( nvp, StandardCharsets.UTF_8.name() );</a>
-<span class="sourceLineNo">385</span><a id="line.385">        }</a>
-<span class="sourceLineNo">386</span><a id="line.386">        catch( final UnsupportedEncodingException e )</a>
-<span class="sourceLineNo">387</span><a id="line.387">        {</a>
-<span class="sourceLineNo">388</span><a id="line.388">            /* never happens */</a>
-<span class="sourceLineNo">389</span><a id="line.389">            log.info( "Failed to encode UTF-8", e );</a>
-<span class="sourceLineNo">390</span><a id="line.390">        }</a>
-<span class="sourceLineNo">391</span><a id="line.391">        return coded.replaceAll( "\\+", "%20" );</a>
-<span class="sourceLineNo">392</span><a id="line.392">    }</a>
-<span class="sourceLineNo">393</span><a id="line.393"></a>
-<span class="sourceLineNo">394</span><a id="line.394">    /**</a>
-<span class="sourceLineNo">395</span><a id="line.395">     * Converts a cookie value (set by this class, or by a JavaScript</a>
-<span class="sourceLineNo">396</span><a id="line.396">     * encodeURIComponent call) into a plain string.</a>
-<span class="sourceLineNo">397</span><a id="line.397">     */</a>
-<span class="sourceLineNo">398</span><a id="line.398">    private String decode(final String envp )</a>
-<span class="sourceLineNo">399</span><a id="line.399">    {</a>
-<span class="sourceLineNo">400</span><a id="line.400">        final String rval;</a>
-<span class="sourceLineNo">401</span><a id="line.401">        try</a>
-<span class="sourceLineNo">402</span><a id="line.402">        {</a>
-<span class="sourceLineNo">403</span><a id="line.403">            rval = URLDecoder.decode( envp , StandardCharsets.UTF_8.name() );</a>
-<span class="sourceLineNo">404</span><a id="line.404">            return rval;</a>
-<span class="sourceLineNo">405</span><a id="line.405">        }</a>
-<span class="sourceLineNo">406</span><a id="line.406">        catch( final UnsupportedEncodingException e )</a>
-<span class="sourceLineNo">407</span><a id="line.407">        {</a>
-<span class="sourceLineNo">408</span><a id="line.408">            log.error( "Failed to decode cookie", e );</a>
-<span class="sourceLineNo">409</span><a id="line.409">            return envp;</a>
-<span class="sourceLineNo">410</span><a id="line.410">        }</a>
-<span class="sourceLineNo">411</span><a id="line.411">    }</a>
-<span class="sourceLineNo">412</span><a id="line.412"></a>
-<span class="sourceLineNo">413</span><a id="line.413">    /**</a>
-<span class="sourceLineNo">414</span><a id="line.414">     * Locates the named cookie in the request, or creates a new one if it</a>
-<span class="sourceLineNo">415</span><a id="line.415">     * doesn't exist.</a>
-<span class="sourceLineNo">416</span><a id="line.416">     */</a>
-<span class="sourceLineNo">417</span><a id="line.417">    private Cookie findCookie(final String cname )</a>
-<span class="sourceLineNo">418</span><a id="line.418">    {</a>
-<span class="sourceLineNo">419</span><a id="line.419">        final HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();</a>
-<span class="sourceLineNo">420</span><a id="line.420">        if( req != null )</a>
-<span class="sourceLineNo">421</span><a id="line.421">        {</a>
-<span class="sourceLineNo">422</span><a id="line.422">            final Cookie[] cookies = req.getCookies();</a>
-<span class="sourceLineNo">423</span><a id="line.423">            if( cookies != null )</a>
-<span class="sourceLineNo">424</span><a id="line.424">            {</a>
-<span class="sourceLineNo">425</span><a id="line.425">                for( int i = 0; i &lt; cookies.length; i++ )</a>
-<span class="sourceLineNo">426</span><a id="line.426">                {</a>
-<span class="sourceLineNo">427</span><a id="line.427">                    if( cookies[i].getName().equals( cname ) )</a>
-<span class="sourceLineNo">428</span><a id="line.428">                    {</a>
-<span class="sourceLineNo">429</span><a id="line.429">                        return cookies[i];</a>
-<span class="sourceLineNo">430</span><a id="line.430">                    }</a>
-<span class="sourceLineNo">431</span><a id="line.431">                }</a>
-<span class="sourceLineNo">432</span><a id="line.432">            }</a>
-<span class="sourceLineNo">433</span><a id="line.433">        }</a>
+<span class="sourceLineNo">338</span><a id="line.338">        for (final String value : nvps) {</a>
+<span class="sourceLineNo">339</span><a id="line.339">            final String nvp = decode(value);</a>
+<span class="sourceLineNo">340</span><a id="line.340">            final String[] nv = nvp.split("=");</a>
+<span class="sourceLineNo">341</span><a id="line.341">            if (nv[0] != null &amp;&amp; !nv[0].trim().isEmpty()) {</a>
+<span class="sourceLineNo">342</span><a id="line.342">                rval.put(nv[0], nv[1]);</a>
+<span class="sourceLineNo">343</span><a id="line.343">            }</a>
+<span class="sourceLineNo">344</span><a id="line.344">        }</a>
+<span class="sourceLineNo">345</span><a id="line.345"></a>
+<span class="sourceLineNo">346</span><a id="line.346">        return rval;</a>
+<span class="sourceLineNo">347</span><a id="line.347">    }</a>
+<span class="sourceLineNo">348</span><a id="line.348"></a>
+<span class="sourceLineNo">349</span><a id="line.349">    /**</a>
+<span class="sourceLineNo">350</span><a id="line.350">     * Encodes name-value pairs in the map into a single string, in a format</a>
+<span class="sourceLineNo">351</span><a id="line.351">     * understood by this class and JavaScript decodeURIComponent().</a>
+<span class="sourceLineNo">352</span><a id="line.352">     */</a>
+<span class="sourceLineNo">353</span><a id="line.353">    private String encodeValues(final Map&lt;String, String&gt; values )</a>
+<span class="sourceLineNo">354</span><a id="line.354">    {</a>
+<span class="sourceLineNo">355</span><a id="line.355">        final StringBuilder rval = new StringBuilder();</a>
+<span class="sourceLineNo">356</span><a id="line.356">        if( values == null || values.size() == 0 ) {</a>
+<span class="sourceLineNo">357</span><a id="line.357">            return rval.toString();</a>
+<span class="sourceLineNo">358</span><a id="line.358">        }</a>
+<span class="sourceLineNo">359</span><a id="line.359"></a>
+<span class="sourceLineNo">360</span><a id="line.360">        final Iterator&lt; Map.Entry&lt; String, String &gt; &gt; it = values.entrySet().iterator();</a>
+<span class="sourceLineNo">361</span><a id="line.361">        while( it.hasNext() ) {</a>
+<span class="sourceLineNo">362</span><a id="line.362">            final Map.Entry&lt; String, String &gt; e = it.next();</a>
+<span class="sourceLineNo">363</span><a id="line.363">            final String n = e.getKey();</a>
+<span class="sourceLineNo">364</span><a id="line.364">            final String v = e.getValue();</a>
+<span class="sourceLineNo">365</span><a id="line.365">            if( v != null ) {</a>
+<span class="sourceLineNo">366</span><a id="line.366">                final String nv = n + "=" + v;</a>
+<span class="sourceLineNo">367</span><a id="line.367">                rval.append( encode( nv ) );</a>
+<span class="sourceLineNo">368</span><a id="line.368">            }</a>
+<span class="sourceLineNo">369</span><a id="line.369">        }</a>
+<span class="sourceLineNo">370</span><a id="line.370"></a>
+<span class="sourceLineNo">371</span><a id="line.371">        return rval.toString();</a>
+<span class="sourceLineNo">372</span><a id="line.372">    }</a>
+<span class="sourceLineNo">373</span><a id="line.373"></a>
+<span class="sourceLineNo">374</span><a id="line.374">    /**</a>
+<span class="sourceLineNo">375</span><a id="line.375">     * Converts a String to an encoding understood by JavaScript</a>
+<span class="sourceLineNo">376</span><a id="line.376">     * decodeURIComponent.</a>
+<span class="sourceLineNo">377</span><a id="line.377">     */</a>
+<span class="sourceLineNo">378</span><a id="line.378">    private String encode(final String nvp )</a>
+<span class="sourceLineNo">379</span><a id="line.379">    {</a>
+<span class="sourceLineNo">380</span><a id="line.380">        String coded = "";</a>
+<span class="sourceLineNo">381</span><a id="line.381">        try</a>
+<span class="sourceLineNo">382</span><a id="line.382">        {</a>
+<span class="sourceLineNo">383</span><a id="line.383">            coded = URLEncoder.encode( nvp, StandardCharsets.UTF_8.name() );</a>
+<span class="sourceLineNo">384</span><a id="line.384">        }</a>
+<span class="sourceLineNo">385</span><a id="line.385">        catch( final UnsupportedEncodingException e )</a>
+<span class="sourceLineNo">386</span><a id="line.386">        {</a>
+<span class="sourceLineNo">387</span><a id="line.387">            /* never happens */</a>
+<span class="sourceLineNo">388</span><a id="line.388">            log.info( "Failed to encode UTF-8", e );</a>
+<span class="sourceLineNo">389</span><a id="line.389">        }</a>
+<span class="sourceLineNo">390</span><a id="line.390">        return coded.replaceAll( "\\+", "%20" );</a>
+<span class="sourceLineNo">391</span><a id="line.391">    }</a>
+<span class="sourceLineNo">392</span><a id="line.392"></a>
+<span class="sourceLineNo">393</span><a id="line.393">    /**</a>
+<span class="sourceLineNo">394</span><a id="line.394">     * Converts a cookie value (set by this class, or by a JavaScript</a>
+<span class="sourceLineNo">395</span><a id="line.395">     * encodeURIComponent call) into a plain string.</a>
+<span class="sourceLineNo">396</span><a id="line.396">     */</a>
+<span class="sourceLineNo">397</span><a id="line.397">    private String decode(final String envp )</a>
+<span class="sourceLineNo">398</span><a id="line.398">    {</a>
+<span class="sourceLineNo">399</span><a id="line.399">        final String rval;</a>
+<span class="sourceLineNo">400</span><a id="line.400">        try</a>
+<span class="sourceLineNo">401</span><a id="line.401">        {</a>
+<span class="sourceLineNo">402</span><a id="line.402">            rval = URLDecoder.decode( envp , StandardCharsets.UTF_8.name() );</a>
+<span class="sourceLineNo">403</span><a id="line.403">            return rval;</a>
+<span class="sourceLineNo">404</span><a id="line.404">        }</a>
+<span class="sourceLineNo">405</span><a id="line.405">        catch( final UnsupportedEncodingException e )</a>
+<span class="sourceLineNo">406</span><a id="line.406">        {</a>
+<span class="sourceLineNo">407</span><a id="line.407">            log.error( "Failed to decode cookie", e );</a>
+<span class="sourceLineNo">408</span><a id="line.408">            return envp;</a>
+<span class="sourceLineNo">409</span><a id="line.409">        }</a>
+<span class="sourceLineNo">410</span><a id="line.410">    }</a>
+<span class="sourceLineNo">411</span><a id="line.411"></a>
+<span class="sourceLineNo">412</span><a id="line.412">    /**</a>
+<span class="sourceLineNo">413</span><a id="line.413">     * Locates the named cookie in the request, or creates a new one if it</a>
+<span class="sourceLineNo">414</span><a id="line.414">     * doesn't exist.</a>
+<span class="sourceLineNo">415</span><a id="line.415">     */</a>
+<span class="sourceLineNo">416</span><a id="line.416">    private Cookie findCookie(final String cname )</a>
+<span class="sourceLineNo">417</span><a id="line.417">    {</a>
+<span class="sourceLineNo">418</span><a id="line.418">        final HttpServletRequest req = (HttpServletRequest)pageContext.getRequest();</a>
+<span class="sourceLineNo">419</span><a id="line.419">        if( req != null )</a>
+<span class="sourceLineNo">420</span><a id="line.420">        {</a>
+<span class="sourceLineNo">421</span><a id="line.421">            final Cookie[] cookies = req.getCookies();</a>
+<span class="sourceLineNo">422</span><a id="line.422">            if( cookies != null )</a>
+<span class="sourceLineNo">423</span><a id="line.423">            {</a>
+<span class="sourceLineNo">424</span><a id="line.424">                for (final Cookie cookie : cookies) {</a>
+<span class="sourceLineNo">425</span><a id="line.425">                    if (cookie.getName().equals(cname)) {</a>
+<span class="sourceLineNo">426</span><a id="line.426">                        return cookie;</a>
+<span class="sourceLineNo">427</span><a id="line.427">                    }</a>
+<span class="sourceLineNo">428</span><a id="line.428">                }</a>
+<span class="sourceLineNo">429</span><a id="line.429">            }</a>
+<span class="sourceLineNo">430</span><a id="line.430">        }</a>
+<span class="sourceLineNo">431</span><a id="line.431"></a>
+<span class="sourceLineNo">432</span><a id="line.432">        return new Cookie( cname, null );</a>
+<span class="sourceLineNo">433</span><a id="line.433">    }</a>
 <span class="sourceLineNo">434</span><a id="line.434"></a>
-<span class="sourceLineNo">435</span><a id="line.435">        return new Cookie( cname, null );</a>
-<span class="sourceLineNo">436</span><a id="line.436">    }</a>
-<span class="sourceLineNo">437</span><a id="line.437"></a>
-<span class="sourceLineNo">438</span><a id="line.438">}</a>
+<span class="sourceLineNo">435</span><a id="line.435">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/InsertDiffTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/InsertDiffTag.html
index e257ed07ff..7c3c5272ba 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/InsertDiffTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/InsertDiffTag.html
@@ -106,7 +106,7 @@
 <span class="sourceLineNo">097</span><a id="line.97"></a>
 <span class="sourceLineNo">098</span><a id="line.98">        if( ctx.getPage() != null ) {</a>
 <span class="sourceLineNo">099</span><a id="line.99">            final JspWriter out = pageContext.getOut();</a>
-<span class="sourceLineNo">100</span><a id="line.100">            final String diff = engine.getManager( DifferenceManager.class ).getDiff( ctx, vernew.intValue(), verold.intValue() );</a>
+<span class="sourceLineNo">100</span><a id="line.100">            final String diff = engine.getManager( DifferenceManager.class ).getDiff( ctx, vernew, verold);</a>
 <span class="sourceLineNo">101</span><a id="line.101"></a>
 <span class="sourceLineNo">102</span><a id="line.102">            if( diff.isEmpty() ) {</a>
 <span class="sourceLineNo">103</span><a id="line.103">                return EVAL_BODY_INCLUDE;</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/MessagesTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/MessagesTag.html
index 934bbf0f5a..b4623c8d1f 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/MessagesTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/MessagesTag.html
@@ -35,13 +35,13 @@
 <span class="sourceLineNo">026</span><a id="line.26">/**</a>
 <span class="sourceLineNo">027</span><a id="line.27"> * Returns or clears the current messages associated with the user's wiki</a>
 <span class="sourceLineNo">028</span><a id="line.28"> * session. This tag accepts four attributes: &lt;ul&gt; &lt;li&gt;&lt;code&gt;action&lt;/code&gt; -</a>
-<span class="sourceLineNo">029</span><a id="line.29"> * if "clear", the messsages will be cleared. Otherwise, this tag will always</a>
+<span class="sourceLineNo">029</span><a id="line.29"> * if "clear", the messages will be cleared. Otherwise, this tag will always</a>
 <span class="sourceLineNo">030</span><a id="line.30"> * print the set of current messages as either a single &amp;lt;p&amp;gt; tag (if there</a>
 <span class="sourceLineNo">031</span><a id="line.31"> * is only one message) or a bulleted list (if there is more than one).&lt;/li&gt;</a>
 <span class="sourceLineNo">032</span><a id="line.32"> * &lt;li&gt;&lt;code&gt;prefix&lt;/code&gt; - the string to prepend to the list of errors, if</a>
 <span class="sourceLineNo">033</span><a id="line.33"> * there are any; default is empty string&lt;/li&gt; &lt;li&gt;&lt;code&gt;topic&lt;/code&gt; - a</a>
 <span class="sourceLineNo">034</span><a id="line.34"> * collection for messages, for example those associated with a particular web</a>
-<span class="sourceLineNo">035</span><a id="line.35"> * form. If not suppled, defaults to a generic (non-specific) collection&lt;/li&gt;</a>
+<span class="sourceLineNo">035</span><a id="line.35"> * form. If not supplied, defaults to a generic (non-specific) collection&lt;/li&gt;</a>
 <span class="sourceLineNo">036</span><a id="line.36"> * &lt;li&gt;&lt;code&gt;div&lt;/code&gt; - the &lt;code&gt;div&lt;/code&gt; class to wrap the</a>
 <span class="sourceLineNo">037</span><a id="line.37"> * messages in; if not supplied, &lt;code&gt;information&lt;/code&gt; is assumed&lt;/li&gt;&lt;/ul&gt;</a>
 <span class="sourceLineNo">038</span><a id="line.38"> * @since 2.3.54</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/ParamTag.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/ParamTag.html
index 8ecbbbc00c..57867c10cc 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/ParamTag.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/tags/ParamTag.html
@@ -83,7 +83,7 @@
 <span class="sourceLineNo">074</span><a id="line.74">    @Override</a>
 <span class="sourceLineNo">075</span><a id="line.75">    public int doEndTag()</a>
 <span class="sourceLineNo">076</span><a id="line.76">    {</a>
-<span class="sourceLineNo">077</span><a id="line.77">        Tag t = null;</a>
+<span class="sourceLineNo">077</span><a id="line.77">        Tag t;</a>
 <span class="sourceLineNo">078</span><a id="line.78">        do</a>
 <span class="sourceLineNo">079</span><a id="line.79">        {</a>
 <span class="sourceLineNo">080</span><a id="line.80">            t = getParent();</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/ui/admin/SimpleAdminBean.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/ui/admin/SimpleAdminBean.html
index 607a800512..25f75a86d9 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/ui/admin/SimpleAdminBean.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/ui/admin/SimpleAdminBean.html
@@ -79,25 +79,25 @@
 <span class="sourceLineNo">070</span><a id="line.70">        final MBeanAttributeInfo[] attributes = info.getAttributes();</a>
 <span class="sourceLineNo">071</span><a id="line.71">        final StringBuilder sb = new StringBuilder();</a>
 <span class="sourceLineNo">072</span><a id="line.72"></a>
-<span class="sourceLineNo">073</span><a id="line.73">        for( int i = 0; i &lt; attributes.length; i++ ) {</a>
-<span class="sourceLineNo">074</span><a id="line.74">            sb.append( "&lt;div class='block'&gt;\n" );</a>
+<span class="sourceLineNo">073</span><a id="line.73">        for (final MBeanAttributeInfo attribute : attributes) {</a>
+<span class="sourceLineNo">074</span><a id="line.74">            sb.append("&lt;div class='block'&gt;\n");</a>
 <span class="sourceLineNo">075</span><a id="line.75"></a>
-<span class="sourceLineNo">076</span><a id="line.76">            sb.append( "&lt;label&gt;" ).append( StringUtils.capitalize( attributes[i].getName() ) ).append( "&lt;/label&gt;\n" );</a>
+<span class="sourceLineNo">076</span><a id="line.76">            sb.append("&lt;label&gt;").append(StringUtils.capitalize(attribute.getName())).append("&lt;/label&gt;\n");</a>
 <span class="sourceLineNo">077</span><a id="line.77"></a>
 <span class="sourceLineNo">078</span><a id="line.78">            try {</a>
-<span class="sourceLineNo">079</span><a id="line.79">                final Object value = getAttribute( attributes[ i ].getName() );</a>
-<span class="sourceLineNo">080</span><a id="line.80">                if( attributes[ i ].isWritable() ) {</a>
-<span class="sourceLineNo">081</span><a id="line.81">                    sb.append( "&lt;input type='text' name='question' size='30' value='" ).append( value ).append( "' /&gt;\n" );</a>
+<span class="sourceLineNo">079</span><a id="line.79">                final Object value = getAttribute(attribute.getName());</a>
+<span class="sourceLineNo">080</span><a id="line.80">                if (attribute.isWritable()) {</a>
+<span class="sourceLineNo">081</span><a id="line.81">                    sb.append("&lt;input type='text' name='question' size='30' value='").append(value).append("' /&gt;\n");</a>
 <span class="sourceLineNo">082</span><a id="line.82">                } else {</a>
-<span class="sourceLineNo">083</span><a id="line.83">                    sb.append( "&lt;input type='text' class='readonly' readonly='true' size='30' value='" ).append( value ).append( "' /&gt;\n" );</a>
+<span class="sourceLineNo">083</span><a id="line.83">                    sb.append("&lt;input type='text' class='readonly' readonly='true' size='30' value='").append(value).append("' /&gt;\n");</a>
 <span class="sourceLineNo">084</span><a id="line.84">                }</a>
-<span class="sourceLineNo">085</span><a id="line.85">            } catch( final Exception e ) {</a>
-<span class="sourceLineNo">086</span><a id="line.86">                sb.append( "Exception: " ).append( e.getMessage() );</a>
+<span class="sourceLineNo">085</span><a id="line.85">            } catch (final Exception e) {</a>
+<span class="sourceLineNo">086</span><a id="line.86">                sb.append("Exception: ").append(e.getMessage());</a>
 <span class="sourceLineNo">087</span><a id="line.87">            }</a>
 <span class="sourceLineNo">088</span><a id="line.88"></a>
-<span class="sourceLineNo">089</span><a id="line.89">            sb.append( "&lt;div class='description'&gt;" ).append( attributes[i].getDescription() ).append( "&lt;/div&gt;\n" );</a>
+<span class="sourceLineNo">089</span><a id="line.89">            sb.append("&lt;div class='description'&gt;").append(attribute.getDescription()).append("&lt;/div&gt;\n");</a>
 <span class="sourceLineNo">090</span><a id="line.90"></a>
-<span class="sourceLineNo">091</span><a id="line.91">            sb.append( "&lt;/div&gt;\n" );</a>
+<span class="sourceLineNo">091</span><a id="line.91">            sb.append("&lt;/div&gt;\n");</a>
 <span class="sourceLineNo">092</span><a id="line.92">        }</a>
 <span class="sourceLineNo">093</span><a id="line.93">        return sb.toString();</a>
 <span class="sourceLineNo">094</span><a id="line.94">    }</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CommentedProperties.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CommentedProperties.html
index b9e08e0e13..4c0e9ea888 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CommentedProperties.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CommentedProperties.html
@@ -137,121 +137,120 @@
 <span class="sourceLineNo">128</span><a id="line.128">    public synchronized void putAll(final Map&lt; ? , ? &gt; arg0 )</a>
 <span class="sourceLineNo">129</span><a id="line.129">    {</a>
 <span class="sourceLineNo">130</span><a id="line.130">        // Shove all of the entries into the property string</a>
-<span class="sourceLineNo">131</span><a id="line.131">        for(final Iterator&lt; ? &gt; it = arg0.entrySet().iterator(); it.hasNext(); )</a>
-<span class="sourceLineNo">132</span><a id="line.132">        {</a>
-<span class="sourceLineNo">133</span><a id="line.133">            @SuppressWarnings("unchecked") final Entry&lt; Object, Object &gt; entry = ( Entry&lt; Object, Object &gt; )it.next();</a>
-<span class="sourceLineNo">134</span><a id="line.134">            writeProperty( entry.getKey(), entry.getValue() );</a>
-<span class="sourceLineNo">135</span><a id="line.135">        }</a>
-<span class="sourceLineNo">136</span><a id="line.136"></a>
-<span class="sourceLineNo">137</span><a id="line.137">        // Call the superclass method</a>
-<span class="sourceLineNo">138</span><a id="line.138">        super.putAll(arg0);</a>
-<span class="sourceLineNo">139</span><a id="line.139">    }</a>
-<span class="sourceLineNo">140</span><a id="line.140"></a>
-<span class="sourceLineNo">141</span><a id="line.141">    /**</a>
-<span class="sourceLineNo">142</span><a id="line.142">     * {@inheritDoc}</a>
-<span class="sourceLineNo">143</span><a id="line.143">     */</a>
-<span class="sourceLineNo">144</span><a id="line.144">    @Override</a>
-<span class="sourceLineNo">145</span><a id="line.145">    public synchronized Object remove(final Object key )</a>
-<span class="sourceLineNo">146</span><a id="line.146">    {</a>
-<span class="sourceLineNo">147</span><a id="line.147">        // Remove from the property string</a>
-<span class="sourceLineNo">148</span><a id="line.148">        deleteProperty( key );</a>
-<span class="sourceLineNo">149</span><a id="line.149"></a>
-<span class="sourceLineNo">150</span><a id="line.150">        // Call the superclass method</a>
-<span class="sourceLineNo">151</span><a id="line.151">        return super.remove(key);</a>
-<span class="sourceLineNo">152</span><a id="line.152">    }</a>
-<span class="sourceLineNo">153</span><a id="line.153"></a>
-<span class="sourceLineNo">154</span><a id="line.154">    /**</a>
-<span class="sourceLineNo">155</span><a id="line.155">     * {@inheritDoc}</a>
-<span class="sourceLineNo">156</span><a id="line.156">     */</a>
-<span class="sourceLineNo">157</span><a id="line.157">    @Override</a>
-<span class="sourceLineNo">158</span><a id="line.158">    public synchronized String toString()</a>
-<span class="sourceLineNo">159</span><a id="line.159">    {</a>
-<span class="sourceLineNo">160</span><a id="line.160">        return m_propertyString;</a>
-<span class="sourceLineNo">161</span><a id="line.161">    }</a>
-<span class="sourceLineNo">162</span><a id="line.162"></a>
-<span class="sourceLineNo">163</span><a id="line.163">    private void deleteProperty(final Object arg0 )</a>
-<span class="sourceLineNo">164</span><a id="line.164">    {</a>
-<span class="sourceLineNo">165</span><a id="line.165">        // Get key and value</a>
-<span class="sourceLineNo">166</span><a id="line.166">        if ( arg0 == null )</a>
-<span class="sourceLineNo">167</span><a id="line.167">        {</a>
-<span class="sourceLineNo">168</span><a id="line.168">            throw new IllegalArgumentException( "Key cannot be null." );</a>
-<span class="sourceLineNo">169</span><a id="line.169">        }</a>
-<span class="sourceLineNo">170</span><a id="line.170">        final String key = arg0.toString();</a>
-<span class="sourceLineNo">171</span><a id="line.171"></a>
-<span class="sourceLineNo">172</span><a id="line.172">        // Iterate through each line and replace anything matching our key</a>
-<span class="sourceLineNo">173</span><a id="line.173">        int idx = 0;</a>
-<span class="sourceLineNo">174</span><a id="line.174">        while( ( idx &lt; m_propertyString.length() ) &amp;&amp; ( ( idx = m_propertyString.indexOf( key, idx ) ) != -1 ) )</a>
-<span class="sourceLineNo">175</span><a id="line.175">        {</a>
-<span class="sourceLineNo">176</span><a id="line.176">            final int prevret = m_propertyString.lastIndexOf( "\n", idx );</a>
-<span class="sourceLineNo">177</span><a id="line.177">            if ( prevret != -1 )</a>
-<span class="sourceLineNo">178</span><a id="line.178">            {</a>
-<span class="sourceLineNo">179</span><a id="line.179">                // Commented lines are skipped</a>
-<span class="sourceLineNo">180</span><a id="line.180">                if ( m_propertyString.charAt( prevret + 1 ) == '#' )</a>
-<span class="sourceLineNo">181</span><a id="line.181">                {</a>
-<span class="sourceLineNo">182</span><a id="line.182">                    idx += key.length();</a>
-<span class="sourceLineNo">183</span><a id="line.183">                    continue;</a>
-<span class="sourceLineNo">184</span><a id="line.184">                }</a>
-<span class="sourceLineNo">185</span><a id="line.185">            }</a>
-<span class="sourceLineNo">186</span><a id="line.186"></a>
-<span class="sourceLineNo">187</span><a id="line.187">            // If "=" present, delete the entire line</a>
-<span class="sourceLineNo">188</span><a id="line.188">            final int eqsign = m_propertyString.indexOf( "=", idx );</a>
-<span class="sourceLineNo">189</span><a id="line.189">            if ( eqsign != -1 )</a>
-<span class="sourceLineNo">190</span><a id="line.190">            {</a>
-<span class="sourceLineNo">191</span><a id="line.191">                final int ret = m_propertyString.indexOf( "\n", eqsign );</a>
-<span class="sourceLineNo">192</span><a id="line.192">                m_propertyString = TextUtil.replaceString( m_propertyString, prevret, ret, "" );</a>
-<span class="sourceLineNo">193</span><a id="line.193">                return;</a>
-<span class="sourceLineNo">194</span><a id="line.194">            }</a>
-<span class="sourceLineNo">195</span><a id="line.195">        }</a>
-<span class="sourceLineNo">196</span><a id="line.196">    }</a>
-<span class="sourceLineNo">197</span><a id="line.197"></a>
-<span class="sourceLineNo">198</span><a id="line.198">    private void writeProperty(final Object arg0, Object arg1 )</a>
-<span class="sourceLineNo">199</span><a id="line.199">    {</a>
-<span class="sourceLineNo">200</span><a id="line.200">        // Get key and value</a>
-<span class="sourceLineNo">201</span><a id="line.201">        if ( arg0 == null )</a>
-<span class="sourceLineNo">202</span><a id="line.202">        {</a>
-<span class="sourceLineNo">203</span><a id="line.203">            throw new IllegalArgumentException( "Key cannot be null." );</a>
-<span class="sourceLineNo">204</span><a id="line.204">        }</a>
-<span class="sourceLineNo">205</span><a id="line.205">        if ( arg1 == null )</a>
-<span class="sourceLineNo">206</span><a id="line.206">        {</a>
-<span class="sourceLineNo">207</span><a id="line.207">            arg1 = "";</a>
-<span class="sourceLineNo">208</span><a id="line.208">        }</a>
-<span class="sourceLineNo">209</span><a id="line.209">        final String key = arg0.toString();</a>
-<span class="sourceLineNo">210</span><a id="line.210">        final String value = TextUtil.native2Ascii( arg1.toString() );</a>
-<span class="sourceLineNo">211</span><a id="line.211"></a>
-<span class="sourceLineNo">212</span><a id="line.212">        // Iterate through each line and replace anything matching our key</a>
-<span class="sourceLineNo">213</span><a id="line.213">        int idx = 0;</a>
-<span class="sourceLineNo">214</span><a id="line.214">        while( ( idx &lt; m_propertyString.length() ) &amp;&amp; ( ( idx = m_propertyString.indexOf( key, idx ) ) != -1 ) )</a>
-<span class="sourceLineNo">215</span><a id="line.215">        {</a>
-<span class="sourceLineNo">216</span><a id="line.216">            final int prevret = m_propertyString.lastIndexOf( "\n", idx );</a>
-<span class="sourceLineNo">217</span><a id="line.217">            if ( prevret != -1 )</a>
-<span class="sourceLineNo">218</span><a id="line.218">            {</a>
-<span class="sourceLineNo">219</span><a id="line.219">                // Commented lines are skipped</a>
-<span class="sourceLineNo">220</span><a id="line.220">                if ( m_propertyString.charAt( prevret + 1 ) == '#' )</a>
-<span class="sourceLineNo">221</span><a id="line.221">                {</a>
-<span class="sourceLineNo">222</span><a id="line.222">                    idx += key.length();</a>
-<span class="sourceLineNo">223</span><a id="line.223">                    continue;</a>
-<span class="sourceLineNo">224</span><a id="line.224">                }</a>
-<span class="sourceLineNo">225</span><a id="line.225">            }</a>
-<span class="sourceLineNo">226</span><a id="line.226"></a>
-<span class="sourceLineNo">227</span><a id="line.227">            // If "=" present, replace everything in line after it</a>
-<span class="sourceLineNo">228</span><a id="line.228">            final int eqsign = m_propertyString.indexOf( "=", idx );</a>
-<span class="sourceLineNo">229</span><a id="line.229">            if ( eqsign != -1 )</a>
-<span class="sourceLineNo">230</span><a id="line.230">            {</a>
-<span class="sourceLineNo">231</span><a id="line.231">                int ret = m_propertyString.indexOf( "\n", eqsign );</a>
-<span class="sourceLineNo">232</span><a id="line.232">                if ( ret == -1 )</a>
-<span class="sourceLineNo">233</span><a id="line.233">                {</a>
-<span class="sourceLineNo">234</span><a id="line.234">                    ret = m_propertyString.length();</a>
-<span class="sourceLineNo">235</span><a id="line.235">                }</a>
-<span class="sourceLineNo">236</span><a id="line.236">                m_propertyString = TextUtil.replaceString( m_propertyString, eqsign + 1, ret, value );</a>
-<span class="sourceLineNo">237</span><a id="line.237">                return;</a>
-<span class="sourceLineNo">238</span><a id="line.238">            }</a>
-<span class="sourceLineNo">239</span><a id="line.239">        }</a>
-<span class="sourceLineNo">240</span><a id="line.240"></a>
-<span class="sourceLineNo">241</span><a id="line.241">        // If it was not found, we'll add it to the end.</a>
-<span class="sourceLineNo">242</span><a id="line.242">        m_propertyString += "\n" + key + " = " + value + "\n";</a>
-<span class="sourceLineNo">243</span><a id="line.243">    }</a>
-<span class="sourceLineNo">244</span><a id="line.244"></a>
-<span class="sourceLineNo">245</span><a id="line.245">}</a>
+<span class="sourceLineNo">131</span><a id="line.131">        for (final Entry&lt;?, ?&gt; value : arg0.entrySet()) {</a>
+<span class="sourceLineNo">132</span><a id="line.132">            @SuppressWarnings("unchecked") final Entry&lt;Object, Object&gt; entry = (Entry&lt;Object, Object&gt;) value;</a>
+<span class="sourceLineNo">133</span><a id="line.133">            writeProperty(entry.getKey(), entry.getValue());</a>
+<span class="sourceLineNo">134</span><a id="line.134">        }</a>
+<span class="sourceLineNo">135</span><a id="line.135"></a>
+<span class="sourceLineNo">136</span><a id="line.136">        // Call the superclass method</a>
+<span class="sourceLineNo">137</span><a id="line.137">        super.putAll(arg0);</a>
+<span class="sourceLineNo">138</span><a id="line.138">    }</a>
+<span class="sourceLineNo">139</span><a id="line.139"></a>
+<span class="sourceLineNo">140</span><a id="line.140">    /**</a>
+<span class="sourceLineNo">141</span><a id="line.141">     * {@inheritDoc}</a>
+<span class="sourceLineNo">142</span><a id="line.142">     */</a>
+<span class="sourceLineNo">143</span><a id="line.143">    @Override</a>
+<span class="sourceLineNo">144</span><a id="line.144">    public synchronized Object remove(final Object key )</a>
+<span class="sourceLineNo">145</span><a id="line.145">    {</a>
+<span class="sourceLineNo">146</span><a id="line.146">        // Remove from the property string</a>
+<span class="sourceLineNo">147</span><a id="line.147">        deleteProperty( key );</a>
+<span class="sourceLineNo">148</span><a id="line.148"></a>
+<span class="sourceLineNo">149</span><a id="line.149">        // Call the superclass method</a>
+<span class="sourceLineNo">150</span><a id="line.150">        return super.remove(key);</a>
+<span class="sourceLineNo">151</span><a id="line.151">    }</a>
+<span class="sourceLineNo">152</span><a id="line.152"></a>
+<span class="sourceLineNo">153</span><a id="line.153">    /**</a>
+<span class="sourceLineNo">154</span><a id="line.154">     * {@inheritDoc}</a>
+<span class="sourceLineNo">155</span><a id="line.155">     */</a>
+<span class="sourceLineNo">156</span><a id="line.156">    @Override</a>
+<span class="sourceLineNo">157</span><a id="line.157">    public synchronized String toString()</a>
+<span class="sourceLineNo">158</span><a id="line.158">    {</a>
+<span class="sourceLineNo">159</span><a id="line.159">        return m_propertyString;</a>
+<span class="sourceLineNo">160</span><a id="line.160">    }</a>
+<span class="sourceLineNo">161</span><a id="line.161"></a>
+<span class="sourceLineNo">162</span><a id="line.162">    private void deleteProperty(final Object arg0 )</a>
+<span class="sourceLineNo">163</span><a id="line.163">    {</a>
+<span class="sourceLineNo">164</span><a id="line.164">        // Get key and value</a>
+<span class="sourceLineNo">165</span><a id="line.165">        if ( arg0 == null )</a>
+<span class="sourceLineNo">166</span><a id="line.166">        {</a>
+<span class="sourceLineNo">167</span><a id="line.167">            throw new IllegalArgumentException( "Key cannot be null." );</a>
+<span class="sourceLineNo">168</span><a id="line.168">        }</a>
+<span class="sourceLineNo">169</span><a id="line.169">        final String key = arg0.toString();</a>
+<span class="sourceLineNo">170</span><a id="line.170"></a>
+<span class="sourceLineNo">171</span><a id="line.171">        // Iterate through each line and replace anything matching our key</a>
+<span class="sourceLineNo">172</span><a id="line.172">        int idx = 0;</a>
+<span class="sourceLineNo">173</span><a id="line.173">        while( ( idx &lt; m_propertyString.length() ) &amp;&amp; ( ( idx = m_propertyString.indexOf( key, idx ) ) != -1 ) )</a>
+<span class="sourceLineNo">174</span><a id="line.174">        {</a>
+<span class="sourceLineNo">175</span><a id="line.175">            final int prevret = m_propertyString.lastIndexOf( "\n", idx );</a>
+<span class="sourceLineNo">176</span><a id="line.176">            if ( prevret != -1 )</a>
+<span class="sourceLineNo">177</span><a id="line.177">            {</a>
+<span class="sourceLineNo">178</span><a id="line.178">                // Commented lines are skipped</a>
+<span class="sourceLineNo">179</span><a id="line.179">                if ( m_propertyString.charAt( prevret + 1 ) == '#' )</a>
+<span class="sourceLineNo">180</span><a id="line.180">                {</a>
+<span class="sourceLineNo">181</span><a id="line.181">                    idx += key.length();</a>
+<span class="sourceLineNo">182</span><a id="line.182">                    continue;</a>
+<span class="sourceLineNo">183</span><a id="line.183">                }</a>
+<span class="sourceLineNo">184</span><a id="line.184">            }</a>
+<span class="sourceLineNo">185</span><a id="line.185"></a>
+<span class="sourceLineNo">186</span><a id="line.186">            // If "=" present, delete the entire line</a>
+<span class="sourceLineNo">187</span><a id="line.187">            final int eqsign = m_propertyString.indexOf( "=", idx );</a>
+<span class="sourceLineNo">188</span><a id="line.188">            if ( eqsign != -1 )</a>
+<span class="sourceLineNo">189</span><a id="line.189">            {</a>
+<span class="sourceLineNo">190</span><a id="line.190">                final int ret = m_propertyString.indexOf( "\n", eqsign );</a>
+<span class="sourceLineNo">191</span><a id="line.191">                m_propertyString = TextUtil.replaceString( m_propertyString, prevret, ret, "" );</a>
+<span class="sourceLineNo">192</span><a id="line.192">                return;</a>
+<span class="sourceLineNo">193</span><a id="line.193">            }</a>
+<span class="sourceLineNo">194</span><a id="line.194">        }</a>
+<span class="sourceLineNo">195</span><a id="line.195">    }</a>
+<span class="sourceLineNo">196</span><a id="line.196"></a>
+<span class="sourceLineNo">197</span><a id="line.197">    private void writeProperty(final Object arg0, Object arg1 )</a>
+<span class="sourceLineNo">198</span><a id="line.198">    {</a>
+<span class="sourceLineNo">199</span><a id="line.199">        // Get key and value</a>
+<span class="sourceLineNo">200</span><a id="line.200">        if ( arg0 == null )</a>
+<span class="sourceLineNo">201</span><a id="line.201">        {</a>
+<span class="sourceLineNo">202</span><a id="line.202">            throw new IllegalArgumentException( "Key cannot be null." );</a>
+<span class="sourceLineNo">203</span><a id="line.203">        }</a>
+<span class="sourceLineNo">204</span><a id="line.204">        if ( arg1 == null )</a>
+<span class="sourceLineNo">205</span><a id="line.205">        {</a>
+<span class="sourceLineNo">206</span><a id="line.206">            arg1 = "";</a>
+<span class="sourceLineNo">207</span><a id="line.207">        }</a>
+<span class="sourceLineNo">208</span><a id="line.208">        final String key = arg0.toString();</a>
+<span class="sourceLineNo">209</span><a id="line.209">        final String value = TextUtil.native2Ascii( arg1.toString() );</a>
+<span class="sourceLineNo">210</span><a id="line.210"></a>
+<span class="sourceLineNo">211</span><a id="line.211">        // Iterate through each line and replace anything matching our key</a>
+<span class="sourceLineNo">212</span><a id="line.212">        int idx = 0;</a>
+<span class="sourceLineNo">213</span><a id="line.213">        while( ( idx &lt; m_propertyString.length() ) &amp;&amp; ( ( idx = m_propertyString.indexOf( key, idx ) ) != -1 ) )</a>
+<span class="sourceLineNo">214</span><a id="line.214">        {</a>
+<span class="sourceLineNo">215</span><a id="line.215">            final int prevret = m_propertyString.lastIndexOf( "\n", idx );</a>
+<span class="sourceLineNo">216</span><a id="line.216">            if ( prevret != -1 )</a>
+<span class="sourceLineNo">217</span><a id="line.217">            {</a>
+<span class="sourceLineNo">218</span><a id="line.218">                // Commented lines are skipped</a>
+<span class="sourceLineNo">219</span><a id="line.219">                if ( m_propertyString.charAt( prevret + 1 ) == '#' )</a>
+<span class="sourceLineNo">220</span><a id="line.220">                {</a>
+<span class="sourceLineNo">221</span><a id="line.221">                    idx += key.length();</a>
+<span class="sourceLineNo">222</span><a id="line.222">                    continue;</a>
+<span class="sourceLineNo">223</span><a id="line.223">                }</a>
+<span class="sourceLineNo">224</span><a id="line.224">            }</a>
+<span class="sourceLineNo">225</span><a id="line.225"></a>
+<span class="sourceLineNo">226</span><a id="line.226">            // If "=" present, replace everything in line after it</a>
+<span class="sourceLineNo">227</span><a id="line.227">            final int eqsign = m_propertyString.indexOf( "=", idx );</a>
+<span class="sourceLineNo">228</span><a id="line.228">            if ( eqsign != -1 )</a>
+<span class="sourceLineNo">229</span><a id="line.229">            {</a>
+<span class="sourceLineNo">230</span><a id="line.230">                int ret = m_propertyString.indexOf( "\n", eqsign );</a>
+<span class="sourceLineNo">231</span><a id="line.231">                if ( ret == -1 )</a>
+<span class="sourceLineNo">232</span><a id="line.232">                {</a>
+<span class="sourceLineNo">233</span><a id="line.233">                    ret = m_propertyString.length();</a>
+<span class="sourceLineNo">234</span><a id="line.234">                }</a>
+<span class="sourceLineNo">235</span><a id="line.235">                m_propertyString = TextUtil.replaceString( m_propertyString, eqsign + 1, ret, value );</a>
+<span class="sourceLineNo">236</span><a id="line.236">                return;</a>
+<span class="sourceLineNo">237</span><a id="line.237">            }</a>
+<span class="sourceLineNo">238</span><a id="line.238">        }</a>
+<span class="sourceLineNo">239</span><a id="line.239"></a>
+<span class="sourceLineNo">240</span><a id="line.240">        // If it was not found, we'll add it to the end.</a>
+<span class="sourceLineNo">241</span><a id="line.241">        m_propertyString += "\n" + key + " = " + value + "\n";</a>
+<span class="sourceLineNo">242</span><a id="line.242">    }</a>
+<span class="sourceLineNo">243</span><a id="line.243"></a>
+<span class="sourceLineNo">244</span><a id="line.244">}</a>
 
 
 
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CryptoUtil.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CryptoUtil.html
index ff5cd4df93..f58cebc228 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CryptoUtil.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/CryptoUtil.html
@@ -186,7 +186,7 @@
 <span class="sourceLineNo">177</span><a id="line.177">        //The term SSHA is used as a password prefix for backwards compatibility, but we use SHA-1 when fetching an instance</a>
 <span class="sourceLineNo">178</span><a id="line.178">        //of MessageDigest, as it is the guaranteed option. We also need to remove curly braces surrounding the string for</a>
 <span class="sourceLineNo">179</span><a id="line.179">        //backwards compatibility.</a>
-<span class="sourceLineNo">180</span><a id="line.180">        String algorithmToUse = algorithm.equals(SSHA) ? SHA1 : algorithm;</a>
+<span class="sourceLineNo">180</span><a id="line.180">        final String algorithmToUse = algorithm.equals(SSHA) ? SHA1 : algorithm;</a>
 <span class="sourceLineNo">181</span><a id="line.181">        final MessageDigest digest = MessageDigest.getInstance( algorithmToUse.substring( 1, algorithmToUse.length() -1 ) );</a>
 <span class="sourceLineNo">182</span><a id="line.182">        digest.update( password );</a>
 <span class="sourceLineNo">183</span><a id="line.183">        final byte[] hash = digest.digest( salt );</a>
@@ -214,7 +214,7 @@
 <span class="sourceLineNo">205</span><a id="line.205">        {</a>
 <span class="sourceLineNo">206</span><a id="line.206">            throw new IllegalArgumentException( "Hash not prefixed by expected algorithm; is it really a salted hash?" );</a>
 <span class="sourceLineNo">207</span><a id="line.207">        }</a>
-<span class="sourceLineNo">208</span><a id="line.208">        String algorithm = entry.startsWith( SSHA ) ? SSHA : SHA256;</a>
+<span class="sourceLineNo">208</span><a id="line.208">        final String algorithm = entry.startsWith( SSHA ) ? SSHA : SHA256;</a>
 <span class="sourceLineNo">209</span><a id="line.209"></a>
 <span class="sourceLineNo">210</span><a id="line.210">        final byte[] challenge = Base64.getDecoder().decode( entry.substring( algorithm.length() )</a>
 <span class="sourceLineNo">211</span><a id="line.211">                .getBytes( StandardCharsets.UTF_8 ) );</a>
@@ -227,7 +227,7 @@
 <span class="sourceLineNo">218</span><a id="line.218">        // The term SSHA is used as a password prefix for backwards compatibility, but we use SHA-1 when fetching an instance</a>
 <span class="sourceLineNo">219</span><a id="line.219">        // of MessageDigest, as it is the guaranteed option. We also need to remove curly braces surrounding the string for</a>
 <span class="sourceLineNo">220</span><a id="line.220">        // backwards compatibility.</a>
-<span class="sourceLineNo">221</span><a id="line.221">        String algorithmToUse = algorithm.equals(SSHA) ? SHA1 : algorithm;</a>
+<span class="sourceLineNo">221</span><a id="line.221">        final String algorithmToUse = algorithm.equals(SSHA) ? SHA1 : algorithm;</a>
 <span class="sourceLineNo">222</span><a id="line.222">        final MessageDigest digest = MessageDigest.getInstance( algorithmToUse.substring( 1, algorithmToUse.length() -1 ) );</a>
 <span class="sourceLineNo">223</span><a id="line.223">        digest.update( password );</a>
 <span class="sourceLineNo">224</span><a id="line.224">        final byte[] hash = digest.digest( salt );</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/FormUtil.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/FormUtil.html
index 9ae6a61621..9ab45ed916 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/FormUtil.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/FormUtil.html
@@ -106,7 +106,7 @@
 <span class="sourceLineNo">097</span><a id="line.97">            keyPrefix.isEmpty() )</a>
 <span class="sourceLineNo">098</span><a id="line.98">            return rval;</a>
 <span class="sourceLineNo">099</span><a id="line.99"></a>
-<span class="sourceLineNo">100</span><a id="line.100">        String fullPrefix = null;</a>
+<span class="sourceLineNo">100</span><a id="line.100">        String fullPrefix;</a>
 <span class="sourceLineNo">101</span><a id="line.101">        if( keyPrefix.charAt( keyPrefix.length() - 1 ) == '.' )</a>
 <span class="sourceLineNo">102</span><a id="line.102">            fullPrefix = keyPrefix;</a>
 <span class="sourceLineNo">103</span><a id="line.103">        else</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.SmtpAuthenticator.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.SmtpAuthenticator.html
index 27addc2b80..af20dc211a 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.SmtpAuthenticator.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.SmtpAuthenticator.html
@@ -53,7 +53,7 @@
 <span class="sourceLineNo">044</span><a id="line.44"> * &lt;code&gt;jspwiki.properties&lt;/code&gt;.&lt;/p&gt;</a>
 <span class="sourceLineNo">045</span><a id="line.45"> * &lt;p&gt;To enable e-mail functions within JSPWiki, administrators must do three things:</a>
 <span class="sourceLineNo">046</span><a id="line.46"> * ensure that the required JavaMail JARs are on the runtime classpath, configure</a>
-<span class="sourceLineNo">047</span><a id="line.47"> * JavaMail appropriately, and (recommdended) configure the JNDI JavaMail session factory.&lt;/p&gt;</a>
+<span class="sourceLineNo">047</span><a id="line.47"> * JavaMail appropriately, and (recommended) configure the JNDI JavaMail session factory.&lt;/p&gt;</a>
 <span class="sourceLineNo">048</span><a id="line.48"> * &lt;strong&gt;JavaMail runtime JARs&lt;/strong&gt;</a>
 <span class="sourceLineNo">049</span><a id="line.49"> * &lt;p&gt;The first step is easy: JSPWiki bundles</a>
 <span class="sourceLineNo">050</span><a id="line.50"> * recent versions of the required JavaMail &lt;code&gt;mail.jar&lt;/code&gt; and</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.html
index 27addc2b80..af20dc211a 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/MailUtil.html
@@ -53,7 +53,7 @@
 <span class="sourceLineNo">044</span><a id="line.44"> * &lt;code&gt;jspwiki.properties&lt;/code&gt;.&lt;/p&gt;</a>
 <span class="sourceLineNo">045</span><a id="line.45"> * &lt;p&gt;To enable e-mail functions within JSPWiki, administrators must do three things:</a>
 <span class="sourceLineNo">046</span><a id="line.46"> * ensure that the required JavaMail JARs are on the runtime classpath, configure</a>
-<span class="sourceLineNo">047</span><a id="line.47"> * JavaMail appropriately, and (recommdended) configure the JNDI JavaMail session factory.&lt;/p&gt;</a>
+<span class="sourceLineNo">047</span><a id="line.47"> * JavaMail appropriately, and (recommended) configure the JNDI JavaMail session factory.&lt;/p&gt;</a>
 <span class="sourceLineNo">048</span><a id="line.48"> * &lt;strong&gt;JavaMail runtime JARs&lt;/strong&gt;</a>
 <span class="sourceLineNo">049</span><a id="line.49"> * &lt;p&gt;The first step is easy: JSPWiki bundles</a>
 <span class="sourceLineNo">050</span><a id="line.50"> * recent versions of the required JavaMail &lt;code&gt;mail.jar&lt;/code&gt; and</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/PriorityList.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/PriorityList.html
index 7728f0724b..30978cb661 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/PriorityList.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/PriorityList.html
@@ -42,7 +42,7 @@
 <span class="sourceLineNo">033</span><a id="line.33">public class PriorityList&lt;E&gt;</a>
 <span class="sourceLineNo">034</span><a id="line.34">    extends AbstractList&lt;E&gt;</a>
 <span class="sourceLineNo">035</span><a id="line.35">{</a>
-<span class="sourceLineNo">036</span><a id="line.36">    private final CopyOnWriteArrayList&lt;Item&lt;E&gt;&gt; m_elements = new CopyOnWriteArrayList&lt;Item&lt;E&gt;&gt;();</a>
+<span class="sourceLineNo">036</span><a id="line.36">    private final CopyOnWriteArrayList&lt;Item&lt;E&gt;&gt; m_elements = new CopyOnWriteArrayList&lt;&gt;();</a>
 <span class="sourceLineNo">037</span><a id="line.37"></a>
 <span class="sourceLineNo">038</span><a id="line.38">    /**</a>
 <span class="sourceLineNo">039</span><a id="line.39">     *  This is the default priority, which is used if no priority</a>
@@ -71,7 +71,7 @@
 <span class="sourceLineNo">062</span><a id="line.62">            }</a>
 <span class="sourceLineNo">063</span><a id="line.63">        }</a>
 <span class="sourceLineNo">064</span><a id="line.64"></a>
-<span class="sourceLineNo">065</span><a id="line.65">        final Item&lt;E&gt; newItem = new Item&lt;E&gt;();</a>
+<span class="sourceLineNo">065</span><a id="line.65">        final Item&lt;E&gt; newItem = new Item&lt;&gt;();</a>
 <span class="sourceLineNo">066</span><a id="line.66">        newItem.m_priority = priority;</a>
 <span class="sourceLineNo">067</span><a id="line.67">        newItem.m_object   = o;</a>
 <span class="sourceLineNo">068</span><a id="line.68"></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/TimedCounterList.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/TimedCounterList.html
index b10a788df0..146faa20da 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/TimedCounterList.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/TimedCounterList.html
@@ -45,7 +45,7 @@
 <span class="sourceLineNo">036</span><a id="line.36"> */</a>
 <span class="sourceLineNo">037</span><a id="line.37">public class TimedCounterList&lt;T&gt; extends AbstractList&lt;T&gt;</a>
 <span class="sourceLineNo">038</span><a id="line.38">{</a>
-<span class="sourceLineNo">039</span><a id="line.39">    private final ArrayList&lt;CounterItem&lt;T&gt;&gt; m_list = new ArrayList&lt;CounterItem&lt;T&gt;&gt;();</a>
+<span class="sourceLineNo">039</span><a id="line.39">    private final ArrayList&lt;CounterItem&lt;T&gt;&gt; m_list = new ArrayList&lt;&gt;();</a>
 <span class="sourceLineNo">040</span><a id="line.40">    private final ReadWriteLock             m_lock = new ReentrantReadWriteLock();</a>
 <span class="sourceLineNo">041</span><a id="line.41">    </a>
 <span class="sourceLineNo">042</span><a id="line.42">    /**</a>
@@ -60,7 +60,7 @@
 <span class="sourceLineNo">051</span><a id="line.51">        </a>
 <span class="sourceLineNo">052</span><a id="line.52">        try</a>
 <span class="sourceLineNo">053</span><a id="line.53">        {</a>
-<span class="sourceLineNo">054</span><a id="line.54">            t = m_list.set(index,new CounterItem&lt;T&gt;(element)).m_obj;</a>
+<span class="sourceLineNo">054</span><a id="line.54">            t = m_list.set(index, new CounterItem&lt;&gt;(element)).m_obj;</a>
 <span class="sourceLineNo">055</span><a id="line.55">        }</a>
 <span class="sourceLineNo">056</span><a id="line.56">        finally</a>
 <span class="sourceLineNo">057</span><a id="line.57">        {</a>
@@ -99,7 +99,7 @@
 <span class="sourceLineNo">090</span><a id="line.90">    public int size()</a>
 <span class="sourceLineNo">091</span><a id="line.91">    {</a>
 <span class="sourceLineNo">092</span><a id="line.92">        m_lock.readLock().lock();</a>
-<span class="sourceLineNo">093</span><a id="line.93">        int size = 0;</a>
+<span class="sourceLineNo">093</span><a id="line.93">        int size;</a>
 <span class="sourceLineNo">094</span><a id="line.94"></a>
 <span class="sourceLineNo">095</span><a id="line.95">        try</a>
 <span class="sourceLineNo">096</span><a id="line.96">        {</a>
@@ -123,7 +123,7 @@
 <span class="sourceLineNo">114</span><a id="line.114">        </a>
 <span class="sourceLineNo">115</span><a id="line.115">        try</a>
 <span class="sourceLineNo">116</span><a id="line.116">        {</a>
-<span class="sourceLineNo">117</span><a id="line.117">            m_list.add(index, new CounterItem&lt;T&gt;(element));</a>
+<span class="sourceLineNo">117</span><a id="line.117">            m_list.add(index, new CounterItem&lt;&gt;(element));</a>
 <span class="sourceLineNo">118</span><a id="line.118">        }</a>
 <span class="sourceLineNo">119</span><a id="line.119">        finally</a>
 <span class="sourceLineNo">120</span><a id="line.120">        {</a>
@@ -222,7 +222,7 @@
 <span class="sourceLineNo">213</span><a id="line.213">    public long getAddTime(final int index )</a>
 <span class="sourceLineNo">214</span><a id="line.214">    {</a>
 <span class="sourceLineNo">215</span><a id="line.215">        m_lock.readLock().lock();</a>
-<span class="sourceLineNo">216</span><a id="line.216">        long res = 0;</a>
+<span class="sourceLineNo">216</span><a id="line.216">        long res;</a>
 <span class="sourceLineNo">217</span><a id="line.217">        </a>
 <span class="sourceLineNo">218</span><a id="line.218">        try</a>
 <span class="sourceLineNo">219</span><a id="line.219">        {</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.CharType.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.CharType.html
index 513bee5182..e4281830f9 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.CharType.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.CharType.html
@@ -34,7 +34,7 @@
 <span class="sourceLineNo">025</span><a id="line.25"></a>
 <span class="sourceLineNo">026</span><a id="line.26">/**</a>
 <span class="sourceLineNo">027</span><a id="line.27"> * A comparator that sorts Strings using "human" ordering, including decimal</a>
-<span class="sourceLineNo">028</span><a id="line.28"> * ordering. Only works for languages where every character is lexigraphically</a>
+<span class="sourceLineNo">028</span><a id="line.28"> * ordering. Only works for languages where every character is lexicographically</a>
 <span class="sourceLineNo">029</span><a id="line.29"> * distinct and correctly unicode ordered (e.g. English). Other languages should use</a>
 <span class="sourceLineNo">030</span><a id="line.30"> * &lt;code&gt;CollatedHumanComparator&lt;/code&gt;. Pretty efficient but still slower than</a>
 <span class="sourceLineNo">031</span><a id="line.31"> * String.compareTo().</a>
@@ -149,8 +149,8 @@
 <span class="sourceLineNo">140</span><a id="line.140">                // If they're not digits, use character to character comparison</a>
 <span class="sourceLineNo">141</span><a id="line.141">                if( type1 != CharType.TYPE_DIGIT )</a>
 <span class="sourceLineNo">142</span><a id="line.142">                {</a>
-<span class="sourceLineNo">143</span><a id="line.143">                    final Character ch1 = Character.valueOf( c1 );</a>
-<span class="sourceLineNo">144</span><a id="line.144">                    final Character ch2 = Character.valueOf( c2 );</a>
+<span class="sourceLineNo">143</span><a id="line.143">                    final Character ch1 = c1;</a>
+<span class="sourceLineNo">144</span><a id="line.144">                    final Character ch2 = c2;</a>
 <span class="sourceLineNo">145</span><a id="line.145">                    return ch1.compareTo( ch2 );</a>
 <span class="sourceLineNo">146</span><a id="line.146">                }</a>
 <span class="sourceLineNo">147</span><a id="line.147"></a>
@@ -235,7 +235,7 @@
 <span class="sourceLineNo">226</span><a id="line.226">            idx++;</a>
 <span class="sourceLineNo">227</span><a id="line.227">        }</a>
 <span class="sourceLineNo">228</span><a id="line.228">        final int leftLen = idx - offset;</a>
-<span class="sourceLineNo">229</span><a id="line.229">        final int leftValue = Integer.valueOf( new String( left, offset, leftLen ) );</a>
+<span class="sourceLineNo">229</span><a id="line.229">        final int leftValue = Integer.parseInt( new String( left, offset, leftLen ) );</a>
 <span class="sourceLineNo">230</span><a id="line.230"></a>
 <span class="sourceLineNo">231</span><a id="line.231">        // Calculate the integer value of the right hand side</a>
 <span class="sourceLineNo">232</span><a id="line.232">        idx = offset;</a>
@@ -243,7 +243,7 @@
 <span class="sourceLineNo">234</span><a id="line.234">            idx++;</a>
 <span class="sourceLineNo">235</span><a id="line.235">        }</a>
 <span class="sourceLineNo">236</span><a id="line.236">        final int rightLen = idx - offset;</a>
-<span class="sourceLineNo">237</span><a id="line.237">        final int rightValue = Integer.valueOf( new String( right, offset, rightLen ) );</a>
+<span class="sourceLineNo">237</span><a id="line.237">        final int rightValue = Integer.parseInt( new String( right, offset, rightLen ) );</a>
 <span class="sourceLineNo">238</span><a id="line.238"></a>
 <span class="sourceLineNo">239</span><a id="line.239">        if( leftValue == rightValue ) {</a>
 <span class="sourceLineNo">240</span><a id="line.240">            return leftLen - rightLen; // Same value so use the lengths</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.html
index 513bee5182..e4281830f9 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/util/comparators/HumanComparator.html
@@ -34,7 +34,7 @@
 <span class="sourceLineNo">025</span><a id="line.25"></a>
 <span class="sourceLineNo">026</span><a id="line.26">/**</a>
 <span class="sourceLineNo">027</span><a id="line.27"> * A comparator that sorts Strings using "human" ordering, including decimal</a>
-<span class="sourceLineNo">028</span><a id="line.28"> * ordering. Only works for languages where every character is lexigraphically</a>
+<span class="sourceLineNo">028</span><a id="line.28"> * ordering. Only works for languages where every character is lexicographically</a>
 <span class="sourceLineNo">029</span><a id="line.29"> * distinct and correctly unicode ordered (e.g. English). Other languages should use</a>
 <span class="sourceLineNo">030</span><a id="line.30"> * &lt;code&gt;CollatedHumanComparator&lt;/code&gt;. Pretty efficient but still slower than</a>
 <span class="sourceLineNo">031</span><a id="line.31"> * String.compareTo().</a>
@@ -149,8 +149,8 @@
 <span class="sourceLineNo">140</span><a id="line.140">                // If they're not digits, use character to character comparison</a>
 <span class="sourceLineNo">141</span><a id="line.141">                if( type1 != CharType.TYPE_DIGIT )</a>
 <span class="sourceLineNo">142</span><a id="line.142">                {</a>
-<span class="sourceLineNo">143</span><a id="line.143">                    final Character ch1 = Character.valueOf( c1 );</a>
-<span class="sourceLineNo">144</span><a id="line.144">                    final Character ch2 = Character.valueOf( c2 );</a>
+<span class="sourceLineNo">143</span><a id="line.143">                    final Character ch1 = c1;</a>
+<span class="sourceLineNo">144</span><a id="line.144">                    final Character ch2 = c2;</a>
 <span class="sourceLineNo">145</span><a id="line.145">                    return ch1.compareTo( ch2 );</a>
 <span class="sourceLineNo">146</span><a id="line.146">                }</a>
 <span class="sourceLineNo">147</span><a id="line.147"></a>
@@ -235,7 +235,7 @@
 <span class="sourceLineNo">226</span><a id="line.226">            idx++;</a>
 <span class="sourceLineNo">227</span><a id="line.227">        }</a>
 <span class="sourceLineNo">228</span><a id="line.228">        final int leftLen = idx - offset;</a>
-<span class="sourceLineNo">229</span><a id="line.229">        final int leftValue = Integer.valueOf( new String( left, offset, leftLen ) );</a>
+<span class="sourceLineNo">229</span><a id="line.229">        final int leftValue = Integer.parseInt( new String( left, offset, leftLen ) );</a>
 <span class="sourceLineNo">230</span><a id="line.230"></a>
 <span class="sourceLineNo">231</span><a id="line.231">        // Calculate the integer value of the right hand side</a>
 <span class="sourceLineNo">232</span><a id="line.232">        idx = offset;</a>
@@ -243,7 +243,7 @@
 <span class="sourceLineNo">234</span><a id="line.234">            idx++;</a>
 <span class="sourceLineNo">235</span><a id="line.235">        }</a>
 <span class="sourceLineNo">236</span><a id="line.236">        final int rightLen = idx - offset;</a>
-<span class="sourceLineNo">237</span><a id="line.237">        final int rightValue = Integer.valueOf( new String( right, offset, rightLen ) );</a>
+<span class="sourceLineNo">237</span><a id="line.237">        final int rightValue = Integer.parseInt( new String( right, offset, rightLen ) );</a>
 <span class="sourceLineNo">238</span><a id="line.238"></a>
 <span class="sourceLineNo">239</span><a id="line.239">        if( leftValue == rightValue ) {</a>
 <span class="sourceLineNo">240</span><a id="line.240">            return leftLen - rightLen; // Same value so use the lengths</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/Step.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/Step.html
index 0e45ea0505..378cfd2c17 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/Step.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/Step.html
@@ -175,7 +175,7 @@
 <span class="sourceLineNo">166</span><a id="line.166">    void start() throws WikiException;</a>
 <span class="sourceLineNo">167</span><a id="line.167"></a>
 <span class="sourceLineNo">168</span><a id="line.168">    /**</a>
-<span class="sourceLineNo">169</span><a id="line.169">     * Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completon time and mark the</a>
+<span class="sourceLineNo">169</span><a id="line.169">     * Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completion time and mark the</a>
 <span class="sourceLineNo">170</span><a id="line.170">     * Step as complete. Once a Step has been marked complete, this method cannot be called again. If the supplied Outcome is not in the</a>
 <span class="sourceLineNo">171</span><a id="line.171">     * set returned by {@link #getAvailableOutcomes()}, or is not  {@link Outcome#STEP_CONTINUE} or {@link Outcome#STEP_ABORT}, this method</a>
 <span class="sourceLineNo">172</span><a id="line.172">     * returns an IllegalArgumentException. If the caller attempts to set an Outcome and the Step has already completed, this method throws</a>
diff --git a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/SystemPrincipal.html b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/SystemPrincipal.html
index 9a2dd97efd..183c76b519 100644
--- a/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/SystemPrincipal.html
+++ b/apidocs/2.11.3-SNAPSHOT/src-html/org/apache/wiki/workflow/SystemPrincipal.html
@@ -31,7 +31,7 @@
 <span class="sourceLineNo">022</span><a id="line.22"></a>
 <span class="sourceLineNo">023</span><a id="line.23"></a>
 <span class="sourceLineNo">024</span><a id="line.24">/**</a>
-<span class="sourceLineNo">025</span><a id="line.25"> * System users asociated with workflow Task steps.</a>
+<span class="sourceLineNo">025</span><a id="line.25"> * System users associated with workflow Task steps.</a>
 <span class="sourceLineNo">026</span><a id="line.26"> */</a>
 <span class="sourceLineNo">027</span><a id="line.27">public final class SystemPrincipal implements Principal {</a>
 <span class="sourceLineNo">028</span><a id="line.28"></a>
diff --git a/apidocs/2.11.3-SNAPSHOT/type-search-index.zip b/apidocs/2.11.3-SNAPSHOT/type-search-index.zip
index a68734ed65..bf3d660d40 100644
Binary files a/apidocs/2.11.3-SNAPSHOT/type-search-index.zip and b/apidocs/2.11.3-SNAPSHOT/type-search-index.zip differ
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-adapters.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-adapters.html
index b625bb5654..7678c2048c 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-adapters.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-adapters.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-210-adapters/2.11.3-SNAPSHOT/jspwiki-210-adapters-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:32.498+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:33.001+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-test-adaptees.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-test-adaptees.html
index 2a1214ebfa..f5d362355c 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-test-adaptees.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-210-test-adaptees.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-210-test-adaptees/2.11.3-SNAPSHOT/jspwiki-210-test-adaptees-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:33.734+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:33.694+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-api.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-api.html
index f46af259aa..d146b0061e 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-api.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-api.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-api/2.11.3-SNAPSHOT/jspwiki-api-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:34.517+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:33.980+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-bootstrap.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-bootstrap.html
index 69fdb4da00..8342689b04 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-bootstrap.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-bootstrap.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-bootstrap/2.11.3-SNAPSHOT/jspwiki-bootstrap-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:35.184+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:34.300+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-cache.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-cache.html
index da049b7f77..f7d4c7ac84 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-cache.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-cache.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-cache/2.11.3-SNAPSHOT/jspwiki-cache-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:35.889+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:35.652+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-event.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-event.html
index f4a6f77f81..16d8647e13 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-event.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-event.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-event/2.11.3-SNAPSHOT/jspwiki-event-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:36.380+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:35.798+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-kendra-searchprovider.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-kendra-searchprovider.html
index d228b9fc14..e4d1918e23 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-kendra-searchprovider.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-kendra-searchprovider.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-kendra-searchprovider/2.11.3-SNAPSHOT/jspwiki-kendra-searchprovider-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:36.892+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:35.975+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-main.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-main.html
index 7879572cfa..ecf9e96a70 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-main.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-main.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-main/2.11.3-SNAPSHOT/jspwiki-main-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:38.604+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:36.698+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-markdown.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-markdown.html
index bcebab566a..6fc29f21c1 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-markdown.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-markdown.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-markdown/2.11.3-SNAPSHOT/jspwiki-markdown-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:39.621+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:37.410+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-tika-searchprovider.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-tika-searchprovider.html
index e93a192fee..e9cf536c99 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-tika-searchprovider.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-tika-searchprovider.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-tika-searchprovider/2.11.3-SNAPSHOT/jspwiki-tika-searchprovider-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:40.712+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:38.572+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>
diff --git a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-util.html b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-util.html
index d463a4e6e7..fff1703b6c 100644
--- a/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-util.html
+++ b/japicmp/2.11.3-SNAPSHOT/cmp-jspwiki-util.html
@@ -131,7 +131,7 @@ ul {
                     <td>New:</td><td>/home/jenkins/.m2/repository/org/apache/jspwiki/jspwiki-util/2.11.3-SNAPSHOT/jspwiki-util-2.11.3-SNAPSHOT.jar</td>
                 </tr>
                 <tr>
-                    <td>Created:</td><td>2022-05-01T13:49:41.216+0000</td>
+                    <td>Created:</td><td>2022-07-12T20:54:38.748+0000</td>
                 </tr>
                 <tr>
                     <td>Access modifier filter:</td><td>PROTECTED</td>