From 699e71e76b15081baf746c6ce9c9144f7e5f1ff9 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 30 Sep 2013 10:11:28 -0400
Subject: [PATCH] Trim trailing whitespace and organize imports

---
 src/main/java/com/gitblit/client/UsersTableModel.java                     |    7 
 src/main/java/com/gitblit/GCExecutor.java                                 |   52 
 src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java     |   38 
 src/main/java/com/gitblit/AccessRestrictionFilter.java                    |   34 
 src/main/java/com/gitblit/client/EditUserDialog.java                      |   49 
 src/main/java/com/gitblit/wicket/panels/ReflogPanel.java                  |   40 
 src/main/java/com/gitblit/models/UserRepositoryPreferences.java           |    8 
 src/main/java/com/gitblit/wicket/panels/LinkPanel.java                    |    2 
 src/main/java/com/gitblit/utils/CompressionUtils.java                     |   36 
 src/main/java/com/gitblit/wicket/pages/RootPage.java                      |   39 
 src/main/java/com/gitblit/wicket/panels/RefsPanel.java                    |   13 
 src/main/java/com/gitblit/wicket/pages/LogPage.java                       |    2 
 src/main/java/com/gitblit/wicket/panels/LogPanel.java                     |   11 
 src/main/java/com/gitblit/models/FeedModel.java                           |    2 
 src/main/java/com/gitblit/wicket/PageRegistration.java                    |   30 
 src/main/java/com/gitblit/LogoServlet.java                                |   14 
 src/main/java/com/gitblit/utils/TimeUtils.java                            |   40 
 src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java              |   40 
 src/main/java/com/gitblit/RedmineUserService.java                         |   23 
 src/main/java/com/gitblit/client/BooleanCellRenderer.java                 |    5 
 src/main/java/com/gitblit/wicket/pages/ProjectsPage.java                  |    5 
 src/main/java/com/gitblit/client/EditRepositoryDialog.java                |   93 
 src/test/java/com/gitblit/tests/HtpasswdUserServiceTest.java              |    1 
 src/main/java/com/gitblit/IUserService.java                               |  109 
 src/main/java/com/gitblit/utils/ArrayUtils.java                           |   10 
 src/main/java/com/gitblit/utils/ModelUtils.java                           |    2 
 src/main/java/com/gitblit/wicket/pages/ReflogPage.java                    |    2 
 src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java    |    5 
 src/main/java/com/gitblit/LuceneExecutor.java                             |  220 +-
 src/main/java/com/gitblit/wicket/panels/BasePanel.java                    |   12 
 src/main/java/com/gitblit/Launcher.java                                   |    6 
 src/main/java/com/gitblit/utils/ActivityUtils.java                        |   22 
 src/main/java/com/gitblit/wicket/panels/FederationTokensPanel.java        |    1 
 src/main/java/com/gitblit/wicket/panels/DropDownMenu.java                 |    1 
 src/main/java/com/gitblit/wicket/charting/GooglePieChart.java             |   10 
 src/main/java/com/gitblit/wicket/pages/EditUserPage.java                  |   24 
 src/main/java/com/gitblit/authority/CertificateStatusRenderer.java        |    5 
 src/main/java/com/gitblit/client/GitblitManager.java                      |    8 
 src/main/java/com/gitblit/models/GitNote.java                             |    4 
 src/main/java/com/gitblit/utils/JGitUtils.java                            |  172 
 src/main/java/com/gitblit/client/PropertiesTableModel.java                |    7 
 src/main/java/com/gitblit/DownloadZipServlet.java                         |   26 
 src/main/java/com/gitblit/wicket/pages/ForkPage.java                      |    2 
 src/main/java/com/gitblit/wicket/panels/DigestsPanel.java                 |   36 
 src/main/java/com/gitblit/DownloadZipFilter.java                          |   16 
 src/main/java/com/gitblit/wicket/panels/FederationRegistrationsPanel.java |    1 
 src/main/java/com/gitblit/utils/Base64.java                               |   14 
 src/main/java/com/gitblit/client/SubscribedRepositoryRenderer.java        |    5 
 src/main/java/com/gitblit/models/FederationSet.java                       |    2 
 src/main/java/com/gitblit/utils/ConnectionUtils.java                      |   12 
 src/main/java/com/gitblit/wicket/pages/BlobPage.java                      |   22 
 src/main/java/com/gitblit/utils/ContainerUtils.java                       |    8 
 src/main/java/com/gitblit/SyndicationFilter.java                          |   12 
 src/main/java/com/gitblit/wicket/panels/PathBreadcrumbsPanel.java         |    1 
 src/main/java/com/gitblit/SyndicationServlet.java                         |   32 
 src/main/java/com/gitblit/models/RepositoryCommit.java                    |   14 
 src/main/java/com/gitblit/wicket/charting/GoogleChart.java                |    6 
 src/main/java/com/gitblit/wicket/pages/UsersPage.java                     |    4 
 src/main/java/com/gitblit/WindowsUserService.java                         |   18 
 src/main/java/com/gitblit/wicket/GitblitRedirectException.java            |    4 
 src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java            |   11 
 src/main/java/com/gitblit/authority/CertificatesTableModel.java           |   13 
 src/main/java/com/gitblit/wicket/pages/BlamePage.java                     |   13 
 src/main/java/com/gitblit/utils/JnaUtils.java                             |    6 
 src/main/java/com/gitblit/fanout/FanoutConstants.java                     |    4 
 src/main/java/com/gitblit/client/FeedEntryTableModel.java                 |    7 
 src/main/java/com/gitblit/models/ServerSettings.java                      |   12 
 src/main/java/com/gitblit/HtpasswdUserService.java                        |   20 
 src/main/java/com/gitblit/client/RepositoriesTableModel.java              |    7 
 src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java            |    6 
 src/main/java/com/gitblit/utils/SyndicationUtils.java                     |   12 
 src/main/java/com/gitblit/models/GitClientApplication.java                |   10 
 src/main/java/com/gitblit/wicket/GitBlitWebSession.java                   |   23 
 src/main/java/com/gitblit/client/TeamsPanel.java                          |   16 
 src/main/java/com/gitblit/git/GitblitReceivePack.java                     |    2 
 src/main/java/com/gitblit/client/DateCellRenderer.java                    |    7 
 src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java              |    4 
 src/main/java/com/gitblit/wicket/pages/UserPage.java                      |   21 
 src/main/java/com/gitblit/models/Metric.java                              |    4 
 src/main/java/com/gitblit/fanout/FanoutSocketService.java                 |   26 
 src/main/java/com/gitblit/RpcServlet.java                                 |    6 
 src/main/java/com/gitblit/client/IndicatorsRenderer.java                  |    8 
 src/main/java/com/gitblit/utils/ByteFormat.java                           |   12 
 src/main/java/com/gitblit/wicket/pages/ActivityPage.java                  |   10 
 src/main/java/com/gitblit/models/FeedEntryModel.java                      |    2 
 src/test/java/com/gitblit/tests/JnaUtilsTest.java                         |   10 
 src/main/java/com/gitblit/ConfigUserService.java                          |  123 
 src/main/java/com/gitblit/wicket/panels/ActivityPanel.java                |   10 
 src/main/java/com/gitblit/fanout/FanoutNioService.java                    |   43 
 src/main/java/com/gitblit/authority/NewCertificateConfig.java             |   17 
 src/main/java/com/gitblit/MailExecutor.java                               |   23 
 src/main/java/com/gitblit/models/UserPreferences.java                     |   14 
 src/main/java/com/gitblit/authority/DefaultOidsPanel.java                 |   16 
 src/main/java/com/gitblit/models/PathModel.java                           |   18 
 src/main/java/com/gitblit/wicket/pages/EditTeamPage.java                  |    6 
 src/main/java/com/gitblit/wicket/panels/CompressedDownloadsPanel.java     |   11 
 src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java                  |    2 
 src/main/java/com/gitblit/wicket/CacheControl.java                        |    8 
 src/main/java/com/gitblit/authority/Launcher.java                         |   19 
 src/main/java/com/gitblit/models/GravatarProfile.java                     |    6 
 src/main/java/com/gitblit/client/SettingCellRenderer.java                 |    5 
 src/main/java/com/gitblit/git/RepositoryResolver.java                     |   14 
 src/main/java/com/gitblit/PagesServlet.java                               |    8 
 src/main/java/com/gitblit/fanout/FanoutServiceConnection.java             |   18 
 src/main/java/com/gitblit/models/ForkModel.java                           |   22 
 src/main/java/com/gitblit/models/UserModel.java                           |   94 
 src/main/java/com/gitblit/models/RepositoryModel.java                     |   44 
 src/main/java/com/gitblit/utils/PatchFormatter.java                       |    5 
 src/main/java/com/gitblit/wicket/panels/TeamsPanel.java                   |    1 
 src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java       |   16 
 src/main/java/com/gitblit/fanout/FanoutClient.java                        |   64 
 src/main/java/com/gitblit/IStoredSettings.java                            |   48 
 src/main/java/com/gitblit/wicket/pages/TreePage.java                      |   13 
 src/main/java/com/gitblit/fanout/FanoutStats.java                         |   16 
 src/main/java/com/gitblit/utils/MetricUtils.java                          |   12 
 src/main/java/com/gitblit/authority/X509CertificateViewer.java            |   29 
 src/main/java/com/gitblit/client/ClosableTabComponent.java                |    4 
 src/main/java/com/gitblit/wicket/charting/GoogleLineChart.java            |    4 
 src/main/java/com/gitblit/AddIndexedBranch.java                           |   26 
 src/main/java/com/gitblit/models/SearchResult.java                        |   22 
 src/main/java/com/gitblit/wicket/panels/NavigationPanel.java              |    1 
 src/main/java/com/gitblit/models/TeamModel.java                           |   40 
 src/main/java/com/gitblit/wicket/ExternalImage.java                       |    1 
 src/main/java/com/gitblit/authority/NewClientCertificateDialog.java       |   48 
 src/main/java/com/gitblit/utils/StringUtils.java                          |  108 
 src/main/java/com/gitblit/wicket/charting/SecureChartDataEncoding.java    |   11 
 src/main/java/com/gitblit/wicket/AuthorizationStrategy.java               |    2 
 src/main/java/com/gitblit/wicket/pages/ForksPage.java                     |   25 
 src/main/java/com/gitblit/wicket/pages/GitSearchPage.java                 |    4 
 src/main/java/com/gitblit/JsonServlet.java                                |   10 
 src/main/java/com/gitblit/client/RegistrationsTableModel.java             |    7 
 src/main/java/com/gitblit/git/GitDaemonClient.java                        |    6 
 src/main/java/com/gitblit/wicket/panels/GravatarImage.java                |    8 
 src/main/java/com/gitblit/wicket/pages/DocsPage.java                      |    3 
 src/main/java/com/gitblit/SparkleShareInviteServlet.java                  |   22 
 src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java   |   45 
 src/main/java/com/gitblit/utils/CommitCache.java                          |   68 
 src/main/java/com/gitblit/client/SettingPanel.java                        |    2 
 src/main/java/com/gitblit/models/RepositoryUrl.java                       |    4 
 src/main/java/com/gitblit/wicket/pages/ProjectPage.java                   |   31 
 src/main/java/com/gitblit/LdapUserService.java                            |   95 
 src/main/java/com/gitblit/client/BranchRenderer.java                      |    7 
 src/main/java/com/gitblit/client/TeamsTableModel.java                     |    7 
 src/main/java/com/gitblit/wicket/charting/GoogleCharts.java               |    5 
 src/main/java/com/gitblit/authority/UserCertificateTableModel.java        |    7 
 src/main/java/com/gitblit/utils/X509Utils.java                            |  262 +-
 src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java     |    1 
 src/main/java/com/gitblit/models/ProjectModel.java                        |   16 
 src/main/java/com/gitblit/client/RegistrantPermissionsPanel.java          |   27 
 src/main/java/com/gitblit/models/DailyLogEntry.java                       |   13 
 src/main/java/com/gitblit/wicket/pages/GravatarProfilePage.java           |    6 
 src/main/java/com/gitblit/models/SubmoduleModel.java                      |    7 
 src/main/java/com/gitblit/utils/ClientLogger.java                         |   10 
 src/main/java/com/gitblit/wicket/pages/CommitPage.java                    |   21 
 src/main/java/com/gitblit/wicket/panels/CommitLegendPanel.java            |    1 
 src/main/java/com/gitblit/models/ServerStatus.java                        |    4 
 src/main/java/com/gitblit/wicket/pages/ComparePage.java                   |   31 
 src/main/java/com/gitblit/wicket/panels/SearchPanel.java                  |    1 
 src/main/java/com/gitblit/RpcFilter.java                                  |   10 
 src/main/java/com/gitblit/models/FederationProposal.java                  |    4 
 src/main/java/com/gitblit/wicket/freemarker/Freemarker.java               |    6 
 src/main/java/com/gitblit/wicket/panels/TagsPanel.java                    |    3 
 src/main/java/com/gitblit/AuthenticationFilter.java                       |   16 
 src/main/java/com/gitblit/client/RegistrationsDialog.java                 |   11 
 src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java                 |   26 
 src/main/java/com/gitblit/authority/UserCertificatePanel.java             |   79 
 src/main/java/com/gitblit/git/GitServlet.java                             |    4 
 src/main/java/com/gitblit/git/GitblitUploadPackFactory.java               |   14 
 src/main/java/com/gitblit/client/NameRenderer.java                        |    5 
 src/main/java/com/gitblit/wicket/pages/OverviewPage.java                  |   13 
 src/main/java/com/gitblit/models/RegistrantAccessPermission.java          |   24 
 src/main/java/com/gitblit/wicket/SessionlessForm.java                     |   28 
 src/main/java/com/gitblit/models/RefLogEntry.java                         |   80 
 src/main/java/com/gitblit/client/SubscriptionsDialog.java                 |    8 
 src/main/java/com/gitblit/client/UsersPanel.java                          |   22 
 src/main/java/com/gitblit/wicket/panels/PagerPanel.java                   |    7 
 src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java          |   26 
 src/main/java/com/gitblit/client/GitblitManagerLauncher.java              |   19 
 src/main/java/com/gitblit/client/GitblitWorker.java                       |    1 
 src/main/java/com/gitblit/wicket/panels/UsersPanel.java                   |    3 
 src/main/java/com/gitblit/client/GitblitClient.java                       |   32 
 src/main/java/com/gitblit/client/MessageRenderer.java                     |   17 
 src/main/java/com/gitblit/PagesFilter.java                                |   28 
 src/main/java/com/gitblit/client/Translation.java                         |   10 
 src/main/java/com/gitblit/PAMUserService.java                             |   14 
 src/main/java/com/gitblit/wicket/panels/HistoryPanel.java                 |   25 
 src/main/java/com/gitblit/client/EditRegistrationDialog.java              |    8 
 src/main/java/com/gitblit/wicket/GitblitWicketFilter.java                 |   21 
 src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java           |   10 
 src/main/java/com/gitblit/client/FeedsTableModel.java                     |    7 
 src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java                |    8 
 src/main/java/com/gitblit/client/StatusPanel.java                         |    5 
 src/main/java/com/gitblit/client/GitblitRegistration.java                 |    4 
 src/main/java/com/gitblit/FederationClient.java                           |    6 
 src/main/java/com/gitblit/utils/HttpUtils.java                            |   34 
 src/main/java/com/gitblit/wicket/pages/SendProposalPage.java              |    2 
 src/main/java/com/gitblit/wicket/pages/MetricsPage.java                   |    4 
 src/main/java/com/gitblit/FileSettings.java                               |   11 
 src/main/java/com/gitblit/client/RepositoriesPanel.java                   |   25 
 src/main/java/com/gitblit/utils/RpcUtils.java                             |   90 
 src/main/java/com/gitblit/GitBlitException.java                           |    4 
 src/main/java/com/gitblit/GitblitSslContextFactory.java                   |   12 
 src/main/java/com/gitblit/FederationPullExecutor.java                     |   20 
 src/main/java/com/gitblit/git/GitDaemonService.java                       |    1 
 src/main/java/com/gitblit/models/FederationModel.java                     |   14 
 src/main/java/com/gitblit/wicket/pages/RootSubPage.java                   |   12 
 src/main/java/com/gitblit/Constants.java                                  |  132 
 src/main/java/com/gitblit/GitFilter.java                                  |   34 
 src/main/java/com/gitblit/utils/FederationUtils.java                      |   26 
 src/main/java/com/gitblit/utils/DeepCopier.java                           |    3 
 src/main/java/com/gitblit/wicket/pages/BasePage.java                      |   44 
 src/main/java/com/gitblit/wicket/pages/TagPage.java                       |    4 
 src/main/java/com/gitblit/fanout/FanoutService.java                       |  142 
 src/main/java/com/gitblit/GitblitTrustManager.java                        |   18 
 src/main/java/com/gitblit/authority/AuthorityWorker.java                  |    1 
 src/main/java/com/gitblit/authority/NewSSLCertificateDialog.java          |   34 
 src/main/java/com/gitblit/wicket/WicketUtils.java                         |   13 
 src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java        |   28 
 src/main/java/com/gitblit/git/GitDaemon.java                              |   22 
 src/main/java/com/gitblit/utils/RefLogUtils.java                          |   78 
 src/main/java/com/gitblit/utils/JsonUtils.java                            |   32 
 src/main/java/com/gitblit/wicket/ng/NgController.java                     |   15 
 src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java            |    4 
 src/main/java/com/gitblit/GitBlit.java                                    |  594 ++--
 src/main/java/com/gitblit/models/AnnotatedLine.java                       |    4 
 src/main/java/com/gitblit/wicket/StringChoiceRenderer.java                |    4 
 src/main/java/com/gitblit/wicket/panels/BulletListPanel.java              |    1 
 src/main/java/com/gitblit/client/FeedsPanel.java                          |   17 
 src/main/java/com/gitblit/client/SearchDialog.java                        |   13 
 src/main/java/com/gitblit/wicket/pages/DashboardPage.java                 |   16 
 src/main/java/com/gitblit/utils/FileUtils.java                            |   40 
 src/main/java/com/gitblit/client/EditTeamDialog.java                      |   23 
 src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java           |   10 
 src/main/java/com/gitblit/authority/UserCertificateModel.java             |   14 
 src/main/java/com/gitblit/authority/RequestFocusListener.java             |    2 
 src/main/java/com/gitblit/client/RegistrantPermissionsTableModel.java     |   11 
 src/main/java/com/gitblit/FederationServlet.java                          |    8 
 src/main/java/com/gitblit/wicket/pages/MarkdownPage.java                  |    6 
 src/main/java/com/gitblit/utils/ObjectCache.java                          |    6 
 src/main/java/com/gitblit/wicket/pages/TagsPage.java                      |    2 
 src/main/java/com/gitblit/authority/Utils.java                            |   27 
 src/main/java/com/gitblit/BranchGraphServlet.java                         |   10 
 src/main/java/com/gitblit/EnforceAuthenticationFilter.java                |   24 
 src/main/java/com/gitblit/client/JPalette.java                            |   11 
 src/main/java/com/gitblit/models/RefModel.java                            |    4 
 src/main/java/com/gitblit/client/SettingsTableModel.java                  |    7 
 src/main/java/com/gitblit/GitBlitServer.java                              |   52 
 src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java               |   34 
 src/main/java/com/gitblit/models/Activity.java                            |   18 
 src/main/java/com/gitblit/wicket/pages/HistoryPage.java                   |    4 
 src/main/java/com/gitblit/wicket/pages/SummaryPage.java                   |   11 
 src/main/java/com/gitblit/models/SettingModel.java                        |   22 
 src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java            |  100 
 src/main/java/com/gitblit/SalesforceUserService.java                      |    9 
 src/main/java/com/gitblit/client/SettingsPanel.java                       |   12 
 src/main/java/com/gitblit/wicket/panels/ObjectContainer.java              |    4 
 src/main/java/com/gitblit/authority/UserCertificateConfig.java            |   15 
 src/main/java/com/gitblit/authority/GitblitAuthority.java                 |  168 
 src/main/java/com/gitblit/client/GitblitPanel.java                        |   19 
 src/main/java/com/gitblit/client/Utils.java                               |    6 
 src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java           |   71 
 src/main/java/com/gitblit/authority/UserOidsPanel.java                    |   14 
 src/main/java/com/gitblit/RobotsTxtServlet.java                           |    6 
 src/main/java/com/gitblit/wicket/pages/RawPage.java                       |   12 
 src/main/java/com/gitblit/WebXmlSettings.java                             |    6 
 src/main/java/com/gitblit/wicket/pages/LogoutPage.java                    |    6 
 src/main/java/com/gitblit/wicket/charting/SecureChart.java                |    4 
 src/main/java/com/gitblit/utils/MarkdownUtils.java                        |    8 
 src/main/java/com/gitblit/wicket/panels/BranchesPanel.java                |   15 
 src/main/java/com/gitblit/utils/DiffUtils.java                            |   38 
 270 files changed, 3,350 insertions(+), 3,080 deletions(-)

diff --git a/src/main/java/com/gitblit/AccessRestrictionFilter.java b/src/main/java/com/gitblit/AccessRestrictionFilter.java
index 495d343..cadf915 100644
--- a/src/main/java/com/gitblit/AccessRestrictionFilter.java
+++ b/src/main/java/com/gitblit/AccessRestrictionFilter.java
@@ -32,22 +32,22 @@
 /**
  * The AccessRestrictionFilter is an AuthenticationFilter that confirms that the
  * requested repository can be accessed by the anonymous or named user.
- * 
+ *
  * The filter extracts the name of the repository from the url and determines if
  * the requested action for the repository requires a Basic authentication
  * prompt. If authentication is required and no credentials are stored in the
  * "Authorization" header, then a basic authentication challenge is issued.
- * 
+ *
  * http://en.wikipedia.org/wiki/Basic_access_authentication
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class AccessRestrictionFilter extends AuthenticationFilter {
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param url
 	 * @return repository name
 	 */
@@ -55,7 +55,7 @@
 
 	/**
 	 * Analyze the url and returns the action of the request.
-	 * 
+	 *
 	 * @param url
 	 * @return action of the request
 	 */
@@ -63,14 +63,14 @@
 
 	/**
 	 * Determine if a non-existing repository can be created using this filter.
-	 *  
+	 *
 	 * @return true if the filter allows repository creation
 	 */
 	protected abstract boolean isCreationAllowed();
-	
+
 	/**
 	 * Determine if the action may be executed on the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if the action may be performed
@@ -79,7 +79,7 @@
 
 	/**
 	 * Determine if the repository requires authentication.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if authentication required
@@ -89,7 +89,7 @@
 	/**
 	 * Determine if the user can access the repository and perform the specified
 	 * action.
-	 * 
+	 *
 	 * @param repository
 	 * @param user
 	 * @param action
@@ -99,7 +99,7 @@
 
 	/**
 	 * Allows a filter to create a repository, if one does not exist.
-	 * 
+	 *
 	 * @param user
 	 * @param repository
 	 * @param action
@@ -108,11 +108,11 @@
 	protected RepositoryModel createRepository(UserModel user, String repository, String action) {
 		return null;
 	}
-	
+
 	/**
 	 * doFilter does the actual work of preprocessing the request to ensure that
 	 * the user may proceed.
-	 * 
+	 *
 	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
 	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
 	 */
@@ -125,7 +125,7 @@
 
 		String fullUrl = getFullUrl(httpRequest);
 		String repository = extractRepositoryName(fullUrl);
-		
+
 		if (GitBlit.self().isCollectingGarbage(repository)) {
 			logger.info(MessageFormat.format("ARF: Rejecting request for {0}, busy collecting garbage!", repository));
 			httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN);
@@ -155,7 +155,7 @@
 					model = createRepository(user, repository, urlRequestType);
 				}
 			}
-			
+
 			if (model == null) {
 				// repository not found. send 404.
 				logger.info(MessageFormat.format("ARF: {0} ({1})", fullUrl,
@@ -164,7 +164,7 @@
 				return;
 			}
 		}
-		
+
 		// Confirm that the action may be executed on the repository
 		if (!isActionAllowed(model, urlRequestType)) {
 			logger.info(MessageFormat.format("ARF: action {0} on {1} forbidden ({2})",
diff --git a/src/main/java/com/gitblit/AddIndexedBranch.java b/src/main/java/com/gitblit/AddIndexedBranch.java
index 7a16bbd..4b668c4 100644
--- a/src/main/java/com/gitblit/AddIndexedBranch.java
+++ b/src/main/java/com/gitblit/AddIndexedBranch.java
@@ -40,9 +40,9 @@
 
 /**
  * Utility class to add an indexBranch setting to matching repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class AddIndexedBranch {
 
@@ -56,17 +56,17 @@
 			jc.usage();
 			return;
 		}
-		
+
 		// create a lowercase set of excluded repositories
 		Set<String> exclusions = new TreeSet<String>();
 		for (String exclude : params.exclusions) {
 			exclusions.add(exclude.toLowerCase());
 		}
-		
+
 		// determine available repositories
 		File folder = new File(params.folder);
 		List<String> repoList = JGitUtils.getRepositoryList(folder, false, true, -1, null);
-		
+
 		int modCount = 0;
 		int skipCount = 0;
 		for (String repo : repoList) {
@@ -77,23 +77,23 @@
 					break;
 				}
 			}
-			
+
 			if (skip) {
 				System.out.println("skipping " + repo);
 				skipCount++;
 				continue;
 			}
 
-			
+
 			try {
 				// load repository config
 				File gitDir = FileKey.resolve(new File(folder, repo), FS.DETECTED);
 				Repository repository = new FileRepositoryBuilder().setGitDir(gitDir).build();
 				StoredConfig config = repository.getConfig();
 				config.load();
-				
+
 				Set<String> indexedBranches = new LinkedHashSet<String>();
-				
+
 				// add all local branches to index
 				if(params.addAllLocalBranches) {
 					List<RefModel> list = JGitUtils.getLocalBranches(repository, true, -1);
@@ -107,7 +107,7 @@
 					System.out.println(MessageFormat.format("adding [gitblit] indexBranch={0} for {1}", params.branch, repo));
 					indexedBranches.add(params.branch);
 				}
-				
+
 				String [] branches = config.getStringList("gitblit", null, "indexBranch");
 				if (!ArrayUtils.isEmpty(branches)) {
 					for (String branch : branches) {
@@ -122,11 +122,11 @@
 				e.printStackTrace();
 			}
 		}
-		
+
 		System.out.println(MessageFormat.format("updated {0} repository configurations, skipped {1}", modCount, skipCount));
 	}
 
-	
+
 
 	/**
 	 * JCommander Parameters class for AddIndexedBranch.
@@ -142,7 +142,7 @@
 
 		@Parameter(names = { "--skip" }, description = "Skip the named repository (simple fizzy matching is supported)", required = false)
 		public List<String> exclusions = new ArrayList<String>();
-		
+
 		@Parameter(names = { "--all-local-branches" }, description = "Add all local branches to index. If specified, the --branch parameter is not considered.", required = false)
 		public boolean addAllLocalBranches = false;
 	}
diff --git a/src/main/java/com/gitblit/AuthenticationFilter.java b/src/main/java/com/gitblit/AuthenticationFilter.java
index 388452e..640bf17 100644
--- a/src/main/java/com/gitblit/AuthenticationFilter.java
+++ b/src/main/java/com/gitblit/AuthenticationFilter.java
@@ -42,11 +42,11 @@
 /**
  * The AuthenticationFilter is a servlet filter that preprocesses requests that
  * match its url pattern definition in the web.xml file.
- * 
+ *
  * http://en.wikipedia.org/wiki/Basic_access_authentication
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class AuthenticationFilter implements Filter {
 
@@ -59,17 +59,17 @@
 	/**
 	 * doFilter does the actual work of preprocessing the request to ensure that
 	 * the user may proceed.
-	 * 
+	 *
 	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
 	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
 	 */
 	@Override
 	public abstract void doFilter(final ServletRequest request, final ServletResponse response,
 			final FilterChain chain) throws IOException, ServletException;
-	
+
 	/**
 	 * Allow the filter to require a client certificate to continue processing.
-	 * 
+	 *
 	 * @return true, if a client certificate is required
 	 */
 	protected boolean requiresClientCertificate() {
@@ -78,7 +78,7 @@
 
 	/**
 	 * Returns the full relative url of the request.
-	 * 
+	 *
 	 * @param httpRequest
 	 * @return url
 	 */
@@ -95,7 +95,7 @@
 
 	/**
 	 * Returns the user making the request, if the user has authenticated.
-	 * 
+	 *
 	 * @param httpRequest
 	 * @return user
 	 */
diff --git a/src/main/java/com/gitblit/BranchGraphServlet.java b/src/main/java/com/gitblit/BranchGraphServlet.java
index 05c3c65..293a291 100644
--- a/src/main/java/com/gitblit/BranchGraphServlet.java
+++ b/src/main/java/com/gitblit/BranchGraphServlet.java
@@ -55,9 +55,9 @@
 
 /**
  * Handles requests for branch graphs
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class BranchGraphServlet extends HttpServlet {
 
@@ -82,7 +82,7 @@
 
 	/**
 	 * Returns an url to this servlet for the specified parameters.
-	 * 
+	 *
 	 * @param baseURL
 	 * @param repository
 	 * @param objectId
@@ -148,7 +148,7 @@
 			}
 
 			// fetch the requested commits plus some extra so that the last
-			// commit displayed *likely* has correct lane assignments  
+			// commit displayed *likely* has correct lane assignments
 			CommitList commitList = new CommitList();
 			commitList.source(rw);
 			commitList.fillTo(2*Math.max(requestedCommits, maxCommits));
@@ -190,7 +190,7 @@
 
 			// create an image buffer and render the lanes
 			BufferedImage image = new BufferedImage(graphWidth, rowHeight*numCommits, BufferedImage.TYPE_INT_ARGB);
-			
+
 			Graphics2D g = null;
 			try {
 				g = image.createGraphics();
diff --git a/src/main/java/com/gitblit/ConfigUserService.java b/src/main/java/com/gitblit/ConfigUserService.java
index 44687b4..6b721a8 100644
--- a/src/main/java/com/gitblit/ConfigUserService.java
+++ b/src/main/java/com/gitblit/ConfigUserService.java
@@ -45,16 +45,16 @@
 /**
  * ConfigUserService is Gitblit's default user service implementation since
  * version 0.8.0.
- * 
+ *
  * Users and their repository memberships are stored in a git-style config file
  * which is cached and dynamically reloaded when modified. This file is
  * plain-text, human-readable, and may be edited with a text editor.
- * 
+ *
  * Additionally, this format allows for expansion of the user model without
  * bringing in the complexity of a database.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ConfigUserService implements IUserService {
 
@@ -63,21 +63,21 @@
 	private static final String USER = "user";
 
 	private static final String PASSWORD = "password";
-	
+
 	private static final String DISPLAYNAME = "displayName";
-	
+
 	private static final String EMAILADDRESS = "emailAddress";
-	
+
 	private static final String ORGANIZATIONALUNIT = "organizationalUnit";
-	
+
 	private static final String ORGANIZATION = "organization";
-	
+
 	private static final String LOCALITY = "locality";
-	
+
 	private static final String STATEPROVINCE = "stateProvince";
-	
+
 	private static final String COUNTRYCODE = "countryCode";
-	
+
 	private static final String COOKIE = "cookie";
 
 	private static final String REPOSITORY = "repository";
@@ -89,9 +89,9 @@
 	private static final String PRERECEIVE = "preReceiveScript";
 
 	private static final String POSTRECEIVE = "postReceiveScript";
-	
+
 	private static final String STARRED = "starred";
-	
+
 	private static final String LOCALE = "locale";
 
 	private final File realmFile;
@@ -105,7 +105,7 @@
 	private final Map<String, TeamModel> teams = new ConcurrentHashMap<String, TeamModel>();
 
 	private volatile long lastModified;
-	
+
 	private volatile boolean forceReload;
 
 	public ConfigUserService(File realmFile) {
@@ -114,7 +114,7 @@
 
 	/**
 	 * Setup the user service.
-	 * 
+	 *
 	 * @param settings
 	 * @since 0.7.0
 	 */
@@ -124,7 +124,7 @@
 
 	/**
 	 * Does the user service support changes to credentials?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
 	 */
@@ -135,7 +135,7 @@
 
 	/**
 	 * Does the user service support changes to user display name?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
 	 */
@@ -146,7 +146,7 @@
 
 	/**
 	 * Does the user service support changes to user email address?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
 	 */
@@ -157,17 +157,18 @@
 
 	/**
 	 * Does the user service support changes to team memberships?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
+	@Override
 	public boolean supportsTeamMembershipChanges() {
 		return true;
 	}
-	
+
 	/**
 	 * Does the user service support cookie authentication?
-	 * 
+	 *
 	 * @return true or false
 	 */
 	@Override
@@ -177,7 +178,7 @@
 
 	/**
 	 * Returns the cookie value for the specified user.
-	 * 
+	 *
 	 * @param model
 	 * @return cookie value
 	 */
@@ -195,7 +196,7 @@
 
 	/**
 	 * Authenticate a user based on their cookie.
-	 * 
+	 *
 	 * @param cookie
 	 * @return a user object or null
 	 */
@@ -210,7 +211,7 @@
 		if (cookies.containsKey(hash)) {
 			model = cookies.get(hash);
 		}
-		
+
 		if (model != null) {
 			// clone the model, otherwise all changes to this object are
 			// live and unpersisted
@@ -221,7 +222,7 @@
 
 	/**
 	 * Authenticate a user based on a username and password.
-	 * 
+	 *
 	 * @param username
 	 * @param password
 	 * @return a user object or null
@@ -255,16 +256,16 @@
 
 	/**
 	 * Logout a user.
-	 * 
+	 *
 	 * @param user
 	 */
 	@Override
-	public void logout(UserModel user) {	
+	public void logout(UserModel user) {
 	}
-	
+
 	/**
 	 * Retrieve the user object for the specified username.
-	 * 
+	 *
 	 * @param username
 	 * @return a user object or null
 	 */
@@ -282,7 +283,7 @@
 
 	/**
 	 * Updates/writes a complete user object.
-	 * 
+	 *
 	 * @param model
 	 * @return true if update is successful
 	 */
@@ -293,7 +294,7 @@
 
 	/**
 	 * Updates/writes all specified user objects.
-	 * 
+	 *
 	 * @param models a list of user models
 	 * @return true if update is successful
 	 * @since 1.2.0
@@ -317,7 +318,7 @@
 						} else {
 							// do not clobber existing team definition
 							// maybe because this is a federated user
-							t.addUser(model.username);							
+							t.addUser(model.username);
 						}
 					}
 
@@ -343,7 +344,7 @@
 	/**
 	 * Updates/writes and replaces a complete user object keyed by username.
 	 * This method allows for renaming a user.
-	 * 
+	 *
 	 * @param username
 	 *            the old username
 	 * @param model
@@ -401,7 +402,7 @@
 
 	/**
 	 * Deletes the user object from the user service.
-	 * 
+	 *
 	 * @param model
 	 * @return true if successful
 	 */
@@ -412,7 +413,7 @@
 
 	/**
 	 * Delete the user object with the specified username
-	 * 
+	 *
 	 * @param username
 	 * @return true if successful
 	 */
@@ -448,7 +449,7 @@
 
 	/**
 	 * Returns the list of all teams available to the login service.
-	 * 
+	 *
 	 * @return list of all teams
 	 * @since 0.8.0
 	 */
@@ -462,7 +463,7 @@
 
 	/**
 	 * Returns the list of all teams available to the login service.
-	 * 
+	 *
 	 * @return list of all teams
 	 * @since 0.8.0
 	 */
@@ -478,7 +479,7 @@
 	/**
 	 * Returns the list of all users who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @return list of all usernames that can bypass the access restriction
@@ -504,7 +505,7 @@
 	/**
 	 * Sets the list of all teams who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @param teamnames
@@ -542,7 +543,7 @@
 
 	/**
 	 * Retrieve the team object for the specified team name.
-	 * 
+	 *
 	 * @param teamname
 	 * @return a team object or null
 	 * @since 0.8.0
@@ -561,7 +562,7 @@
 
 	/**
 	 * Updates/writes a complete team object.
-	 * 
+	 *
 	 * @param model
 	 * @return true if update is successful
 	 * @since 0.8.0
@@ -573,7 +574,7 @@
 
 	/**
 	 * Updates/writes all specified team objects.
-	 * 
+	 *
 	 * @param models a list of team models
 	 * @return true if update is successful
 	 * @since 1.2.0
@@ -596,7 +597,7 @@
 	/**
 	 * Updates/writes and replaces a complete team object keyed by teamname.
 	 * This method allows for renaming a team.
-	 * 
+	 *
 	 * @param teamname
 	 *            the old teamname
 	 * @param model
@@ -628,7 +629,7 @@
 
 	/**
 	 * Deletes the team object from the user service.
-	 * 
+	 *
 	 * @param model
 	 * @return true if successful
 	 * @since 0.8.0
@@ -640,7 +641,7 @@
 
 	/**
 	 * Delete the team object with the specified teamname
-	 * 
+	 *
 	 * @param teamname
 	 * @return true if successful
 	 * @since 0.8.0
@@ -661,7 +662,7 @@
 
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @return list of all usernames
 	 */
 	@Override
@@ -671,10 +672,10 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @return list of all usernames
 	 */
 	@Override
@@ -684,12 +685,12 @@
 		list = DeepCopier.copy(list);
 		Collections.sort(list);
 		return list;
-	}	
+	}
 
 	/**
 	 * Returns the list of all users who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @return list of all usernames that can bypass the access restriction
@@ -715,7 +716,7 @@
 	/**
 	 * Sets the list of all uses who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @param usernames
@@ -754,7 +755,7 @@
 
 	/**
 	 * Renames a repository role.
-	 * 
+	 *
 	 * @param oldRole
 	 * @param newRole
 	 * @return true if successful
@@ -790,7 +791,7 @@
 
 	/**
 	 * Removes a repository role from all users.
-	 * 
+	 *
 	 * @param role
 	 * @return true if successful
 	 */
@@ -820,7 +821,7 @@
 
 	/**
 	 * Writes the properties file.
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	private synchronized void write() throws IOException {
@@ -896,7 +897,7 @@
 				}
 				config.setStringList(USER, model.username, REPOSITORY, permissions);
 			}
-			
+
 			// user preferences
 			if (model.getPreferences() != null) {
 				List<String> starred =  model.getPreferences().getStarredRepositories();
@@ -925,7 +926,7 @@
 				roles.add(Constants.NO_ROLE);
 			}
 			config.setStringList(TEAM, model.name, ROLE, roles);
-			
+
 			if (!model.canAdmin) {
 				// write team permission for non-admin teams
 				if (model.permissions == null) {
@@ -1015,7 +1016,7 @@
 				Set<String> usernames = config.getSubsections(USER);
 				for (String username : usernames) {
 					UserModel user = new UserModel(username.toLowerCase());
-					user.password = config.getString(USER, username, PASSWORD);					
+					user.password = config.getString(USER, username, PASSWORD);
 					user.displayName = config.getString(USER, username, DISPLAYNAME);
 					user.emailAddress = config.getString(USER, username, EMAILADDRESS);
 					user.organizationalUnit = config.getString(USER, username, ORGANIZATIONALUNIT);
@@ -1024,7 +1025,7 @@
 					user.stateProvince = config.getString(USER, username, STATEPROVINCE);
 					user.countryCode = config.getString(USER, username, COUNTRYCODE);
 					user.cookie = config.getString(USER, username, COOKIE);
-					user.getPreferences().locale = config.getString(USER, username, LOCALE);	
+					user.getPreferences().locale = config.getString(USER, username, LOCALE);
 					if (StringUtils.isEmpty(user.cookie) && !StringUtils.isEmpty(user.password)) {
 						user.cookie = StringUtils.getSHA1(user.username + user.password);
 					}
@@ -1071,7 +1072,7 @@
 					team.canAdmin = roles.contains(Constants.ADMIN_ROLE);
 					team.canFork = roles.contains(Constants.FORK_ROLE);
 					team.canCreate = roles.contains(Constants.CREATE_ROLE);
-					
+
 					if (!team.canAdmin) {
 						// non-admin team, read permissions
 						team.addRepositoryPermissions(Arrays.asList(config.getStringList(TEAM, teamname,
diff --git a/src/main/java/com/gitblit/Constants.java b/src/main/java/com/gitblit/Constants.java
index b36321e..1451ccf 100644
--- a/src/main/java/com/gitblit/Constants.java
+++ b/src/main/java/com/gitblit/Constants.java
@@ -26,9 +26,9 @@
 
 /**
  * Constant values used by Gitblit.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class Constants {
 
@@ -37,19 +37,19 @@
 	public static final String FULL_NAME = "Gitblit - a pure Java Git solution";
 
 	public static final String ADMIN_ROLE = "#admin";
-	
+
 	public static final String FORK_ROLE = "#fork";
-	
+
 	public static final String CREATE_ROLE = "#create";
 
 	public static final String NOT_FEDERATED_ROLE = "#notfederated";
-	
+
 	public static final String NO_ROLE = "#none";
-	
+
 	public static final String EXTERNAL_ACCOUNT = "#externalAccount";
 
 	public static final String PROPERTIES_FILE = "gitblit.properties";
-	
+
 	public static final String DEFAULT_USER_REPOSITORY_PREFIX = "~";
 
 	public static final String GIT_PATH = "/git/";
@@ -61,11 +61,11 @@
 	public static final String FEDERATION_PATH = "/federation/";
 
 	public static final String RPC_PATH = "/rpc/";
-	
+
 	public static final String PAGES = "/pages/";
-	
+
 	public static final String SPARKLESHARE_INVITE_PATH = "/sparkleshare/";
-	
+
 	public static final String BRANCH_GRAPH_PATH = "/graph/";
 
 	public static final String BORDER = "***********************************************************";
@@ -73,41 +73,41 @@
 	public static final String FEDERATION_USER = "$gitblit";
 
 	public static final String PROPOSAL_EXT = ".json";
-	
+
 	public static final String ENCODING = "UTF-8";
-	
+
 	public static final int LEN_SHORTLOG = 78;
-	
+
 	public static final int LEN_SHORTLOG_REFS = 60;
-	
+
 	public static final String DEFAULT_BRANCH = "default";
-	
+
 	public static final String CONFIG_GITBLIT = "gitblit";
-	
+
 	public static final String CONFIG_CUSTOM_FIELDS = "customFields";
-	
+
 	public static final String ISO8601 = "yyyy-MM-dd'T'HH:mm:ssZ";
-	
+
 	public static final String baseFolder = "baseFolder";
-	
+
 	public static final String baseFolder$ = "${" + baseFolder + "}";
-	
+
 	public static final String contextFolder$ = "${contextFolder}";
-	
+
 	public static final String HEAD = "HEAD";
 
 	public static final String R_GITBLIT = "refs/gitblit/";
-	
+
 	public static final String R_HEADS = "refs/heads/";
-	
+
 	public static final String R_NOTES = "refs/notes/";
-	
+
 	public static final String R_CHANGES = "refs/changes/";
-	
+
 	public static final String R_PULL= "refs/pull/";
 
 	public static final String R_TAGS = "refs/tags/";
-	
+
 	public static final String R_REMOTES = "refs/remotes/";
 
 	public static String getVersion() {
@@ -121,11 +121,11 @@
 	public static String getGitBlitVersion() {
 		return NAME + " v" + getVersion();
 	}
-	
+
 	public static String getBuildDate() {
 		return getManifestValue("build-date", "PENDING");
 	}
-	
+
 	private static String getManifestValue(String attrib, String defaultValue) {
 		Class<?> clazz = Constants.class;
 		String className = clazz.getSimpleName() + ".class";
@@ -144,13 +144,13 @@
 		}
 		return defaultValue;
 	}
-	
+
 	/**
 	 * Enumeration representing the four access restriction levels.
 	 */
 	public static enum AccessRestrictionType {
 		NONE, PUSH, CLONE, VIEW;
-		
+
 		private static final AccessRestrictionType [] AUTH_TYPES = { PUSH, CLONE, VIEW };
 
 		public static AccessRestrictionType fromName(String name) {
@@ -161,7 +161,7 @@
 			}
 			return NONE;
 		}
-		
+
 		public static List<AccessRestrictionType> choices(boolean allowAnonymousPush) {
 			if (allowAnonymousPush) {
 				return Arrays.asList(values());
@@ -177,10 +177,11 @@
 			return this.ordinal() >= type.ordinal();
 		}
 
+		@Override
 		public String toString() {
 			return name();
 		}
-		
+
 		public boolean isValidPermission(AccessPermission permission) {
 			switch (this) {
 			case VIEW:
@@ -193,7 +194,7 @@
 				return permission.atLeast(AccessPermission.CLONE);
 			case PUSH:
 				// PUSH restriction
-				// only PUSH or greater access permissions are valid 
+				// only PUSH or greater access permissions are valid
 				return permission.atLeast(AccessPermission.PUSH);
 			case NONE:
 				// NO access restriction
@@ -203,14 +204,14 @@
 			return false;
 		}
 	}
-	
+
 	/**
 	 * Enumeration representing the types of authorization control for an
 	 * access restricted resource.
 	 */
 	public static enum AuthorizationControl {
 		AUTHENTICATED, NAMED;
-		
+
 		public static AuthorizationControl fromName(String name) {
 			for (AuthorizationControl type : values()) {
 				if (type.name().equalsIgnoreCase(name)) {
@@ -219,7 +220,8 @@
 			}
 			return NAMED;
 		}
-		
+
+		@Override
 		public String toString() {
 			return name();
 		}
@@ -241,6 +243,7 @@
 			return REPOSITORIES;
 		}
 
+		@Override
 		public String toString() {
 			return name();
 		}
@@ -261,6 +264,7 @@
 			return PULL_REPOSITORIES;
 		}
 
+		@Override
 		public String toString() {
 			return name();
 		}
@@ -337,11 +341,11 @@
 		// Order is important here.  anything above LIST_SETTINGS requires
 		// administrator privileges and web.allowRpcManagement.
 		CLEAR_REPOSITORY_CACHE, GET_PROTOCOL, LIST_REPOSITORIES, LIST_BRANCHES, GET_USER, LIST_SETTINGS,
-		CREATE_REPOSITORY, EDIT_REPOSITORY, DELETE_REPOSITORY, 
-		LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER, 
+		CREATE_REPOSITORY, EDIT_REPOSITORY, DELETE_REPOSITORY,
+		LIST_USERS, CREATE_USER, EDIT_USER, DELETE_USER,
 		LIST_TEAMS, CREATE_TEAM, EDIT_TEAM, DELETE_TEAM,
-		LIST_REPOSITORY_MEMBERS, SET_REPOSITORY_MEMBERS, LIST_REPOSITORY_TEAMS, SET_REPOSITORY_TEAMS, 
-		LIST_REPOSITORY_MEMBER_PERMISSIONS, SET_REPOSITORY_MEMBER_PERMISSIONS, LIST_REPOSITORY_TEAM_PERMISSIONS, SET_REPOSITORY_TEAM_PERMISSIONS, 
+		LIST_REPOSITORY_MEMBERS, SET_REPOSITORY_MEMBERS, LIST_REPOSITORY_TEAMS, SET_REPOSITORY_TEAMS,
+		LIST_REPOSITORY_MEMBER_PERMISSIONS, SET_REPOSITORY_MEMBER_PERMISSIONS, LIST_REPOSITORY_TEAM_PERMISSIONS, SET_REPOSITORY_TEAM_PERMISSIONS,
 		LIST_FEDERATION_REGISTRATIONS, LIST_FEDERATION_RESULTS, LIST_FEDERATION_PROPOSALS, LIST_FEDERATION_SETS,
 		EDIT_SETTINGS, LIST_STATUS;
 
@@ -352,7 +356,7 @@
 				}
 			}
 			return null;
-		}		
+		}
 
 		public boolean exceeds(RpcRequest type) {
 			return this.ordinal() > type.ordinal();
@@ -369,7 +373,7 @@
 	 */
 	public static enum SearchType {
 		AUTHOR, COMMITTER, COMMIT;
-	
+
 		public static SearchType forName(String name) {
 			for (SearchType type : values()) {
 				if (type.name().equalsIgnoreCase(name)) {
@@ -378,13 +382,13 @@
 			}
 			return COMMIT;
 		}
-	
+
 		@Override
 		public String toString() {
 			return name().toLowerCase();
 		}
 	}
-	
+
 	/**
 	 * The types of objects that can be indexed and queried.
 	 */
@@ -400,19 +404,19 @@
 			return null;
 		}
 	}
-	
+
 	/**
-	 * The access permissions available for a repository. 
+	 * The access permissions available for a repository.
 	 */
 	public static enum AccessPermission {
 		NONE("N"), EXCLUDE("X"), VIEW("V"), CLONE("R"), PUSH("RW"), CREATE("RWC"), DELETE("RWD"), REWIND("RW+"), OWNER("RW+");
-		
+
 		public static final AccessPermission [] NEWPERMISSIONS = { EXCLUDE, VIEW, CLONE, PUSH, CREATE, DELETE, REWIND };
-		
+
 		public static AccessPermission LEGACY = REWIND;
-		
+
 		public final String code;
-		
+
 		private AccessPermission(String code) {
 			this.code = code;
 		}
@@ -428,16 +432,16 @@
 		public boolean exceeds(AccessPermission perm) {
 			return ordinal() > perm.ordinal();
 		}
-		
+
 		public String asRole(String repository) {
 			return code + ":" + repository;
 		}
-		
+
 		@Override
 		public String toString() {
 			return code;
 		}
-		
+
 		public static AccessPermission permissionFromRole(String role) {
 			String [] fields = role.split(":", 2);
 			if (fields.length == 1) {
@@ -448,7 +452,7 @@
 				return AccessPermission.fromCode(fields[0]);
 			}
 		}
-		
+
 		public static String repositoryFromRole(String role) {
 			String [] fields = role.split(":", 2);
 			if (fields.length == 1) {
@@ -459,7 +463,7 @@
 				return fields[1];
 			}
 		}
-		
+
 		public static AccessPermission fromCode(String code) {
 			for (AccessPermission perm : values()) {
 				if (perm.code.equalsIgnoreCase(code)) {
@@ -469,18 +473,18 @@
 			return AccessPermission.NONE;
 		}
 	}
-	
+
 	public static enum RegistrantType {
 		REPOSITORY, USER, TEAM;
 	}
-	
+
 	public static enum PermissionType {
 		MISSING, ANONYMOUS, EXPLICIT, TEAM, REGEX, OWNER, ADMINISTRATOR;
 	}
-	
+
 	public static enum GCStatus {
 		READY, COLLECTING;
-		
+
 		public boolean exceeds(GCStatus s) {
 			return ordinal() > s.ordinal();
 		}
@@ -488,23 +492,23 @@
 
 	public static enum AuthenticationType {
 		CREDENTIALS, COOKIE, CERTIFICATE, CONTAINER;
-		
+
 		public boolean isStandard() {
 			return ordinal() <= COOKIE.ordinal();
 		}
 	}
-	
+
 	public static enum AccountType {
 		LOCAL, EXTERNAL, LDAP, REDMINE, SALESFORCE, WINDOWS, PAM, HTPASSWD;
-		
+
 		public boolean isLocal() {
 			return this == LOCAL;
 		}
 	}
-	
+
 	public static enum CommitMessageRenderer {
 		PLAIN, MARKDOWN;
-		
+
 		public static CommitMessageRenderer fromName(String name) {
 			for (CommitMessageRenderer renderer : values()) {
 				if (renderer.name().equalsIgnoreCase(name)) {
diff --git a/src/main/java/com/gitblit/DownloadZipFilter.java b/src/main/java/com/gitblit/DownloadZipFilter.java
index 90a7649..fb57af5 100644
--- a/src/main/java/com/gitblit/DownloadZipFilter.java
+++ b/src/main/java/com/gitblit/DownloadZipFilter.java
@@ -23,15 +23,15 @@
  * The DownloadZipFilter is an AccessRestrictionFilter which ensures that zip
  * requests for view-restricted repositories have proper authentication
  * credentials and are authorized.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class DownloadZipFilter extends AccessRestrictionFilter {
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param url
 	 * @return repository name
 	 */
@@ -47,7 +47,7 @@
 
 	/**
 	 * Analyze the url and returns the action of the request.
-	 * 
+	 *
 	 * @param url
 	 * @return action of the request
 	 */
@@ -58,7 +58,7 @@
 
 	/**
 	 * Determine if a non-existing repository can be created using this filter.
-	 *  
+	 *
 	 * @return true if the filter allows repository creation
 	 */
 	@Override
@@ -68,7 +68,7 @@
 
 	/**
 	 * Determine if the action may be executed on the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if the action may be performed
@@ -80,7 +80,7 @@
 
 	/**
 	 * Determine if the repository requires authentication.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if authentication required
@@ -93,7 +93,7 @@
 	/**
 	 * Determine if the user can access the repository and perform the specified
 	 * action.
-	 * 
+	 *
 	 * @param repository
 	 * @param user
 	 * @param action
diff --git a/src/main/java/com/gitblit/DownloadZipServlet.java b/src/main/java/com/gitblit/DownloadZipServlet.java
index 7cdc54b..c8da267 100644
--- a/src/main/java/com/gitblit/DownloadZipServlet.java
+++ b/src/main/java/com/gitblit/DownloadZipServlet.java
@@ -37,25 +37,25 @@
 /**
  * Streams out a zip file from the specified repository for any tree path at any
  * revision.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class DownloadZipServlet extends HttpServlet {
 
 	private static final long serialVersionUID = 1L;
 
 	private transient Logger logger = LoggerFactory.getLogger(DownloadZipServlet.class);
-	
+
 	public static enum Format {
 		zip(".zip"), tar(".tar"), gz(".tar.gz"), xz(".tar.xz"), bzip2(".tar.bzip2");
-		
+
 		public final String extension;
-		
+
 		Format(String ext) {
 			this.extension = ext;
 		}
-		
+
 		public static Format fromName(String name) {
 			for (Format format : values()) {
 				if (format.name().equalsIgnoreCase(name)) {
@@ -72,7 +72,7 @@
 
 	/**
 	 * Returns an url to this servlet for the specified parameters.
-	 * 
+	 *
 	 * @param baseURL
 	 * @param repository
 	 * @param objectId
@@ -92,7 +92,7 @@
 
 	/**
 	 * Creates a zip stream from the repository of the requested data.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
@@ -106,7 +106,7 @@
 			response.sendError(HttpServletResponse.SC_FORBIDDEN);
 			return;
 		}
-		
+
 		Format format = Format.zip;
 		String repository = request.getParameter("r");
 		String basePath = request.getParameter("p");
@@ -115,7 +115,7 @@
 		if (!StringUtils.isEmpty(f)) {
 			format = Format.fromName(f);
 		}
-		
+
 		try {
 			String name = repository;
 			if (name.indexOf('/') > -1) {
@@ -129,7 +129,7 @@
 			if (!StringUtils.isEmpty(objectId)) {
 				name += "-" + objectId;
 			}
-						
+
 			Repository r = GitBlit.self().getRepository(repository);
 			if (r == null) {
 				if (GitBlit.self().isCollectingGarbage(repository)) {
@@ -174,14 +174,14 @@
 					CompressionUtils.bzip2(r, basePath, objectId, response.getOutputStream());
 					break;
 				}
-				
+
 				response.flushBuffer();
 			} catch (IOException t) {
 				String message = t.getMessage() == null ? "" : t.getMessage().toLowerCase();
 				if (message.contains("reset") || message.contains("broken pipe")) {
 					logger.error("Client aborted zip download: " + message);
 				} else {
-					logger.error("Failed to write attachment to client", t);	
+					logger.error("Failed to write attachment to client", t);
 				}
 			} catch (Throwable t) {
 				logger.error("Failed to write attachment to client", t);
diff --git a/src/main/java/com/gitblit/EnforceAuthenticationFilter.java b/src/main/java/com/gitblit/EnforceAuthenticationFilter.java
index 2a17996..ae91c32 100644
--- a/src/main/java/com/gitblit/EnforceAuthenticationFilter.java
+++ b/src/main/java/com/gitblit/EnforceAuthenticationFilter.java
@@ -41,10 +41,10 @@
  *
  */
 public class EnforceAuthenticationFilter implements Filter {
-	
+
 	protected transient Logger logger = LoggerFactory.getLogger(getClass());
 
-	/* 
+	/*
 	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 	 */
 	@Override
@@ -52,27 +52,27 @@
 		// nothing to be done
 
 	} //init
-	
 
-	/* 
+
+	/*
 	 * This does the actual filtering: is the user authenticated? If not, enforce HTTP authentication (401)
-	 * 
+	 *
 	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
 	 */
 	@Override
 	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-		
+
 		/*
 		 * Determine whether to enforce the BASIC authentication:
 		 */
 		@SuppressWarnings("static-access")
 		Boolean mustForceAuth = GitBlit.self().getBoolean(Keys.web.authenticateViewPages, false)
 								&& GitBlit.self().getBoolean(Keys.web.enforceHttpBasicAuthentication, false);
-		
+
 		HttpServletRequest  HttpRequest  = (HttpServletRequest)request;
-		HttpServletResponse HttpResponse = (HttpServletResponse)response; 
+		HttpServletResponse HttpResponse = (HttpServletResponse)response;
 		UserModel user = GitBlit.self().authenticate(HttpRequest);
-		
+
 		if (mustForceAuth && (user == null)) {
 			// not authenticated, enforce now:
 			logger.debug(MessageFormat.format("EnforceAuthFilter: user not authenticated for URL {0}!", request.toString()));
@@ -85,12 +85,12 @@
 		} else {
 			// user is authenticated, or don't care, continue handling
 			chain.doFilter( request, response );
-			
+
 		} // authenticated
 	} // doFilter
 
-	
-	/* 
+
+	/*
 	 * @see javax.servlet.Filter#destroy()
 	 */
 	@Override
diff --git a/src/main/java/com/gitblit/FederationClient.java b/src/main/java/com/gitblit/FederationClient.java
index d34aadb..6b2161c 100644
--- a/src/main/java/com/gitblit/FederationClient.java
+++ b/src/main/java/com/gitblit/FederationClient.java
@@ -29,9 +29,9 @@
 
 /**
  * Command-line client to pull federated Gitblit repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FederationClient {
 
@@ -75,7 +75,7 @@
 			System.out.println("No Federation Registrations!  Nothing to do.");
 			System.exit(0);
 		}
-		
+
 		// command-line specified repositories folder
 		if (!StringUtils.isEmpty(params.repositoriesFolder)) {
 			settings.overrideSetting(Keys.git.repositoriesFolder, new File(
diff --git a/src/main/java/com/gitblit/FederationPullExecutor.java b/src/main/java/com/gitblit/FederationPullExecutor.java
index 25cd32a..831c7a5 100644
--- a/src/main/java/com/gitblit/FederationPullExecutor.java
+++ b/src/main/java/com/gitblit/FederationPullExecutor.java
@@ -74,7 +74,7 @@
 	/**
 	 * Constructor for specifying a single federation registration. This
 	 * constructor is used to schedule the next pull execution.
-	 * 
+	 *
 	 * @param registration
 	 */
 	private FederationPullExecutor(FederationModel registration) {
@@ -85,7 +85,7 @@
 	 * Constructor to specify a group of federation registrations. This is
 	 * normally used at startup to pull and then schedule the next update based
 	 * on each registrations frequency setting.
-	 * 
+	 *
 	 * @param registrations
 	 * @param isDaemon
 	 *            if true, registrations are rescheduled in perpetuity. if
@@ -137,7 +137,7 @@
 	/**
 	 * Mirrors a repository and, optionally, the server's users, and/or
 	 * configuration settings from a origin Gitblit instance.
-	 * 
+	 *
 	 * @param registration
 	 * @throws Exception
 	 */
@@ -189,12 +189,12 @@
 							repositoryName.indexOf(DOT_GIT_EXT));
 				}
 			}
-			
+
 			// confirm that the origin of any pre-existing repository matches
 			// the clone url
 			String fetchHead = null;
 			Repository existingRepository = GitBlit.self().getRepository(repositoryName);
-			
+
 			if (existingRepository == null && GitBlit.self().isCollectingGarbage(repositoryName)) {
 				logger.warn(MessageFormat.format("Skipping local repository {0}, busy collecting garbage", repositoryName));
 				continue;
@@ -253,13 +253,13 @@
 								String branch = org.eclipse.jgit.lib.Constants.R_HEADS
 										+ ref.displayName.substring(ref.displayName.indexOf('/') + 1);
 								String hash = ref.getReferencedObjectId().getName();
-								
+
 								JGitUtils.setBranchRef(r, branch, hash);
 								logger.info(MessageFormat.format("     resetting {0} of {1} to {2}", branch,
 										repository.name, hash));
 							}
 						}
-						
+
 						String newHead;
 						if (StringUtils.isEmpty(repository.HEAD)) {
 							newHead = newFetchHead;
@@ -298,7 +298,7 @@
 					federationSets.addAll(repository.federationSets);
 				}
 				repository.federationSets = new ArrayList<String>(federationSets);
-				
+
 				// merge indexed branches
 				Set<String> indexedBranches = new HashSet<String>();
 				if (rm.indexedBranches != null) {
@@ -487,7 +487,7 @@
 	/**
 	 * Sends a status acknowledgment to the origin Gitblit instance. This
 	 * includes the results of the federated pull.
-	 * 
+	 *
 	 * @param registration
 	 * @throws Exception
 	 */
@@ -507,7 +507,7 @@
 
 	/**
 	 * Schedules the next check of the federated Gitblit instance.
-	 * 
+	 *
 	 * @param registration
 	 */
 	private void schedule(FederationModel registration) {
diff --git a/src/main/java/com/gitblit/FederationServlet.java b/src/main/java/com/gitblit/FederationServlet.java
index e772050..5db9645 100644
--- a/src/main/java/com/gitblit/FederationServlet.java
+++ b/src/main/java/com/gitblit/FederationServlet.java
@@ -40,9 +40,9 @@
 
 /**
  * Handles federation requests.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FederationServlet extends JsonServlet {
 
@@ -54,7 +54,7 @@
 
 	/**
 	 * Processes a federation request.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
@@ -231,7 +231,7 @@
 					return;
 				}
 				Map<String, String> scripts = new HashMap<String, String>();
-				
+
 				Set<String> names = new HashSet<String>();
 				names.addAll(GitBlit.getStrings(Keys.groovy.preReceiveScripts));
 				names.addAll(GitBlit.getStrings(Keys.groovy.postReceiveScripts));
diff --git a/src/main/java/com/gitblit/FileSettings.java b/src/main/java/com/gitblit/FileSettings.java
index 3a42cad..12739d2 100644
--- a/src/main/java/com/gitblit/FileSettings.java
+++ b/src/main/java/com/gitblit/FileSettings.java
@@ -26,9 +26,9 @@
 /**
  * Dynamically loads and reloads a properties file by keeping track of the last
  * modification date.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FileSettings extends IStoredSettings {
 
@@ -37,7 +37,7 @@
 	private final Properties properties = new Properties();
 
 	private volatile long lastModified;
-	
+
 	private volatile boolean forceReload;
 
 	public FileSettings(String file) {
@@ -83,6 +83,7 @@
 	/**
 	 * Updates the specified settings in the settings file.
 	 */
+	@Override
 	public synchronized boolean saveSettings(Map<String, String> settings) {
 		String content = FileUtils.readContent(propertiesFile, "\n");
 		for (Map.Entry<String, String> setting:settings.entrySet()) {
@@ -98,11 +99,11 @@
 		}
 		FileUtils.writeContent(propertiesFile, content);
 		// manually set the forceReload flag because not all JVMs support real
-		// millisecond resolution of lastModified. (issue-55)		
+		// millisecond resolution of lastModified. (issue-55)
 		forceReload = true;
 		return true;
 	}
-	
+
 	private String regExEscape(String input) {
 		return input.replace(".", "\\.").replace("$", "\\$").replace("{", "\\{");
 	}
diff --git a/src/main/java/com/gitblit/GCExecutor.java b/src/main/java/com/gitblit/GCExecutor.java
index 0a0c8ad..681065b 100644
--- a/src/main/java/com/gitblit/GCExecutor.java
+++ b/src/main/java/com/gitblit/GCExecutor.java
@@ -36,15 +36,15 @@
 
 /**
  * The GC executor handles periodic garbage collection in repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GCExecutor implements Runnable {
 
 	public static enum GCStatus {
 		READY, COLLECTING;
-		
+
 		public boolean exceeds(GCStatus s) {
 			return ordinal() > s.ordinal();
 		}
@@ -52,11 +52,11 @@
 	private final Logger logger = LoggerFactory.getLogger(GCExecutor.class);
 
 	private final IStoredSettings settings;
-	
+
 	private AtomicBoolean running = new AtomicBoolean(false);
-	
+
 	private AtomicBoolean forceClose = new AtomicBoolean(false);
-	
+
 	private final Map<String, GCStatus> gcCache = new ConcurrentHashMap<String, GCStatus>();
 
 	public GCExecutor(IStoredSettings settings) {
@@ -65,24 +65,24 @@
 
 	/**
 	 * Indicates if the GC executor is ready to process repositories.
-	 * 
+	 *
 	 * @return true if the GC executor is ready to process repositories
 	 */
 	public boolean isReady() {
 		return settings.getBoolean(Keys.git.enableGarbageCollection, false);
 	}
-	
+
 	public boolean isRunning() {
 		return running.get();
 	}
-	
+
 	public boolean lock(String repositoryName) {
 		return setGCStatus(repositoryName, GCStatus.COLLECTING);
 	}
 
 	/**
 	 * Tries to set a GCStatus for the specified repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return true if the status has been set
 	 */
@@ -100,7 +100,7 @@
 
 	/**
 	 * Returns true if Gitblit is actively collecting garbage in this repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return true if actively collecting garbage
 	 */
@@ -111,13 +111,13 @@
 
 	/**
 	 * Resets the GC status to ready.
-	 * 
+	 *
 	 * @param repositoryName
 	 */
 	public void releaseLock(String repositoryName) {
 		gcCache.put(repositoryName.toLowerCase(), GCStatus.READY);
 	}
-	
+
 	public void close() {
 		forceClose.set(true);
 	}
@@ -127,8 +127,8 @@
 		if (!isReady()) {
 			return;
 		}
-		
-		running.set(true);		
+
+		running.set(true);
 		Date now = new Date();
 
 		for (String repositoryName : GitBlit.self().getRepositoryList()) {
@@ -149,7 +149,7 @@
 					logger.warn(MessageFormat.format("GCExecutor is missing repository {0}?!?", repositoryName));
 					continue;
 				}
-				
+
 				if (!isRepositoryIdle(repository)) {
 					logger.debug(MessageFormat.format("GCExecutor is skipping {0} because it is not idle", repositoryName));
 					continue;
@@ -162,13 +162,13 @@
 					logger.warn(MessageFormat.format("Can not acquire GC lock for {0}, skipping", repositoryName));
 					continue;
 				}
-				
+
 				logger.debug(MessageFormat.format("GCExecutor locked idle repository {0}", repositoryName));
-				
+
 				Git git = new Git(repository);
 				GarbageCollectCommand gc = git.gc();
 				Properties stats = gc.getStatistics();
-				
+
 				// determine if this is a scheduled GC
 				Calendar cal = Calendar.getInstance();
 				cal.setTime(model.lastGC);
@@ -190,10 +190,10 @@
 				if (hasGarbage && (hasEnoughGarbage || shouldCollectGarbage)) {
 					long looseKB = sizeOfLooseObjects/1024L;
 					logger.info(MessageFormat.format("Collecting {1} KB of loose objects from {0}", repositoryName, looseKB));
-					
+
 					// do the deed
 					gc.call();
-					
+
 					garbageCollected = true;
 				}
 			} catch (Exception e) {
@@ -206,19 +206,19 @@
 						model.lastGC = new Date();
 						GitBlit.self().updateConfiguration(repository, model);
 					}
-				
+
 					repository.close();
 				}
-				
-				// reset the GC lock 
+
+				// reset the GC lock
 				releaseLock(repositoryName);
 				logger.debug(MessageFormat.format("GCExecutor released GC lock for {0}", repositoryName));
 			}
 		}
-		
+
 		running.set(false);
 	}
-	
+
 	private boolean isRepositoryIdle(Repository repository) {
 		try {
 			// Read the use count.
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index c5304b4..cb37b50 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -145,28 +145,28 @@
  * the web ui and the servlets. This class is either directly instantiated by
  * the GitBlitServer class (Gitblit GO) or is reflectively instantiated from the
  * definition in the web.xml file (Gitblit WAR).
- * 
+ *
  * This class is the central logic processor for Gitblit. All settings, user
  * object, and repository object operations pass through this class.
- * 
+ *
  * Repository Resolution. There are two pathways for finding repositories. One
  * pathway, for web ui display and repository authentication & authorization, is
  * within this class. The other pathway is through the standard GitServlet.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitBlit implements ServletContextListener {
 
 	private static GitBlit gitblit;
-	
+
 	private final Logger logger = LoggerFactory.getLogger(GitBlit.class);
 
 	private final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(5);
 
 	private final List<FederationModel> federationRegistrations = Collections
 			.synchronizedList(new ArrayList<FederationModel>());
-	
+
 	private final ObjectCache<Collection<GitClientApplication>> clientApplications = new ObjectCache<Collection<GitClientApplication>>();
 
 	private final Map<String, FederationModel> federationPullResults = new ConcurrentHashMap<String, FederationModel>();
@@ -174,19 +174,19 @@
 	private final ObjectCache<Long> repositorySizeCache = new ObjectCache<Long>();
 
 	private final ObjectCache<List<Metric>> repositoryMetricsCache = new ObjectCache<List<Metric>>();
-	
+
 	private final Map<String, RepositoryModel> repositoryListCache = new ConcurrentHashMap<String, RepositoryModel>();
-	
+
 	private final Map<String, ProjectModel> projectCache = new ConcurrentHashMap<String, ProjectModel>();
-	
+
 	private final AtomicReference<String> repositoryListSettingsChecksum = new AtomicReference<String>("");
-	
+
 	private final ObjectCache<String> projectMarkdownCache = new ObjectCache<String>();
-	
+
 	private final ObjectCache<String> projectRepositoriesMarkdownCache = new ObjectCache<String>();
 
 	private ServletContext servletContext;
-	
+
 	private File baseFolder;
 
 	private File repositoriesFolder;
@@ -200,15 +200,15 @@
 	private ServerStatus serverStatus;
 
 	private MailExecutor mailExecutor;
-	
+
 	private LuceneExecutor luceneExecutor;
-	
+
 	private GCExecutor gcExecutor;
-	
+
 	private TimeZone timezone;
-	
+
 	private FileBasedConfig projectConfigs;
-	
+
 	private FanoutService fanoutService;
 
 	private GitDaemon gitDaemon;
@@ -227,7 +227,7 @@
 
 	/**
 	 * Returns the Gitblit singleton.
-	 * 
+	 *
 	 * @return gitblit singleton
 	 */
 	public static GitBlit self() {
@@ -236,19 +236,19 @@
 		}
 		return gitblit;
 	}
-	
+
 	/**
 	 * Returns the boot date of the Gitblit server.
-	 * 
+	 *
 	 * @return the boot date of Gitblit
 	 */
 	public static Date getBootDate() {
 		return self().serverStatus.bootDate;
 	}
-	
+
 	/**
 	 * Returns the most recent change date of any repository served by Gitblit.
-	 * 
+	 *
 	 * @return a date
 	 */
 	public static Date getLastActivityDate() {
@@ -266,17 +266,17 @@
 
 	/**
 	 * Determine if this is the GO variant of Gitblit.
-	 * 
+	 *
 	 * @return true if this is the GO variant of Gitblit.
 	 */
 	public static boolean isGO() {
 		return self().settings instanceof FileSettings;
 	}
-	
+
 	/**
 	 * Determine if this Gitblit instance is actively serving git repositories
 	 * or if it is merely a repository viewer.
-	 * 
+	 *
 	 * @return true if Gitblit is serving repositories
 	 */
 	public static boolean isServingRepositories() {
@@ -286,7 +286,7 @@
 	/**
 	 * Determine if this Gitblit instance is actively serving git repositories
 	 * or if it is merely a repository viewer.
-	 * 
+	 *
 	 * @return true if Gitblit is serving repositories
 	 */
 	public static boolean isSendingMail() {
@@ -295,7 +295,7 @@
 
 	/**
 	 * Returns the preferred timezone for the Gitblit instance.
-	 * 
+	 *
 	 * @return a timezone
 	 */
 	public static TimeZone getTimezone() {
@@ -309,31 +309,31 @@
 		}
 		return self().timezone;
 	}
-	
+
 	/**
 	 * Returns the active settings.
-	 * 
+	 *
 	 * @return the active settings
 	 */
 	public static IStoredSettings getSettings() {
 		return self().settings;
 	}
-	
+
 	/**
 	 * Returns the user-defined blob encodings.
-	 * 
+	 *
 	 * @return an array of encodings, may be empty
 	 */
 	public static String [] getEncodings() {
 		return getStrings(Keys.web.blobEncodings).toArray(new String[0]);
 	}
-	
+
 
 	/**
 	 * Returns the boolean value for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as a boolean, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getBoolean(String, boolean)
 	 * @param key
 	 * @param defaultValue
@@ -347,7 +347,7 @@
 	 * Returns the integer value for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as an integer, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getInteger(String key, int defaultValue)
 	 * @param key
 	 * @param defaultValue
@@ -361,7 +361,7 @@
 	 * Returns the integer list for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as an integer, an
 	 * empty list is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getIntegers(String key)
 	 * @param key
 	 * @return key value or defaultValue
@@ -369,12 +369,12 @@
 	public static List<Integer> getIntegers(String key) {
 		return self().settings.getIntegers(key);
 	}
-	
+
 	/**
 	 * Returns the value in bytes for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as an integer, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getFilesize(String key, int defaultValue)
 	 * @param key
 	 * @param defaultValue
@@ -388,7 +388,7 @@
 	 * Returns the value in bytes for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as a long, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getFilesize(String key, long defaultValue)
 	 * @param key
 	 * @param defaultValue
@@ -402,7 +402,7 @@
 	 * Returns the char value for the specified key. If the key does not exist
 	 * or the value for the key can not be interpreted as a character, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getChar(String key, char defaultValue)
 	 * @param key
 	 * @param defaultValue
@@ -416,7 +416,7 @@
 	 * Returns the string value for the specified key. If the key does not exist
 	 * or the value for the key can not be interpreted as a string, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getString(String key, String defaultValue)
 	 * @param key
 	 * @param defaultValue
@@ -428,7 +428,7 @@
 
 	/**
 	 * Returns a list of space-separated strings from the specified key.
-	 * 
+	 *
 	 * @see IStoredSettings.getStrings(String key)
 	 * @param n
 	 * @return list of strings
@@ -439,7 +439,7 @@
 
 	/**
 	 * Returns a map of space-separated key-value pairs from the specified key.
-	 * 
+	 *
 	 * @see IStoredSettings.getStrings(String key)
 	 * @param n
 	 * @return map of string, string
@@ -451,7 +451,7 @@
 	/**
 	 * Returns the list of keys whose name starts with the specified prefix. If
 	 * the prefix is null or empty, all key names are returned.
-	 * 
+	 *
 	 * @see IStoredSettings.getAllKeys(String key)
 	 * @param startingWith
 	 * @return list of keys
@@ -463,7 +463,7 @@
 
 	/**
 	 * Is Gitblit running in debug mode?
-	 * 
+	 *
 	 * @return true if Gitblit is running in debug mode
 	 */
 	public static boolean isDebugMode() {
@@ -472,7 +472,7 @@
 
 	/**
 	 * Returns the file object for the specified configuration key.
-	 * 
+	 *
 	 * @return the file
 	 */
 	public static File getFileOrFolder(String key, String defaultFileOrFolder) {
@@ -486,7 +486,7 @@
 	 * file or folder retrievals are (at least initially) funneled through this
 	 * method so it is the correct point to globally override/alter filesystem
 	 * access based on environment or some other indicator.
-	 * 
+	 *
 	 * @return the file
 	 */
 	public static File getFileOrFolder(String fileOrFolder) {
@@ -497,7 +497,7 @@
 	/**
 	 * Returns the path of the repositories folder. This method checks to see if
 	 * Gitblit is running on a cloud service and may return an adjusted path.
-	 * 
+	 *
 	 * @return the repositories folder path
 	 */
 	public static File getRepositoriesFolder() {
@@ -507,7 +507,7 @@
 	/**
 	 * Returns the path of the proposals folder. This method checks to see if
 	 * Gitblit is running on a cloud service and may return an adjusted path.
-	 * 
+	 *
 	 * @return the proposals folder path
 	 */
 	public static File getProposalsFolder() {
@@ -517,16 +517,16 @@
 	/**
 	 * Returns the path of the Groovy folder. This method checks to see if
 	 * Gitblit is running on a cloud service and may return an adjusted path.
-	 * 
+	 *
 	 * @return the Groovy scripts folder path
 	 */
 	public static File getGroovyScriptsFolder() {
 		return getFileOrFolder(Keys.groovy.scriptsFolder, "${baseFolder}/groovy");
 	}
-	
+
 	/**
 	 * Updates the list of server settings.
-	 * 
+	 *
 	 * @param settings
 	 * @return true if the update succeeded
 	 */
@@ -540,10 +540,10 @@
 		serverStatus.heapFree = Runtime.getRuntime().freeMemory();
 		return serverStatus;
 	}
-	
+
 	/**
 	 * Returns a list of repository URLs and the user access permission.
-	 * 
+	 *
 	 * @param request
 	 * @param user
 	 * @param repository
@@ -589,13 +589,13 @@
 		}
 		return list;
 	}
-	
+
 	protected String getRepositoryUrl(HttpServletRequest request, String username, RepositoryModel repository) {
 		StringBuilder sb = new StringBuilder();
 		sb.append(HttpUtils.getGitblitURL(request));
 		sb.append(Constants.GIT_PATH);
 		sb.append(repository.name);
-		
+
 		// inject username into repository url if authentication is required
 		if (repository.accessRestriction.exceeds(AccessRestrictionType.NONE)
 				&& !StringUtils.isEmpty(username)) {
@@ -603,7 +603,7 @@
 		}
 		return sb.toString();
 	}
-	
+
 	protected String getGitDaemonUrl(HttpServletRequest request, UserModel user, RepositoryModel repository) {
 		if (gitDaemon != null) {
 			String bindInterface = settings.getString(Keys.git.daemonBindInterface, "localhost");
@@ -620,7 +620,7 @@
 		}
 		return null;
 	}
-	
+
 	protected AccessPermission getGitDaemonAccessPermission(UserModel user, RepositoryModel repository) {
 		if (gitDaemon != null && user.canClone(repository)) {
 			AccessPermission gitDaemonPermission = user.getRepositoryPermission(repository).permission;
@@ -643,7 +643,7 @@
 	/**
 	 * Returns the list of custom client applications to be used for the
 	 * repository url panel;
-	 * 
+	 *
 	 * @return a collection of client applications
 	 */
 	public Collection<GitClientApplication> getClientApplications() {
@@ -662,13 +662,13 @@
 					if (clients != null) {
 						clientApplications.updateObject("user", lastModified, clients);
 						return clients;
-					}				
+					}
 				} catch (IOException e) {
 					logger.error("Failed to deserialize " + userDefs.getAbsolutePath(), e);
 				}
 			}
 		}
-		
+
 		// no user definitions, use system definitions
 		if (!clientApplications.hasCurrent("system", new Date(0))) {
 			try {
@@ -682,10 +682,10 @@
 				logger.error("Failed to deserialize clientapps.json resource!", e);
 			}
 		}
-		
+
 		return clientApplications.getObject("system");
 	}
-	
+
 	private Collection<GitClientApplication> readClientApplications(InputStream is) {
 		try {
 			Type type = new TypeToken<Collection<GitClientApplication>>() {
@@ -705,7 +705,7 @@
 	/**
 	 * Set the user service. The user service authenticates all users and is
 	 * responsible for managing user permissions.
-	 * 
+	 *
 	 * @param userService
 	 */
 	public void setUserService(IUserService userService) {
@@ -713,14 +713,14 @@
 		this.userService = userService;
 		this.userService.setup(settings);
 	}
-	
+
 	public boolean supportsAddUser() {
 		return supportsCredentialChanges(new UserModel(""));
 	}
-	
+
 	/**
 	 * Returns true if the user's credentials can be changed.
-	 * 
+	 *
 	 * @param user
 	 * @return true if the user service supports credential changes
 	 */
@@ -738,7 +738,7 @@
 
 	/**
 	 * Returns true if the user's display name can be changed.
-	 * 
+	 *
 	 * @param user
 	 * @return true if the user service supports display name changes
 	 */
@@ -748,7 +748,7 @@
 
 	/**
 	 * Returns true if the user's email address can be changed.
-	 * 
+	 *
 	 * @param user
 	 * @return true if the user service supports email address changes
 	 */
@@ -758,7 +758,7 @@
 
 	/**
 	 * Returns true if the user's team memberships can be changed.
-	 * 
+	 *
 	 * @param user
 	 * @return true if the user service supports team membership changes
 	 */
@@ -768,7 +768,7 @@
 
 	/**
 	 * Returns true if the username represents an internal account
-	 * 
+	 *
 	 * @param username
 	 * @return true if the specified username represents an internal account
 	 */
@@ -780,7 +780,7 @@
 
 	/**
 	 * Authenticate a user based on a username and password.
-	 * 
+	 *
 	 * @see IUserService.authenticate(String, char[])
 	 * @param username
 	 * @param password
@@ -817,7 +817,7 @@
 
 	/**
 	 * Authenticate a user based on their cookie.
-	 * 
+	 *
 	 * @param cookies
 	 * @return a user object or null
 	 */
@@ -840,22 +840,22 @@
 
 	/**
 	 * Authenticate a user based on HTTP request parameters.
-	 * 
+	 *
 	 * Authentication by X509Certificate is tried first and then by cookie.
-	 * 
+	 *
 	 * @param httpRequest
 	 * @return a user object or null
 	 */
 	public UserModel authenticate(HttpServletRequest httpRequest) {
 		return authenticate(httpRequest, false);
 	}
-	
+
 	/**
 	 * Authenticate a user based on HTTP request parameters.
-	 * 
+	 *
 	 * Authentication by X509Certificate, servlet container principal, cookie,
 	 * and BASIC header.
-	 * 
+	 *
 	 * @param httpRequest
 	 * @param requiresCertificate
 	 * @return a user object or null
@@ -879,12 +879,12 @@
 						model.username, metadata.serialNumber, httpRequest.getRemoteAddr()));
 			}
 		}
-		
+
 		if (requiresCertificate) {
 			// caller requires client certificate authentication (e.g. git servlet)
 			return null;
 		}
-		
+
 		// try to authenticate by servlet container principal
 		Principal principal = httpRequest.getUserPrincipal();
 		if (principal != null) {
@@ -915,7 +915,7 @@
 				}
 			}
 		}
-		
+
 		// try to authenticate by cookie
 		if (allowCookieAuthentication()) {
 			UserModel user = authenticate(httpRequest.getCookies());
@@ -926,7 +926,7 @@
 				return user;
 			}
 		}
-		
+
 		// try to authenticate by BASIC
 		final String authorization = httpRequest.getHeader("Authorization");
 		if (authorization != null && authorization.startsWith("Basic")) {
@@ -947,14 +947,14 @@
 							user.username, httpRequest.getRemoteAddr()));
 					return user;
 				} else {
-					logger.warn(MessageFormat.format("Failed login attempt for {0}, invalid credentials from {1}", 
+					logger.warn(MessageFormat.format("Failed login attempt for {0}, invalid credentials from {1}",
 							username, httpRequest.getRemoteAddr()));
 				}
 			}
 		}
 		return null;
 	}
-	
+
 	protected void flagWicketSession(AuthenticationType authenticationType) {
 		RequestCycle requestCycle = RequestCycle.get();
 		if (requestCycle != null) {
@@ -977,7 +977,7 @@
 
 	/**
 	 * Sets a cookie for the specified user.
-	 * 
+	 *
 	 * @param response
 	 * @param user
 	 */
@@ -1009,10 +1009,10 @@
 			response.addCookie(userCookie);
 		}
 	}
-	
+
 	/**
 	 * Logout a user.
-	 * 
+	 *
 	 * @param user
 	 */
 	public void logout(UserModel user) {
@@ -1024,27 +1024,27 @@
 
 	/**
 	 * Encode the username for user in an url.
-	 * 
+	 *
 	 * @param name
 	 * @return the encoded name
 	 */
 	protected String encodeUsername(String name) {
-		return name.replace("@", "%40").replace(" ", "%20").replace("\\", "%5C");	
+		return name.replace("@", "%40").replace(" ", "%20").replace("\\", "%5C");
 	}
 
 	/**
 	 * Decode a username from an encoded url.
-	 * 
+	 *
 	 * @param name
 	 * @return the decoded name
 	 */
 	protected String decodeUsername(String name) {
 		return name.replace("%40", "@").replace("%20", " ").replace("%5C", "\\");
 	}
-	
+
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @see IUserService.getAllUsernames()
 	 * @return list of all usernames
 	 */
@@ -1055,7 +1055,7 @@
 
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @see IUserService.getAllUsernames()
 	 * @return list of all usernames
 	 */
@@ -1066,7 +1066,7 @@
 
 	/**
 	 * Delete the user object with the specified username
-	 * 
+	 *
 	 * @see IUserService.deleteUser(String)
 	 * @param username
 	 * @return true if successful
@@ -1078,7 +1078,7 @@
 		String usernameDecoded = decodeUsername(username);
 		return userService.deleteUser(usernameDecoded);
 	}
-	
+
 	protected UserModel getFederationUser() {
 		// the federation user is an administrator
 		UserModel federationUser = new UserModel(Constants.FEDERATION_USER);
@@ -1088,7 +1088,7 @@
 
 	/**
 	 * Retrieve the user object for the specified username.
-	 * 
+	 *
 	 * @see IUserService.getUserModel(String)
 	 * @param username
 	 * @return a user object or null
@@ -1098,14 +1098,14 @@
 			return null;
 		}
 		String usernameDecoded = decodeUsername(username);
-		UserModel user = userService.getUserModel(usernameDecoded);		
+		UserModel user = userService.getUserModel(usernameDecoded);
 		return user;
 	}
-	
+
 	/**
 	 * Returns the effective list of permissions for this user, taking into account
 	 * team memberships, ownerships.
-	 * 
+	 *
 	 * @param user
 	 * @return the effective list of permissions for the user
 	 */
@@ -1140,7 +1140,7 @@
 				set.add(rp);
 			}
 		}
-		
+
 		List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(set);
 		Collections.sort(list);
 		return list;
@@ -1150,7 +1150,7 @@
 	 * Returns the list of users and their access permissions for the specified
 	 * repository including permission source information such as the team or
 	 * regular expression which sets the permission.
-	 * 
+	 *
 	 * @param repository
 	 * @return a list of RegistrantAccessPermissions
 	 */
@@ -1173,10 +1173,10 @@
 		}
 		return list;
 	}
-	
+
 	/**
 	 * Sets the access permissions to the specified repository for the specified users.
-	 * 
+	 *
 	 * @param repository
 	 * @param permissions
 	 * @return true if the user models have been updated
@@ -1193,11 +1193,11 @@
 		}
 		return userService.updateUserModels(users);
 	}
-	
+
 	/**
 	 * Returns the list of all users who have an explicit access permission
 	 * for the specified repository.
-	 * 
+	 *
 	 * @see IUserService.getUsernamesForRepositoryRole(String)
 	 * @param repository
 	 * @return list of all usernames that have an access permission for the repository
@@ -1209,7 +1209,7 @@
 	/**
 	 * Sets the list of all uses who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @see IUserService.setUsernamesForRepositoryRole(String, List<String>)
 	 * @param repository
 	 * @param usernames
@@ -1225,7 +1225,7 @@
 	/**
 	 * Adds/updates a complete user object keyed by username. This method allows
 	 * for renaming a user.
-	 * 
+	 *
 	 * @see IUserService.updateUserModel(String, UserModel)
 	 * @param username
 	 * @param user
@@ -1240,7 +1240,7 @@
 						"Failed to rename ''{0}'' because ''{1}'' already exists.", username,
 						user.username));
 			}
-			
+
 			// rename repositories and owner fields for all repositories
 			for (RepositoryModel model : getRepositoryModels(user)) {
 				if (model.isUsersPersonalRepository(username)) {
@@ -1265,7 +1265,7 @@
 	/**
 	 * Returns the list of available teams that a user or repository may be
 	 * assigned to.
-	 * 
+	 *
 	 * @return the list of teams
 	 */
 	public List<String> getAllTeamnames() {
@@ -1276,7 +1276,7 @@
 	/**
 	 * Returns the list of available teams that a user or repository may be
 	 * assigned to.
-	 * 
+	 *
 	 * @return the list of teams
 	 */
 	public List<TeamModel> getAllTeams() {
@@ -1286,19 +1286,19 @@
 
 	/**
 	 * Returns the TeamModel object for the specified name.
-	 * 
+	 *
 	 * @param teamname
 	 * @return a TeamModel object or null
 	 */
 	public TeamModel getTeamModel(String teamname) {
 		return userService.getTeamModel(teamname);
 	}
-	
+
 	/**
 	 * Returns the list of teams and their access permissions for the specified
 	 * repository including the source of the permission such as the admin flag
 	 * or a regular expression.
-	 * 
+	 *
 	 * @param repository
 	 * @return a list of RegistrantAccessPermissions
 	 */
@@ -1313,10 +1313,10 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Sets the access permissions to the specified repository for the specified teams.
-	 * 
+	 *
 	 * @param repository
 	 * @param permissions
 	 * @return true if the team models have been updated
@@ -1333,11 +1333,11 @@
 		}
 		return userService.updateTeamModels(teams);
 	}
-	
+
 	/**
 	 * Returns the list of all teams who have an explicit access permission for
 	 * the specified repository.
-	 * 
+	 *
 	 * @see IUserService.getTeamnamesForRepositoryRole(String)
 	 * @param repository
 	 * @return list of all teamnames with explicit access permissions to the repository
@@ -1349,7 +1349,7 @@
 	/**
 	 * Sets the list of all uses who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @see IUserService.setTeamnamesForRepositoryRole(String, List<String>)
 	 * @param repository
 	 * @param teamnames
@@ -1364,7 +1364,7 @@
 
 	/**
 	 * Updates the TeamModel object for the specified name.
-	 * 
+	 *
 	 * @param teamname
 	 * @param team
 	 * @param isCreate
@@ -1385,7 +1385,7 @@
 
 	/**
 	 * Delete the team object with the specified teamname
-	 * 
+	 *
 	 * @see IUserService.deleteTeam(String)
 	 * @param teamname
 	 * @return true if successful
@@ -1393,17 +1393,17 @@
 	public boolean deleteTeam(String teamname) {
 		return userService.deleteTeam(teamname);
 	}
-	
+
 	/**
 	 * Adds the repository to the list of cached repositories if Gitblit is
 	 * configured to cache the repository list.
-	 * 
+	 *
 	 * @param model
 	 */
 	private void addToCachedRepositoryList(RepositoryModel model) {
 		if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) {
 			repositoryListCache.put(model.name.toLowerCase(), model);
-			
+
 			// update the fork origin repository with this repository clone
 			if (!StringUtils.isEmpty(model.originRepository)) {
 				if (repositoryListCache.containsKey(model.originRepository)) {
@@ -1413,10 +1413,10 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Removes the repository from the list of cached repositories.
-	 * 
+	 *
 	 * @param name
 	 * @return the model being removed
 	 */
@@ -1429,23 +1429,23 @@
 
 	/**
 	 * Clears all the cached metadata for the specified repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 */
 	private void clearRepositoryMetadataCache(String repositoryName) {
 		repositorySizeCache.remove(repositoryName);
 		repositoryMetricsCache.remove(repositoryName);
 	}
-	
+
 	/**
 	 * Resets the repository list cache.
-	 * 
+	 *
 	 */
 	public void resetRepositoryListCache() {
 		logger.info("Repository cache manually reset");
 		repositoryListCache.clear();
 	}
-	
+
 	/**
 	 * Calculate the checksum of settings that affect the repository list cache.
 	 * @return a checksum
@@ -1460,11 +1460,11 @@
 		String checksum = StringUtils.getSHA1(ns.toString());
 		return checksum;
 	}
-	
+
 	/**
 	 * Compare the last repository list setting checksum to the current checksum.
 	 * If different then clear the cache so that it may be rebuilt.
-	 * 
+	 *
 	 * @return true if the cached repository list is valid since the last check
 	 */
 	private boolean isValidRepositoryList() {
@@ -1481,14 +1481,14 @@
 	/**
 	 * Returns the list of all repositories available to Gitblit. This method
 	 * does not consider user access permissions.
-	 * 
+	 *
 	 * @return list of all repositories
 	 */
 	public List<String> getRepositoryList() {
 		if (repositoryListCache.size() == 0 || !isValidRepositoryList()) {
 			// we are not caching OR we have not yet cached OR the cached list is invalid
 			long startTime = System.currentTimeMillis();
-			List<String> repositories = JGitUtils.getRepositoryList(repositoriesFolder, 
+			List<String> repositories = JGitUtils.getRepositoryList(repositoriesFolder,
 					settings.getBoolean(Keys.git.onlyAccessBareRepositories, false),
 					settings.getBoolean(Keys.git.searchRepositoriesSubfolders, true),
 					settings.getInteger(Keys.git.searchRecursionDepth, -1),
@@ -1505,11 +1505,11 @@
 					// optionally (re)calculate repository sizes
 					msg = "{0} repositories identified with calculated folder sizes in {1} msecs";
 				}
-				
+
 				for (String repository : repositories) {
 					getRepositoryModel(repository);
 				}
-				
+
 				// rebuild fork networks
 				for (RepositoryModel model : repositoryListCache.values()) {
 					if (!StringUtils.isEmpty(model.originRepository)) {
@@ -1519,12 +1519,12 @@
 						}
 					}
 				}
-				
+
 				long duration = System.currentTimeMillis() - startTime;
 				logger.info(MessageFormat.format(msg, repositoryListCache.size(), duration));
 			}
 		}
-		
+
 		// return sorted copy of cached list
 		List<String> list = new ArrayList<String>();
 		for (RepositoryModel model : repositoryListCache.values()) {
@@ -1536,7 +1536,7 @@
 
 	/**
 	 * Returns the JGit repository for the specified name.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return repository or null
 	 */
@@ -1546,7 +1546,7 @@
 
 	/**
 	 * Returns the JGit repository for the specified name.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param logError
 	 * @return repository or null
@@ -1555,7 +1555,7 @@
 		// Decode url-encoded repository name (issue-278)
 		// http://stackoverflow.com/questions/17183110
 		repositoryName = repositoryName.replace("%7E", "~").replace("%7e", "~");
-		
+
 		if (isCollectingGarbage(repositoryName)) {
 			logger.warn(MessageFormat.format("Rejecting request for {0}, busy collecting garbage!", repositoryName));
 			return null;
@@ -1564,7 +1564,7 @@
 		File dir = FileKey.resolve(new File(repositoriesFolder, repositoryName), FS.DETECTED);
 		if (dir == null)
 			return null;
-		
+
 		Repository r = null;
 		try {
 			FileKey key = FileKey.exact(dir, FS.DETECTED);
@@ -1580,7 +1580,7 @@
 
 	/**
 	 * Returns the list of repository models that are accessible to the user.
-	 * 
+	 *
 	 * @param user
 	 * @return list of repository models accessible to user
 	 */
@@ -1611,7 +1611,7 @@
 	/**
 	 * Returns a repository model if the repository exists and the user may
 	 * access the repository.
-	 * 
+	 *
 	 * @param user
 	 * @param repositoryName
 	 * @return repository model or null
@@ -1633,7 +1633,7 @@
 	/**
 	 * Returns the repository model for the specified repository. This method
 	 * does not consider user access permissions.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return repository model or null
 	 */
@@ -1650,7 +1650,7 @@
 			addToCachedRepositoryList(model);
 			return DeepCopier.copy(model);
 		}
-		
+
 		// cached model
 		RepositoryModel model = repositoryListCache.get(repositoryName.toLowerCase());
 
@@ -1669,7 +1669,7 @@
 			logger.error(MessageFormat.format("Repository \"{0}\" is missing! Removing from cache.", repositoryName));
 			return null;
 		}
-		
+
 		FileBasedConfig config = (FileBasedConfig) getRepositoryConfig(r);
 		if (config.isOutdated()) {
 			// reload model
@@ -1678,7 +1678,7 @@
 			removeFromCachedRepositoryList(model.name);
 			addToCachedRepositoryList(model);
 		} else {
-			// update a few repository parameters 
+			// update a few repository parameters
 			if (!model.hasCommits) {
 				// update hasCommits, assume a repository only gains commits :)
 				model.hasCommits = JGitUtils.hasCommits(r);
@@ -1687,14 +1687,14 @@
 			updateLastChangeFields(r, model);
 		}
 		r.close();
-		
+
 		// return a copy of the cached model
 		return DeepCopier.copy(model);
 	}
-	
+
 	/**
 	 * Returns the star count of the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @return the star count
 	 */
@@ -1707,7 +1707,7 @@
 		}
 		return count;
 	}
-	
+
 	private void reloadProjectMarkdown(ProjectModel project) {
 		// project markdown
 		File pmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : project.name) + "/project.mkd");
@@ -1719,7 +1719,7 @@
 			}
 			project.projectMarkdown = projectMarkdownCache.getObject(project.name);
 		}
-		
+
 		// project repositories markdown
 		File rmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : project.name) + "/repositories.mkd");
 		if (rmkd.exists()) {
@@ -1731,17 +1731,17 @@
 			project.repositoriesMarkdown = projectRepositoriesMarkdownCache.getObject(project.name);
 		}
 	}
-	
-	
+
+
 	/**
 	 * Returns the map of project config.  This map is cached and reloaded if
 	 * the underlying projects.conf file changes.
-	 * 
+	 *
 	 * @return project config map
 	 */
 	private Map<String, ProjectModel> getProjectConfigs() {
 		if (projectCache.isEmpty() || projectConfigs.isOutdated()) {
-			
+
 			try {
 				projectConfigs.load();
 			} catch (Exception e) {
@@ -1765,9 +1765,9 @@
 				}
 				project.title = projectConfigs.getString("project", name, "title");
 				project.description = projectConfigs.getString("project", name, "description");
-				
+
 				reloadProjectMarkdown(project);
-				
+
 				configs.put(name.toLowerCase(), project);
 			}
 			projectCache.clear();
@@ -1775,10 +1775,10 @@
 		}
 		return projectCache;
 	}
-	
+
 	/**
 	 * Returns a list of project models for the user.
-	 * 
+	 *
 	 * @param user
 	 * @param includeUsers
 	 * @return list of projects that are accessible to the user
@@ -1790,9 +1790,9 @@
 		Map<String, ProjectModel> map = new TreeMap<String, ProjectModel>();
 		// root project
 		map.put("", configs.get(""));
-		
+
 		for (RepositoryModel model : getRepositoryModels(user)) {
-			String rootPath = StringUtils.getRootPath(model.name).toLowerCase();			
+			String rootPath = StringUtils.getRootPath(model.name).toLowerCase();
 			if (!map.containsKey(rootPath)) {
 				ProjectModel project;
 				if (configs.containsKey(rootPath)) {
@@ -1806,7 +1806,7 @@
 			}
 			map.get(rootPath).addRepository(model);
 		}
-		
+
 		// sort projects, root project first
 		List<ProjectModel> projects;
 		if (includeUsers) {
@@ -1829,10 +1829,10 @@
 		}
 		return projects;
 	}
-	
+
 	/**
 	 * Returns the project model for the specified user.
-	 * 
+	 *
 	 * @param name
 	 * @param user
 	 * @return a project model, or null if it does not exist
@@ -1845,10 +1845,10 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Returns a project model for the Gitblit/system user.
-	 * 
+	 *
 	 * @param name a project name
 	 * @return a project model or null if the project does not exist
 	 */
@@ -1888,16 +1888,16 @@
 			// no repositories == no project
 			return null;
 		}
-		
+
 		reloadProjectMarkdown(project);
 		return project;
 	}
-	
+
 	/**
 	 * Returns the list of project models that are referenced by the supplied
 	 * repository model	list.  This is an alternative method exists to ensure
 	 * Gitblit does not call getRepositoryModels(UserModel) twice in a request.
-	 * 
+	 *
 	 * @param repositoryModels
 	 * @param includeUsers
 	 * @return a list of project models
@@ -1935,7 +1935,7 @@
 		}
 		return new ArrayList<ProjectModel>(projects.values());
 	}
-	
+
 	/**
 	 * Workaround JGit.  I need to access the raw config object directly in order
 	 * to see if the config is dirty so that I can reload a repository model.
@@ -1943,7 +1943,7 @@
 	 * config.  If the config changes are made within Gitblit this is fine as
 	 * the returned config will still be flagged as dirty.  BUT... if the config
 	 * is manipulated outside Gitblit then it fails to recognize this as dirty.
-	 *  
+	 *
 	 * @param r
 	 * @return a config
 	 */
@@ -1958,10 +1958,10 @@
 		}
 		return r.getConfig();
 	}
-	
+
 	/**
 	 * Create a repository model from the configuration and repository data.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return a repositoryModel or null if the repository does not exist
 	 */
@@ -1984,10 +1984,10 @@
 			model.name = repositoryName;
 		}
 		model.projectPath = StringUtils.getFirstPathElement(repositoryName);
-		
+
 		StoredConfig config = r.getConfig();
 		boolean hasOrigin = !StringUtils.isEmpty(config.getString("remote", "origin", "url"));
-		
+
 		if (config != null) {
 			// Initialize description from description file
 			if (getConfig(config,"description", null) == null) {
@@ -2046,7 +2046,7 @@
 					Constants.CONFIG_GITBLIT, null, "indexBranch")));
 			model.metricAuthorExclusions = new ArrayList<String>(Arrays.asList(config.getStringList(
 					Constants.CONFIG_GITBLIT, null, "metricAuthorExclusions")));
-					
+
 			// Custom defined properties
 			model.customFields = new LinkedHashMap<String, String>();
 			for (String aProperty : config.getNames(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS)) {
@@ -2059,7 +2059,7 @@
 		model.hasCommits = JGitUtils.hasCommits(r);
 		updateLastChangeFields(r, model);
 		r.close();
-		
+
 		if (StringUtils.isEmpty(model.originRepository) && model.origin != null && model.origin.startsWith("file://")) {
 			// repository was cloned locally... perhaps as a fork
 			try {
@@ -2070,7 +2070,7 @@
 					File repoFolder = new File(getRepositoriesFolder(), originRepo);
 					if (repoFolder.exists()) {
 						model.originRepository = originRepo.toLowerCase();
-						
+
 						// persist the fork origin
 						updateConfiguration(r, model);
 					}
@@ -2081,20 +2081,20 @@
 		}
 		return model;
 	}
-	
+
 	/**
 	 * Determines if this server has the requested repository.
-	 * 
+	 *
 	 * @param n
 	 * @return true if the repository exists
 	 */
 	public boolean hasRepository(String repositoryName) {
 		return hasRepository(repositoryName, false);
 	}
-	
+
 	/**
 	 * Determines if this server has the requested repository.
-	 * 
+	 *
 	 * @param n
 	 * @param caseInsensitive
 	 * @return true if the repository exists
@@ -2104,7 +2104,7 @@
 			// if we are caching use the cache to determine availability
 			// otherwise we end up adding a phantom repository to the cache
 			return repositoryListCache.containsKey(repositoryName.toLowerCase());
-		}		
+		}
 		Repository r = getRepository(repositoryName, false);
 		if (r == null) {
 			return false;
@@ -2112,11 +2112,11 @@
 		r.close();
 		return true;
 	}
-	
+
 	/**
 	 * Determines if the specified user has a fork of the specified origin
 	 * repository.
-	 * 
+	 *
 	 * @param username
 	 * @param origin
 	 * @return true the if the user has a fork
@@ -2124,11 +2124,11 @@
 	public boolean hasFork(String username, String origin) {
 		return getFork(username, origin) != null;
 	}
-	
+
 	/**
 	 * Gets the name of a user's fork of the specified origin
 	 * repository.
-	 * 
+	 *
 	 * @param username
 	 * @param origin
 	 * @return the name of the user's fork, null otherwise
@@ -2150,7 +2150,7 @@
 						}
 					}
 				}
-				
+
 				if (originModel.originRepository != null) {
 					roots.add(originModel.originRepository);
 					originModel = repositoryListCache.get(originModel.originRepository);
@@ -2159,7 +2159,7 @@
 					originModel = null;
 				}
 			}
-			
+
 			for (String repository : repositoryListCache.keySet()) {
 				if (repository.startsWith(userPath)) {
 					RepositoryModel model = repositoryListCache.get(repository);
@@ -2190,11 +2190,11 @@
 		// user does not have a fork
 		return null;
 	}
-	
+
 	/**
 	 * Returns the fork network for a repository by traversing up the fork graph
 	 * to discover the root and then down through all children of the root node.
-	 * 
+	 *
 	 * @param repository
 	 * @return a ForkModel
 	 */
@@ -2217,7 +2217,7 @@
 			return root;
 		}
 	}
-	
+
 	private ForkModel getForkModelFromCache(String repository) {
 		RepositoryModel model = repositoryListCache.get(repository.toLowerCase());
 		if (model == null) {
@@ -2234,7 +2234,7 @@
 		}
 		return fork;
 	}
-	
+
 	private ForkModel getForkModel(String repository) {
 		RepositoryModel model = getRepositoryModel(repository.toLowerCase());
 		if (model == null) {
@@ -2257,7 +2257,7 @@
 	 * repository.  Gitblit caches the repository sizes to reduce the performance
 	 * penalty of recursive calculation. The cache is updated if the repository
 	 * has been changed since the last calculation.
-	 * 
+	 *
 	 * @param model
 	 * @return size in bytes of the repository
 	 */
@@ -2284,7 +2284,7 @@
 	/**
 	 * Ensure that a cached repository is completely closed and its resources
 	 * are properly released.
-	 * 
+	 *
 	 * @param repositoryName
 	 */
 	private void closeRepository(String repositoryName) {
@@ -2319,7 +2319,7 @@
 				repository.close();
 			}
 		}
-		
+
 		// close any open index writer/searcher in the Lucene executor
 		luceneExecutor.close(repositoryName);
 	}
@@ -2329,7 +2329,7 @@
 	 * This method builds a metrics cache. The cache is updated if the
 	 * repository is updated. A new copy of the metrics list is returned on each
 	 * call so that modifications to the list are non-destructive.
-	 * 
+	 *
 	 * @param model
 	 * @param repository
 	 * @return a new array list of metrics
@@ -2346,7 +2346,7 @@
 	/**
 	 * Returns the gitblit string value for the specified key. If key is not
 	 * set, returns defaultValue.
-	 * 
+	 *
 	 * @param config
 	 * @param field
 	 * @param defaultValue
@@ -2363,7 +2363,7 @@
 	/**
 	 * Returns the gitblit boolean value for the specified key. If key is not
 	 * set, returns defaultValue.
-	 * 
+	 *
 	 * @param config
 	 * @param field
 	 * @param defaultValue
@@ -2372,11 +2372,11 @@
 	private boolean getConfig(StoredConfig config, String field, boolean defaultValue) {
 		return config.getBoolean(Constants.CONFIG_GITBLIT, field, defaultValue);
 	}
-	
+
 	/**
 	 * Returns the gitblit string value for the specified key. If key is not
 	 * set, returns defaultValue.
-	 * 
+	 *
 	 * @param config
 	 * @param field
 	 * @param defaultValue
@@ -2398,11 +2398,11 @@
 	 * Creates/updates the repository model keyed by reopsitoryName. Saves all
 	 * repository settings in .git/config. This method allows for renaming
 	 * repositories and will update user access permissions accordingly.
-	 * 
+	 *
 	 * All repositories created by this method are bare and automatically have
 	 * .git appended to their names, which is the standard convention for bare
 	 * repositories.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param isCreate
@@ -2473,7 +2473,7 @@
 							"Failed to rename repository permissions ''{0}'' to ''{1}''.",
 							repositoryName, repository.name));
 				}
-				
+
 				// rename fork origins in their configs
 				if (!ArrayUtils.isEmpty(repository.forks)) {
 					for (String fork : repository.forks) {
@@ -2491,7 +2491,7 @@
 						rf.close();
 					}
 				}
-				
+
 				// update this repository's origin's fork list
 				if (!StringUtils.isEmpty(repository.originRepository)) {
 					RepositoryModel origin = repositoryListCache.get(repository.originRepository);
@@ -2526,7 +2526,7 @@
 			// only update symbolic head if it changes
 			String currentRef = JGitUtils.getHEADRef(r);
 			if (!StringUtils.isEmpty(repository.HEAD) && !repository.HEAD.equals(currentRef)) {
-				logger.info(MessageFormat.format("Relinking {0} HEAD from {1} to {2}", 
+				logger.info(MessageFormat.format("Relinking {0} HEAD from {1} to {2}",
 						repository.name, currentRef, repository.HEAD));
 				if (JGitUtils.setHEADtoRef(r, repository.HEAD)) {
 					// clear the cache
@@ -2549,10 +2549,10 @@
 		// model will actually be replaced on next load because config is stale
 		addToCachedRepositoryList(repository);
 	}
-	
+
 	/**
 	 * Updates the Gitblit configuration for the specified repository.
-	 * 
+	 *
 	 * @param r
 	 *            the Git repository
 	 * @param repository
@@ -2610,14 +2610,14 @@
 			config.setString(Constants.CONFIG_GITBLIT, null, "commitMessageRenderer",
 					repository.commitMessageRenderer.name());
 		}
-		
+
 		updateList(config, "federationSets", repository.federationSets);
 		updateList(config, "preReceiveScript", repository.preReceiveScripts);
 		updateList(config, "postReceiveScript", repository.postReceiveScripts);
 		updateList(config, "mailingList", repository.mailingLists);
 		updateList(config, "indexBranch", repository.indexedBranches);
 		updateList(config, "metricAuthorExclusions", repository.metricAuthorExclusions);
-		
+
 		// User Defined Properties
 		if (repository.customFields != null) {
 			if (repository.customFields.size() == 0) {
@@ -2639,7 +2639,7 @@
 			logger.error("Failed to save repository config!", e);
 		}
 	}
-	
+
 	private void updateList(StoredConfig config, String field, List<String> list) {
 		// a null list is skipped, not cleared
 		// this is for RPC administration where an older manager might be used
@@ -2656,7 +2656,7 @@
 	/**
 	 * Deletes the repository from the file system and removes the repository
 	 * permission from all repository users.
-	 * 
+	 *
 	 * @param model
 	 * @return true if successful
 	 */
@@ -2667,7 +2667,7 @@
 	/**
 	 * Deletes the repository from the file system and removes the repository
 	 * permission from all repository users.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return true if successful
 	 */
@@ -2676,7 +2676,7 @@
 			closeRepository(repositoryName);
 			// clear the repository cache
 			clearRepositoryMetadataCache(repositoryName);
-			
+
 			RepositoryModel model = removeFromCachedRepositoryList(repositoryName);
 			if (model != null && !ArrayUtils.isEmpty(model.forks)) {
 				resetRepositoryListCache();
@@ -2699,9 +2699,9 @@
 	/**
 	 * Returns an html version of the commit message with any global or
 	 * repository-specific regular expression substitution applied.
-	 * 
+	 *
 	 * This method uses the preferred renderer to transform the commit message.
-	 * 
+	 *
 	 * @param repository
 	 * @param text
 	 * @return html version of the commit message
@@ -2720,16 +2720,16 @@
 			// noop
 			break;
 		}
-		
+
 		return processPlainCommitMessage(repository.name, text);
 	}
-	
+
 	/**
 	 * Returns an html version of the commit message with any global or
 	 * repository-specific regular expression substitution applied.
-	 * 
+	 *
 	 * This method assumes the commit message is plain text.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param text
 	 * @return html version of the commit message
@@ -2738,13 +2738,13 @@
 		String html = StringUtils.escapeForHtml(text, false);
 		html = processCommitMessageRegex(repositoryName, html);
 		return StringUtils.breakLinesForHtml(html);
-		
+
 	}
-	
+
 	/**
 	 * Apply globally or per-repository specified regex substitutions to the
 	 * commit message.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param text
 	 * @return the processed commit message
@@ -2785,7 +2785,7 @@
 
 	/**
 	 * Returns Gitblit's scheduled executor service for scheduling tasks.
-	 * 
+	 *
 	 * @return scheduledExecutor
 	 */
 	public ScheduledExecutorService executor() {
@@ -2833,7 +2833,7 @@
 	/**
 	 * Returns the list of federated gitblit instances that this instance will
 	 * try to pull.
-	 * 
+	 *
 	 * @return list of registered gitblit instances
 	 */
 	public List<FederationModel> getFederationRegistrations() {
@@ -2845,7 +2845,7 @@
 
 	/**
 	 * Retrieve the specified federation registration.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the registration
 	 * @return a federation registration
@@ -2869,7 +2869,7 @@
 
 	/**
 	 * Returns the list of federation sets.
-	 * 
+	 *
 	 * @return list of federation sets
 	 */
 	public List<FederationSet> getFederationSets(String gitblitUrl) {
@@ -2892,7 +2892,7 @@
 
 	/**
 	 * Returns the list of possible federation tokens for this Gitblit instance.
-	 * 
+	 *
 	 * @return list of federation tokens
 	 */
 	public List<String> getFederationTokens() {
@@ -2910,7 +2910,7 @@
 
 	/**
 	 * Returns the specified federation token for this Gitblit instance.
-	 * 
+	 *
 	 * @param type
 	 * @return a federation token
 	 */
@@ -2920,7 +2920,7 @@
 
 	/**
 	 * Returns the specified federation token for this Gitblit instance.
-	 * 
+	 *
 	 * @param value
 	 * @return a federation token
 	 */
@@ -2932,7 +2932,7 @@
 	/**
 	 * Compares the provided token with this Gitblit instance's tokens and
 	 * determines if the requested permission may be granted to the token.
-	 * 
+	 *
 	 * @param req
 	 * @param token
 	 * @return true if the request can be executed
@@ -2958,7 +2958,7 @@
 
 	/**
 	 * Acknowledge and cache the status of a remote Gitblit instance.
-	 * 
+	 *
 	 * @param identification
 	 *            the identification of the pulling Gitblit instance
 	 * @param registration
@@ -2978,7 +2978,7 @@
 
 	/**
 	 * Returns the list of registration results.
-	 * 
+	 *
 	 * @return the list of registration results
 	 */
 	public List<FederationModel> getFederationResultRegistrations() {
@@ -2988,7 +2988,7 @@
 	/**
 	 * Submit a federation proposal. The proposal is cached locally and the
 	 * Gitblit administrator(s) are notified via email.
-	 * 
+	 *
 	 * @param proposal
 	 *            the proposal
 	 * @param gitblitUrl
@@ -3020,7 +3020,7 @@
 
 	/**
 	 * Returns the list of pending federation proposals
-	 * 
+	 *
 	 * @return list of federation proposals
 	 */
 	public List<FederationProposal> getPendingFederationProposals() {
@@ -3046,7 +3046,7 @@
 
 	/**
 	 * Get repositories for the specified token.
-	 * 
+	 *
 	 * @param gitblitUrl
 	 *            the base url of this gitblit instance
 	 * @param token
@@ -3105,7 +3105,7 @@
 
 	/**
 	 * Creates a proposal from the token.
-	 * 
+	 *
 	 * @param gitblitUrl
 	 *            the url of this Gitblit instance
 	 * @param token
@@ -3127,7 +3127,7 @@
 
 	/**
 	 * Returns the proposal identified by the supplied token.
-	 * 
+	 *
 	 * @param token
 	 * @return the specified proposal or null
 	 */
@@ -3143,7 +3143,7 @@
 
 	/**
 	 * Deletes a pending federation proposal.
-	 * 
+	 *
 	 * @param a
 	 *            proposal
 	 * @return true if the proposal was deleted
@@ -3157,7 +3157,7 @@
 	/**
 	 * Returns the list of all Groovy push hook scripts. Script files must have
 	 * .groovy extension
-	 * 
+	 *
 	 * @return list of available hook scripts
 	 */
 	public List<String> getAllScripts() {
@@ -3181,7 +3181,7 @@
 	/**
 	 * Returns the list of pre-receive scripts the repository inherited from the
 	 * global settings and team affiliations.
-	 * 
+	 *
 	 * @param repository
 	 *            if null only the globally specified scripts are returned
 	 * @return a list of scripts
@@ -3213,7 +3213,7 @@
 	 * Returns the list of all available Groovy pre-receive push hook scripts
 	 * that are not already inherited by the repository. Script files must have
 	 * .groovy extension
-	 * 
+	 *
 	 * @param repository
 	 *            optional parameter
 	 * @return list of available hook scripts
@@ -3234,7 +3234,7 @@
 	/**
 	 * Returns the list of post-receive scripts the repository inherited from
 	 * the global settings and team affiliations.
-	 * 
+	 *
 	 * @param repository
 	 *            if null only the globally specified scripts are returned
 	 * @return a list of scripts
@@ -3265,7 +3265,7 @@
 	 * Returns the list of unused Groovy post-receive push hook scripts that are
 	 * not already inherited by the repository. Script files must have .groovy
 	 * extension
-	 * 
+	 *
 	 * @param repository
 	 *            optional parameter
 	 * @return list of available hook scripts
@@ -3282,24 +3282,24 @@
 		}
 		return scripts;
 	}
-	
+
 	/**
 	 * Search the specified repositories using the Lucene query.
-	 * 
+	 *
 	 * @param query
 	 * @param page
 	 * @param pageSize
 	 * @param repositories
 	 * @return
 	 */
-	public List<SearchResult> search(String query, int page, int pageSize, List<String> repositories) {		
+	public List<SearchResult> search(String query, int page, int pageSize, List<String> repositories) {
 		List<SearchResult> srs = luceneExecutor.search(query, page, pageSize, repositories);
 		return srs;
 	}
 
 	/**
 	 * Notify the administrators by email.
-	 * 
+	 *
 	 * @param subject
 	 * @param message
 	 */
@@ -3310,7 +3310,7 @@
 
 	/**
 	 * Notify users by email of something.
-	 * 
+	 *
 	 * @param subject
 	 * @param message
 	 * @param toAddresses
@@ -3321,7 +3321,7 @@
 
 	/**
 	 * Notify users by email of something.
-	 * 
+	 *
 	 * @param subject
 	 * @param message
 	 * @param toAddresses
@@ -3335,16 +3335,16 @@
 			Message mail = mailExecutor.createMessage(toAddresses);
 			if (mail != null) {
 				mail.setSubject(subject);
-				
-				MimeBodyPart messagePart = new MimeBodyPart();				
+
+				MimeBodyPart messagePart = new MimeBodyPart();
 				messagePart.setText(message, "utf-8");
 				messagePart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
 				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
-				
+
 				MimeMultipart multiPart = new MimeMultipart();
 				multiPart.addBodyPart(messagePart);
 				mail.setContent(multiPart);
-				
+
 				mailExecutor.queue(mail);
 			}
 		} catch (MessagingException e) {
@@ -3354,7 +3354,7 @@
 
 	/**
 	 * Notify users by email of something.
-	 * 
+	 *
 	 * @param subject
 	 * @param message
 	 * @param toAddresses
@@ -3365,7 +3365,7 @@
 
 	/**
 	 * Notify users by email of something.
-	 * 
+	 *
 	 * @param subject
 	 * @param message
 	 * @param toAddresses
@@ -3379,12 +3379,12 @@
 			Message mail = mailExecutor.createMessage(toAddresses);
 			if (mail != null) {
 				mail.setSubject(subject);
-				
-				MimeBodyPart messagePart = new MimeBodyPart();				
+
+				MimeBodyPart messagePart = new MimeBodyPart();
 				messagePart.setText(message, "utf-8");
 				messagePart.setHeader("Content-Type", "text/html; charset=\"utf-8\"");
 				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
-				
+
 				MimeMultipart multiPart = new MimeMultipart();
 				multiPart.addBodyPart(messagePart);
 				mail.setContent(multiPart);
@@ -3398,7 +3398,7 @@
 
 	/**
 	 * Returns the descriptions/comments of the Gitblit config settings.
-	 * 
+	 *
 	 * @return SettingsModel
 	 */
 	public ServerSettings getSettingsModel() {
@@ -3411,7 +3411,7 @@
 				setting.name = key;
 				settingsModel.add(setting);
 			}
-			setting.currentValue = settings.getString(key, "");			
+			setting.currentValue = settings.getString(key, "");
 		}
 		settingsModel.pushScripts = getAllScripts();
 		return settingsModel;
@@ -3421,7 +3421,7 @@
 	 * Parse the properties file and aggregate all the comments by the setting
 	 * key. A setting model tracks the current value, the default value, the
 	 * description of the setting and and directives about the setting.
-	 * 
+	 *
 	 * @return Map<String, SettingModel>
 	 */
 	private ServerSettings loadSettingModels() {
@@ -3490,7 +3490,7 @@
 	 * Configure the Gitblit singleton with the specified settings source. This
 	 * source may be file settings (Gitblit GO) or may be web.xml settings
 	 * (Gitblit WAR).
-	 * 
+	 *
 	 * @param settings
 	 */
 	public void configureContext(IStoredSettings settings, File folder, boolean startFederation) {
@@ -3507,7 +3507,7 @@
 		mailExecutor = new MailExecutor(settings);
 		luceneExecutor = new LuceneExecutor(settings, repositoriesFolder);
 		gcExecutor = new GCExecutor(settings);
-		
+
 		// initialize utilities
 		String prefix = settings.getString(Keys.git.userRepositoryPrefix, "~");
 		ModelUtils.setUserRepoPrefix(prefix);
@@ -3520,7 +3520,7 @@
 			logger.info("Identifying available repositories...");
 			getRepositoryList();
 		}
-		
+
 		logTimezone("JVM", TimeZone.getDefault());
 		logTimezone(Constants.NAME, getTimezone());
 
@@ -3538,12 +3538,12 @@
 			}
 			setUserService(loginService);
 		}
-		
+
 		// load and cache the project metadata
 		projectConfigs = new FileBasedConfig(getFileOrFolder(Keys.web.projectsFile, "${baseFolder}/projects.conf"), FS.detect());
 		getProjectConfigs();
-		
-		configureMailExecutor();		
+
+		configureMailExecutor();
 		configureLuceneIndexing();
 		configureGarbageCollector();
 		if (startFederation) {
@@ -3556,7 +3556,7 @@
 
 		ContainerUtils.CVE_2007_0450.test();
 	}
-	
+
 	protected void configureMailExecutor() {
 		if (mailExecutor.isReady()) {
 			logger.info("Mail executor is scheduled to process the message queue every 2 minutes.");
@@ -3565,12 +3565,12 @@
 			logger.warn("Mail server is not properly configured.  Mail services disabled.");
 		}
 	}
-	
+
 	protected void configureLuceneIndexing() {
 		scheduledExecutor.scheduleAtFixedRate(luceneExecutor, 1, 2,  TimeUnit.MINUTES);
 		logger.info("Lucene executor is scheduled to process indexed branches every 2 minutes.");
 	}
-	
+
 	protected void configureGarbageCollector() {
 		// schedule gc engine
 		if (gcExecutor.isReady()) {
@@ -3590,13 +3590,13 @@
 			delay = (int) ((cd.getTime() - now.getTime())/TimeUtils.MIN);
 			String when = delay + " mins";
 			if (delay > 60) {
-				when = MessageFormat.format("{0,number,0.0} hours", ((float)delay)/60f);
+				when = MessageFormat.format("{0,number,0.0} hours", (delay)/60f);
 			}
 			logger.info(MessageFormat.format("Next scheculed GC scan is in {0}", when));
 			scheduledExecutor.scheduleAtFixedRate(gcExecutor, delay, 60*24, TimeUnit.MINUTES);
 		}
 	}
-	
+
 	protected void configureJGit() {
 		// Configure JGit
 		WindowCacheConfig cfg = new WindowCacheConfig();
@@ -3620,7 +3620,7 @@
 			logger.error("Failed to configure JGit parameters!", e);
 		}
 	}
-	
+
 	protected void configureFanout() {
 		// startup Fanout PubSub service
 		if (settings.getInteger(Keys.fanout.port, 0) > 0) {
@@ -3648,7 +3648,7 @@
 			fanoutService.start();
 		}
 	}
-	
+
 	protected void configureGitDaemon() {
 		int port = settings.getInteger(Keys.git.daemonPort, 0);
 		String bindInterface = settings.getString(Keys.git.daemonBindInterface, "localhost");
@@ -3662,7 +3662,7 @@
 			}
 		}
 	}
-	
+
 	protected void configureCommitCache() {
 		int daysToCache = settings.getInteger(Keys.web.activityCacheDays, 14);
 		if (daysToCache <= 0) {
@@ -3698,11 +3698,11 @@
 					daysToCache, commitCount, repoCount, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start)));
 		}
 	}
-	
+
 	protected final Logger getLogger() {
 		return logger;
 	}
-	
+
 	protected final ScheduledExecutorService getScheduledExecutor() {
 		return scheduledExecutor;
 	}
@@ -3710,7 +3710,7 @@
 	protected final LuceneExecutor getLuceneExecutor() {
 		return luceneExecutor;
 	}
-	
+
 	private void logTimezone(String type, TimeZone zone) {
 		SimpleDateFormat df = new SimpleDateFormat("z Z");
 		df.setTimeZone(zone);
@@ -3721,7 +3721,7 @@
 	/**
 	 * Configure Gitblit from the web.xml, if no configuration has already been
 	 * specified.
-	 * 
+	 *
 	 * @see ServletContextListener.contextInitialize(ServletContextEvent)
 	 */
 	@Override
@@ -3734,7 +3734,7 @@
 			String contextRealPath = context.getRealPath("/");
 			File contextFolder = (contextRealPath != null) ? new File(contextRealPath) : null;
 			String openShift = System.getenv("OPENSHIFT_DATA_DIR");
-			
+
 			if (!StringUtils.isEmpty(openShift)) {
 				// Gitblit is running in OpenShift/JBoss
 				File base = new File(openShift);
@@ -3743,7 +3743,7 @@
 				// gitblit.properties setting overrides
 				File overrideFile = new File(base, "gitblit.properties");
 				webxmlSettings.applyOverrides(overrideFile);
-				
+
 				// Copy the included scripts to the configured groovy folder
 				String path = webxmlSettings.getString(Keys.groovy.scriptsFolder, "groovy");
 				File localScripts = com.gitblit.utils.FileUtils.resolveParameter(Constants.baseFolder$, base, path);
@@ -3759,15 +3759,15 @@
 						}
 					}
 				}
-				
+
 				// configure context using the web.xml
 				configureContext(webxmlSettings, base, true);
 			} else {
 				// Gitblit is running in a standard servlet container
 				logger.info("WAR contextFolder is " + ((contextFolder != null) ? contextFolder.getAbsolutePath() : "<empty>"));
-				
+
 				String path = webxmlSettings.getString(Constants.baseFolder, Constants.contextFolder$ + "/WEB-INF/data");
-				
+
 				if (path.contains(Constants.contextFolder$) && contextFolder == null) {
 					// warn about null contextFolder (issue-199)
 					logger.error("");
@@ -3777,7 +3777,7 @@
 					logger.error(MessageFormat.format("OR configure your servlet container to specify a \"{0}\" parameter in the context configuration!!", Constants.baseFolder));
 					logger.error("");
 				}
-				
+
 				File base = com.gitblit.utils.FileUtils.resolveParameter(Constants.contextFolder$, contextFolder, path);
 				base.mkdirs();
 
@@ -3788,15 +3788,15 @@
 				}
 
 				// delegate all config to baseFolder/gitblit.properties file
-				FileSettings settings = new FileSettings(localSettings.getAbsolutePath());				
+				FileSettings settings = new FileSettings(localSettings.getAbsolutePath());
 				configureContext(settings, base, true);
 			}
 		}
-		
+
 		settingsModel = loadSettingModels();
 		serverStatus.servletContainer = servletContext.getServerInfo();
 	}
-	
+
 	protected void extractResources(ServletContext context, String path, File toDir) {
 		for (String resource : context.getResourcePaths(path)) {
 			// extract the resource to the directory if it does not exist
@@ -3861,18 +3861,18 @@
 			gitDaemon.stop();
 		}
 	}
-	
+
 	/**
-	 * 
+	 *
 	 * @return true if we are running the gc executor
 	 */
 	public boolean isCollectingGarbage() {
 		return gcExecutor.isRunning();
 	}
-	
+
 	/**
 	 * Returns true if Gitblit is actively collecting garbage in this repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return true if actively collecting garbage
 	 */
@@ -3883,8 +3883,8 @@
 	/**
 	 * Creates a personal fork of the specified repository. The clone is view
 	 * restricted by default and the owner of the source repository is given
-	 * access to the clone. 
-	 * 
+	 * access to the clone.
+	 *
 	 * @param repository
 	 * @param user
 	 * @return the repository model of the fork, if successful
@@ -3944,7 +3944,7 @@
 			}
 			cloneTeams.add(cloneTeam);
 		}
-		userService.updateTeamModels(cloneTeams);			
+		userService.updateTeamModels(cloneTeams);
 
 		// add this clone to the cached model
 		addToCachedRepositoryList(cloneModel);
@@ -3954,7 +3954,7 @@
 	/**
 	 * Allow to understand if GitBlit supports and is configured to allow
 	 * cookie-based authentication.
-	 * 
+	 *
 	 * @return status of Cookie authentication enablement.
 	 */
 	public boolean allowCookieAuthentication() {
diff --git a/src/main/java/com/gitblit/GitBlitException.java b/src/main/java/com/gitblit/GitBlitException.java
index 7ab0f99..6cf06bc 100644
--- a/src/main/java/com/gitblit/GitBlitException.java
+++ b/src/main/java/com/gitblit/GitBlitException.java
@@ -19,9 +19,9 @@
 
 /**
  * GitBlitException is a marginally useful class. :)
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitBlitException extends IOException {
 
diff --git a/src/main/java/com/gitblit/GitBlitServer.java b/src/main/java/com/gitblit/GitBlitServer.java
index ce05995..ace1f2f 100644
--- a/src/main/java/com/gitblit/GitBlitServer.java
+++ b/src/main/java/com/gitblit/GitBlitServer.java
@@ -75,9 +75,9 @@
  * simplify command line parameter processing. This class also automatically
  * generates a self-signed certificate for localhost, if the keystore does not
  * already exist.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitBlitServer {
 
@@ -85,7 +85,7 @@
 
 	public static void main(String... args) {
 		GitBlitServer server = new GitBlitServer();
-		
+
 		// filter out the baseFolder parameter
 		List<String> filtered = new ArrayList<String>();
 		String folder = "data";
@@ -103,7 +103,7 @@
 				filtered.add(arg);
 			}
 		}
-		
+
 		Params.baseFolder = folder;
 		Params params = new Params();
 		JCommander jc = new JCommander(params);
@@ -125,7 +125,7 @@
 
 	/**
 	 * Display the command line usage of Gitblit GO.
-	 * 
+	 *
 	 * @param jc
 	 * @param t
 	 */
@@ -172,7 +172,7 @@
 		FileSettings settings = params.FILESETTINGS;
 		if (!StringUtils.isEmpty(params.settingsfile)) {
 			if (new File(params.settingsfile).exists()) {
-				settings = new FileSettings(params.settingsfile);				
+				settings = new FileSettings(params.settingsfile);
 			}
 		}
 		logger = LoggerFactory.getLogger(GitBlitServer.class);
@@ -198,7 +198,7 @@
 		String osname = System.getProperty("os.name");
 		String osversion = System.getProperty("os.version");
 		logger.info("Running on " + osname + " (" + osversion + ")");
-		
+
 		List<Connector> connectors = new ArrayList<Connector>();
 
 		// conditionally configure the http connector
@@ -236,7 +236,7 @@
 				NewCertificateConfig certificateConfig = NewCertificateConfig.KEY.parse(config);
 				certificateConfig.update(metadata);
 			}
-			
+
 			metadata.notAfter = new Date(System.currentTimeMillis() + 10*TimeUtils.ONEYEAR);
 			X509Utils.prepareX509Infrastructure(metadata, baseFolder, new X509Log() {
 				@Override
@@ -260,7 +260,7 @@
 				}
 			});
 
-			if (serverKeyStore.exists()) {		        
+			if (serverKeyStore.exists()) {
 				Connector secureConnector = createSSLConnector(params.alias, serverKeyStore, serverTrustStore, params.storePassword,
 						caRevocationList, params.useNIO, params.securePort, settings.getInteger(Keys.server.threadPoolSize, 50), params.requireClientCertificates);
 				String bindInterface = settings.getString(Keys.server.httpsBindInterface, null);
@@ -297,7 +297,7 @@
 
 		// tempDir is where the embedded Gitblit web application is expanded and
 		// where Jetty creates any necessary temporary files
-		File tempDir = com.gitblit.utils.FileUtils.resolveParameter(Constants.baseFolder$, baseFolder, params.temp);		
+		File tempDir = com.gitblit.utils.FileUtils.resolveParameter(Constants.baseFolder$, baseFolder, params.temp);
 		if (tempDir.exists()) {
 			try {
 				FileUtils.delete(tempDir, FileUtils.RECURSIVE | FileUtils.RETRY);
@@ -343,7 +343,7 @@
 		settings.overrideSetting(Keys.realm.userService, params.userService);
 		settings.overrideSetting(Keys.git.repositoriesFolder, params.repositoriesFolder);
 		settings.overrideSetting(Keys.git.daemonPort, params.gitPort);
-		
+
 		// Start up an in-memory LDAP server, if configured
 		try {
 			if (StringUtils.isEmpty(params.ldapLdifFile) == false) {
@@ -354,21 +354,21 @@
 					String rootDN = firstLine.substring(4);
 					String bindUserName = settings.getString(Keys.realm.ldap.username, "");
 					String bindPassword = settings.getString(Keys.realm.ldap.password, "");
-					
+
 					// Get the port
 					int port = ldapUrl.getPort();
 					if (port == -1)
 						port = 389;
-					
+
 					InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(rootDN);
 					config.addAdditionalBindCredentials(bindUserName, bindPassword);
 					config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("default", port));
 					config.setSchema(null);
-					
+
 					InMemoryDirectoryServer ds = new InMemoryDirectoryServer(config);
 					ds.importFromLDIF(true, new LDIFReader(ldifFile));
 					ds.startListening();
-					
+
 					logger.info("LDAP Server started at ldap://localhost:" + port);
 				}
 			}
@@ -400,14 +400,14 @@
 			System.exit(100);
 		}
 	}
-	
+
 	protected GitBlit getGitBlitInstance() {
 		return GitBlit.self();
 	}
 
 	/**
 	 * Creates an http connector.
-	 * 
+	 *
 	 * @param useNIO
 	 * @param port
 	 * @param threadPoolSize
@@ -439,10 +439,10 @@
 
 	/**
 	 * Creates an https connector.
-	 * 
+	 *
 	 * SSL renegotiation will be enabled if the JVM is 1.6.0_22 or later.
 	 * oracle.com/technetwork/java/javase/documentation/tlsreadme2-176330.html
-	 * 
+	 *
 	 * @param certAlias
 	 * @param keyStore
 	 * @param clientTrustStore
@@ -455,7 +455,7 @@
 	 * @return an https connector
 	 */
 	private Connector createSSLConnector(String certAlias, File keyStore, File clientTrustStore,
-			String storePassword, File caRevocationList, boolean useNIO,  int port, int threadPoolSize, 
+			String storePassword, File caRevocationList, boolean useNIO,  int port, int threadPoolSize,
 			boolean requireClientCertificates) {
 		GitblitSslContextFactory factory = new GitblitSslContextFactory(certAlias,
 				keyStore, clientTrustStore, storePassword, caRevocationList);
@@ -486,10 +486,10 @@
 
 		return connector;
 	}
-	
+
 	/**
 	 * Creates an ajp connector.
-	 * 
+	 *
 	 * @param port
 	 * @return an ajp connector
 	 */
@@ -505,7 +505,7 @@
 
 	/**
 	 * Tests to see if the operating system is Windows.
-	 * 
+	 *
 	 * @return true if this is a windows machine
 	 */
 	private boolean isWindows() {
@@ -516,9 +516,9 @@
 	 * The ShutdownMonitorThread opens a socket on a specified port and waits
 	 * for an incoming connection. When that connection is accepted a shutdown
 	 * message is issued to the running Jetty server.
-	 * 
+	 *
 	 * @author James Moger
-	 * 
+	 *
 	 */
 	private static class ShutdownMonitorThread extends Thread {
 
@@ -634,7 +634,7 @@
 		 */
 		@Parameter(names = { "--settings" }, description = "Path to alternative settings")
 		public String settingsfile;
-		
+
 		@Parameter(names = { "--ldapLdifFile" }, description = "Path to LDIF file.  This will cause an in-memory LDAP server to be started according to gitblit settings")
 		public String ldapLdifFile;
 
diff --git a/src/main/java/com/gitblit/GitFilter.java b/src/main/java/com/gitblit/GitFilter.java
index baa7ff0..5e18f5f 100644
--- a/src/main/java/com/gitblit/GitFilter.java
+++ b/src/main/java/com/gitblit/GitFilter.java
@@ -27,9 +27,9 @@
  * The GitFilter is an AccessRestrictionFilter which ensures that Git client
  * requests for push, clone, or view restricted repositories are authenticated
  * and authorized.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitFilter extends AccessRestrictionFilter {
 
@@ -42,7 +42,7 @@
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param cloneUrl
 	 * @return repository name
 	 */
@@ -59,7 +59,7 @@
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param url
 	 * @return repository name
 	 */
@@ -71,7 +71,7 @@
 	/**
 	 * Analyze the url and returns the action of the request. Return values are
 	 * either "/git-receive-pack" or "/git-upload-pack".
-	 * 
+	 *
 	 * @param serverUrl
 	 * @return action of the request
 	 */
@@ -92,20 +92,20 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Determine if a non-existing repository can be created using this filter.
-	 *  
+	 *
 	 * @return true if the server allows repository creation on-push
 	 */
 	@Override
 	protected boolean isCreationAllowed() {
 		return GitBlit.getBoolean(Keys.git.allowCreateOnPush, true);
 	}
-	
+
 	/**
 	 * Determine if the repository can receive pushes.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if the action may be performed
@@ -124,7 +124,7 @@
 
 	/**
 	 * Determine if the repository requires authentication.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if authentication required
@@ -133,7 +133,7 @@
 	protected boolean requiresAuthentication(RepositoryModel repository, String action) {
 		if (gitUploadPack.equals(action)) {
 			// send to client
-			return repository.accessRestriction.atLeast(AccessRestrictionType.CLONE);	
+			return repository.accessRestriction.atLeast(AccessRestrictionType.CLONE);
 		} else if (gitReceivePack.equals(action)) {
 			// receive from client
 			return repository.accessRestriction.atLeast(AccessRestrictionType.PUSH);
@@ -144,7 +144,7 @@
 	/**
 	 * Determine if the user can access the repository and perform the specified
 	 * action.
-	 * 
+	 *
 	 * @param repository
 	 * @param user
 	 * @param action
@@ -155,7 +155,7 @@
 		if (!GitBlit.getBoolean(Keys.git.enableGitServlet, true)) {
 			// Git Servlet disabled
 			return false;
-		}		
+		}
 		if (action.equals(gitReceivePack)) {
 			// Push request
 			if (user.canPush(repository)) {
@@ -179,11 +179,11 @@
 		}
 		return true;
 	}
-	
+
 	/**
 	 * An authenticated user with the CREATE role can create a repository on
 	 * push.
-	 * 
+	 *
 	 * @param user
 	 * @param repository
 	 * @param action
@@ -203,7 +203,7 @@
 				if (repository.contains("/../")) {
 					logger.error(MessageFormat.format("Illegal relative path in repository name! {0}", repository));
 					return null;
-				}					
+				}
 
 				// confirm valid characters in repository name
 				Character c = StringUtils.findInvalidCharacter(repository);
@@ -239,7 +239,7 @@
 				logger.warn(MessageFormat.format("{0} is not permitted to create repository {1} ON-PUSH!", user.username, repository));
 			}
 		}
-		
+
 		// repository could not be created or action was not a push
 		return null;
 	}
diff --git a/src/main/java/com/gitblit/GitblitSslContextFactory.java b/src/main/java/com/gitblit/GitblitSslContextFactory.java
index f025c45..2a4735e 100644
--- a/src/main/java/com/gitblit/GitblitSslContextFactory.java
+++ b/src/main/java/com/gitblit/GitblitSslContextFactory.java
@@ -32,7 +32,7 @@
 /**
  * Special SSL context factory that configures Gitblit GO and replaces the
  * primary trustmanager with a GitblitTrustManager.
- *  
+ *
  * @author James Moger
  */
 public class GitblitSslContextFactory extends SslContextFactory {
@@ -40,11 +40,11 @@
 	private static final Logger logger = LoggerFactory.getLogger(GitblitSslContextFactory.class);
 
 	private final File caRevocationList;
-	
+
 	public GitblitSslContextFactory(String certAlias, File keyStore, File clientTrustStore,
 			String storePassword, File caRevocationList) {
 		super(keyStore.getAbsolutePath());
-		
+
 		this.caRevocationList = caRevocationList;
 
 		// disable renegotiation unless this is a patched JVM
@@ -65,8 +65,8 @@
 			logger.info("   allowing SSL renegotiation on Java " + v);
 			setAllowRenegotiate(allowRenegotiation);
 		}
-		
-		
+
+
 		if (!StringUtils.isEmpty(certAlias)) {
 			logger.info("   certificate alias = " + certAlias);
 			setCertAlias(certAlias);
@@ -74,7 +74,7 @@
 		setKeyStorePassword(storePassword);
 		setTrustStore(clientTrustStore.getAbsolutePath());
 		setTrustStorePassword(storePassword);
-		
+
 		logger.info("   keyStorePath   = " + keyStore.getAbsolutePath());
 		logger.info("   trustStorePath = " + clientTrustStore.getAbsolutePath());
 		logger.info("   crlPath        = " + caRevocationList.getAbsolutePath());
diff --git a/src/main/java/com/gitblit/GitblitTrustManager.java b/src/main/java/com/gitblit/GitblitTrustManager.java
index 4127caf..728a9b1 100644
--- a/src/main/java/com/gitblit/GitblitTrustManager.java
+++ b/src/main/java/com/gitblit/GitblitTrustManager.java
@@ -32,20 +32,20 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * GitblitTrustManager is a wrapper trust manager that hot-reloads a local file 
+ * GitblitTrustManager is a wrapper trust manager that hot-reloads a local file
  * CRL and enforces client certificate revocations.  The GitblitTrustManager
  * also implements fuzzy revocation enforcement in case of issuer mismatch BUT
  * serial number match.  These rejecions are specially noted in the log.
- *  
+ *
  * @author James Moger
  */
 public class GitblitTrustManager implements X509TrustManager {
-	
+
 	private static final Logger logger = LoggerFactory.getLogger(GitblitTrustManager.class);
-	
+
 	private final X509TrustManager delegate;
 	private final File caRevocationList;
-	
+
 	private final AtomicLong lastModified = new AtomicLong(0);
 	private volatile X509CRL crl;
 
@@ -77,7 +77,7 @@
 	public X509Certificate[] getAcceptedIssuers() {
 		return delegate.getAcceptedIssuers();
 	}
-	
+
 	protected boolean isRevoked(X509Certificate cert) {
 		if (!caRevocationList.exists()) {
 			return false;
@@ -88,7 +88,7 @@
 			// exact cert is revoked
 			return true;
 		}
-		
+
 		X509CRLEntry entry = crl.getRevokedCertificate(cert.getSerialNumber());
 		if (entry != null) {
 			logger.warn("Certificate issuer does not match CRL issuer, but serial number has been revoked!");
@@ -96,10 +96,10 @@
 			logger.warn("   crl issuer  = " + crl.getIssuerX500Principal());
 			return true;
 		}
-		
+
 		return false;
 	}
-	
+
 	protected synchronized void read() {
 		if (lastModified.get() == caRevocationList.lastModified()) {
 			return;
diff --git a/src/main/java/com/gitblit/HtpasswdUserService.java b/src/main/java/com/gitblit/HtpasswdUserService.java
index 62198f4..881f843 100644
--- a/src/main/java/com/gitblit/HtpasswdUserService.java
+++ b/src/main/java/com/gitblit/HtpasswdUserService.java
@@ -40,7 +40,7 @@
 
 /**
  * Implementation of a user service using an Apache htpasswd file for authentication.
- * 
+ *
  * This user service implement custom authentication using entries in a file created
  * by the 'htpasswd' program of an Apache web server. All possible output
  * options of the 'htpasswd' program version 2.2 are supported:
@@ -48,7 +48,7 @@
  * glibc crypt() (not on Windows and NetWare),
  * Apache MD5 (apr1),
  * unsalted SHA-1.
- * 
+ *
  * Configuration options:
  * realm.htpasswd.backingUserService - Specify the backing user service that is used
  *                                     to keep the user data other than the password.
@@ -59,7 +59,7 @@
  * realm.htpasswd.overrideLocalAuthentication - Specify if local accounts are overwritten
  *                                              when authentication matches for an
  *                                              external account.
- * 
+ *
  * @author Florian Zschocke
  *
  */
@@ -110,12 +110,12 @@
 
     /**
      * Setup the user service.
-     * 
+     *
      * The HtpasswdUserService extends the GitblitUserService and is thus
      * backed by the available user services provided by the GitblitUserService.
      * In addition the setup tries to read and parse the htpasswd file to be used
      * for authentication.
-     * 
+     *
      * @param settings
      * @since 0.7.0
      */
@@ -238,9 +238,9 @@
 
     /**
      * Determine if the account is to be treated as a local account.
-     * 
+     *
      * This influences authentication. A local account will be authenticated
-     * by the backing user service while an external account will be handled 
+     * by the backing user service while an external account will be handled
      * by this user service.
      * <br/>
      * The decision also depends on the setting of the key
@@ -254,7 +254,8 @@
      * If the key is set to false, then it is determined if the account is local
      * according to the logic of the GitblitUserService.
      */
-    protected boolean isLocalAccount(String username)
+    @Override
+	protected boolean isLocalAccount(String username)
     {
         if ( settings.getBoolean(KEY_OVERRIDE_LOCALAUTH, DEFAULT_OVERRIDE_LOCALAUTH) ) {
             read();
@@ -270,7 +271,8 @@
      *
      * @return AccountType.HTPASSWD
      */
-    protected AccountType getAccountType()
+    @Override
+	protected AccountType getAccountType()
     {
         return AccountType.HTPASSWD;
     }
diff --git a/src/main/java/com/gitblit/IStoredSettings.java b/src/main/java/com/gitblit/IStoredSettings.java
index acb9fc6..33c36ac 100644
--- a/src/main/java/com/gitblit/IStoredSettings.java
+++ b/src/main/java/com/gitblit/IStoredSettings.java
@@ -28,9 +28,9 @@
 
 /**
  * Base class for stored settings implementations.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class IStoredSettings {
 
@@ -53,7 +53,7 @@
 	/**
 	 * Returns the list of keys whose name starts with the specified prefix. If
 	 * the prefix is null or empty, all key names are returned.
-	 * 
+	 *
 	 * @param startingWith
 	 * @return list of keys
 	 */
@@ -78,7 +78,7 @@
 	 * Returns the boolean value for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as a boolean, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @param key
 	 * @param defaultValue
 	 * @return key value or defaultValue
@@ -98,7 +98,7 @@
 	 * Returns the integer value for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as an integer, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @param key
 	 * @param defaultValue
 	 * @return key value or defaultValue
@@ -123,7 +123,7 @@
 	 * Returns the long value for the specified key. If the key does not
 	 * exist or the value for the key can not be interpreted as an long, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @param key
 	 * @param defaultValue
 	 * @return key value or defaultValue
@@ -143,7 +143,7 @@
 		}
 		return defaultValue;
 	}
-	
+
 	/**
 	 * Returns an int filesize from a string value such as 50m or 50mb
 	 * @param name
@@ -158,7 +158,7 @@
 		}
 		return com.gitblit.utils.FileUtils.convertSizeToInt(val, defaultValue);
 	}
-	
+
 	/**
 	 * Returns an long filesize from a string value such as 50m or 50mb
 	 * @param n
@@ -178,7 +178,7 @@
 	 * Returns the char value for the specified key. If the key does not exist
 	 * or the value for the key can not be interpreted as a char, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @param key
 	 * @param defaultValue
 	 * @return key value or defaultValue
@@ -198,7 +198,7 @@
 	 * Returns the string value for the specified key. If the key does not exist
 	 * or the value for the key can not be interpreted as a string, the
 	 * defaultValue is returned.
-	 * 
+	 *
 	 * @param key
 	 * @param defaultValue
 	 * @return key value or defaultValue
@@ -213,11 +213,11 @@
 		}
 		return defaultValue;
 	}
-	
+
 	/**
 	 * Returns the string value for the specified key.  If the key does not
 	 * exist an exception is thrown.
-	 * 
+	 *
 	 * @param key
 	 * @return key value
 	 */
@@ -228,13 +228,13 @@
 			if (value != null) {
 				return value.trim();
 			}
-		}		
+		}
 		throw new RuntimeException("Property (" + name + ") does not exist");
 	}
 
 	/**
 	 * Returns a list of space-separated strings from the specified key.
-	 * 
+	 *
 	 * @param name
 	 * @return list of strings
 	 */
@@ -245,7 +245,7 @@
 	/**
 	 * Returns a list of strings from the specified key using the specified
 	 * string separator.
-	 * 
+	 *
 	 * @param name
 	 * @param separator
 	 * @return list of strings
@@ -259,10 +259,10 @@
 		}
 		return strings;
 	}
-	
+
 	/**
 	 * Returns a list of space-separated integers from the specified key.
-	 * 
+	 *
 	 * @param name
 	 * @return list of strings
 	 */
@@ -273,7 +273,7 @@
 	/**
 	 * Returns a list of integers from the specified key using the specified
 	 * string separator.
-	 * 
+	 *
 	 * @param name
 	 * @param separator
 	 * @return list of integers
@@ -294,10 +294,10 @@
 		}
 		return ints;
 	}
-	
+
 	/**
 	 * Returns a map of strings from the specified key.
-	 * 
+	 *
 	 * @param name
 	 * @return map of string, string
 	 */
@@ -306,7 +306,7 @@
 		for (String string : getStrings(name)) {
 			String[] kvp = string.split("=", 2);
 			String key = kvp[0];
-			String value = kvp[1];				
+			String value = kvp[1];
 			map.put(key,  value);
 		}
 		return map;
@@ -314,7 +314,7 @@
 
 	/**
 	 * Override the specified key with the specified value.
-	 * 
+	 *
 	 * @param key
 	 * @param value
 	 */
@@ -324,7 +324,7 @@
 
 	/**
 	 * Override the specified key with the specified value.
-	 * 
+	 *
 	 * @param key
 	 * @param value
 	 */
@@ -335,7 +335,7 @@
 	/**
 	 * Updates the values for the specified keys and persists the entire
 	 * configuration file.
-	 * 
+	 *
 	 * @param map
 	 *            of key, value pairs
 	 * @return true if successful
diff --git a/src/main/java/com/gitblit/IUserService.java b/src/main/java/com/gitblit/IUserService.java
index a57b0da..628c165 100644
--- a/src/main/java/com/gitblit/IUserService.java
+++ b/src/main/java/com/gitblit/IUserService.java
@@ -24,9 +24,9 @@
 /**
  * Implementations of IUserService control all aspects of UserModel objects and
  * user authentication.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public interface IUserService {
 
@@ -34,7 +34,7 @@
 	 * Setup the user service. This method allows custom implementations to
 	 * retrieve settings from gitblit.properties or the web.xml file without
 	 * relying on the GitBlit static singleton.
-	 * 
+	 *
 	 * @param settings
 	 * @since 0.7.0
 	 */
@@ -42,46 +42,46 @@
 
 	/**
 	 * Does the user service support changes to credentials?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
 	boolean supportsCredentialChanges();
 
 	/**
 	 * Does the user service support changes to user display name?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
 	boolean supportsDisplayNameChanges();
 
 	/**
 	 * Does the user service support changes to user email address?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
 	boolean supportsEmailAddressChanges();
-	
+
 	/**
 	 * Does the user service support changes to team memberships?
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
 	boolean supportsTeamMembershipChanges();
-	
+
 	/**
 	 * Does the user service support cookie authentication?
-	 * 
+	 *
 	 * @return true or false
 	 */
 	boolean supportsCookies();
 
 	/**
 	 * Returns the cookie value for the specified user.
-	 * 
+	 *
 	 * @param model
 	 * @return cookie value
 	 */
@@ -89,7 +89,7 @@
 
 	/**
 	 * Authenticate a user based on their cookie.
-	 * 
+	 *
 	 * @param cookie
 	 * @return a user object or null
 	 */
@@ -97,7 +97,7 @@
 
 	/**
 	 * Authenticate a user based on a username and password.
-	 * 
+	 *
 	 * @param username
 	 * @param password
 	 * @return a user object or null
@@ -106,14 +106,14 @@
 
 	/**
 	 * Logout a user.
-	 * 
+	 *
 	 * @param user
 	 */
 	void logout(UserModel user);
-	
+
 	/**
 	 * Retrieve the user object for the specified username.
-	 * 
+	 *
 	 * @param username
 	 * @return a user object or null
 	 */
@@ -121,7 +121,7 @@
 
 	/**
 	 * Updates/writes a complete user object.
-	 * 
+	 *
 	 * @param model
 	 * @return true if update is successful
 	 */
@@ -129,17 +129,17 @@
 
 	/**
 	 * Updates/writes all specified user objects.
-	 * 
+	 *
 	 * @param models a list of user models
 	 * @return true if update is successful
 	 * @since 1.2.0
 	 */
 	boolean updateUserModels(Collection<UserModel> models);
-	
+
 	/**
 	 * Adds/updates a user object keyed by username. This method allows for
 	 * renaming a user.
-	 * 
+	 *
 	 * @param username
 	 *            the old username
 	 * @param model
@@ -150,7 +150,7 @@
 
 	/**
 	 * Deletes the user object from the user service.
-	 * 
+	 *
 	 * @param model
 	 * @return true if successful
 	 */
@@ -158,7 +158,7 @@
 
 	/**
 	 * Delete the user object with the specified username
-	 * 
+	 *
 	 * @param username
 	 * @return true if successful
 	 */
@@ -166,14 +166,14 @@
 
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @return list of all usernames
 	 */
 	List<String> getAllUsernames();
-	
+
 	/**
 	 * Returns the list of all users available to the login service.
-	 * 
+	 *
 	 * @return list of all users
 	 * @since 0.8.0
 	 */
@@ -181,35 +181,35 @@
 
 	/**
 	 * Returns the list of all teams available to the login service.
-	 * 
+	 *
 	 * @return list of all teams
 	 * @since 0.8.0
-	 */	
+	 */
 	List<String> getAllTeamNames();
-	
+
 	/**
 	 * Returns the list of all teams available to the login service.
-	 * 
+	 *
 	 * @return list of all teams
 	 * @since 0.8.0
-	 */	
+	 */
 	List<TeamModel> getAllTeams();
-	
+
 	/**
 	 * Returns the list of all users who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @return list of all usernames that can bypass the access restriction
 	 * @since 0.8.0
-	 */	
+	 */
 	List<String> getTeamnamesForRepositoryRole(String role);
 
 	/**
 	 * Sets the list of all teams who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @param teamnames
@@ -218,38 +218,38 @@
 	 */
 	@Deprecated
 	boolean setTeamnamesForRepositoryRole(String role, List<String> teamnames);
-	
+
 	/**
 	 * Retrieve the team object for the specified team name.
-	 * 
+	 *
 	 * @param teamname
 	 * @return a team object or null
 	 * @since 0.8.0
-	 */	
+	 */
 	TeamModel getTeamModel(String teamname);
 
 	/**
 	 * Updates/writes a complete team object.
-	 * 
+	 *
 	 * @param model
 	 * @return true if update is successful
 	 * @since 0.8.0
-	 */	
+	 */
 	boolean updateTeamModel(TeamModel model);
 
 	/**
 	 * Updates/writes all specified team objects.
-	 * 
+	 *
 	 * @param models a list of team models
 	 * @return true if update is successful
 	 * @since 1.2.0
-	 */	
+	 */
 	boolean updateTeamModels(Collection<TeamModel> models);
-	
+
 	/**
 	 * Updates/writes and replaces a complete team object keyed by teamname.
 	 * This method allows for renaming a team.
-	 * 
+	 *
 	 * @param teamname
 	 *            the old teamname
 	 * @param model
@@ -261,7 +261,7 @@
 
 	/**
 	 * Deletes the team object from the user service.
-	 * 
+	 *
 	 * @param model
 	 * @return true if successful
 	 * @since 0.8.0
@@ -270,17 +270,17 @@
 
 	/**
 	 * Delete the team object with the specified teamname
-	 * 
+	 *
 	 * @param teamname
 	 * @return true if successful
 	 * @since 0.8.0
-	 */	
+	 */
 	boolean deleteTeam(String teamname);
 
 	/**
 	 * Returns the list of all users who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @return list of all usernames that can bypass the access restriction
@@ -291,7 +291,7 @@
 	/**
 	 * Sets the list of all uses who are allowed to bypass the access
 	 * restriction placed on the specified repository.
-	 * 
+	 *
 	 * @param role
 	 *            the repository name
 	 * @param usernames
@@ -302,7 +302,7 @@
 
 	/**
 	 * Renames a repository role.
-	 * 
+	 *
 	 * @param oldRole
 	 * @param newRole
 	 * @return true if successful
@@ -311,7 +311,7 @@
 
 	/**
 	 * Removes a repository role from all users.
-	 * 
+	 *
 	 * @param role
 	 * @return true if successful
 	 */
@@ -321,5 +321,6 @@
 	 * @See java.lang.Object.toString();
 	 * @return string representation of the login service
 	 */
+	@Override
 	String toString();
 }
diff --git a/src/main/java/com/gitblit/JsonServlet.java b/src/main/java/com/gitblit/JsonServlet.java
index 3ee4a27..286b139 100644
--- a/src/main/java/com/gitblit/JsonServlet.java
+++ b/src/main/java/com/gitblit/JsonServlet.java
@@ -33,20 +33,20 @@
 
 /**
  * Servlet class for interpreting json requests.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class JsonServlet extends HttpServlet {
 
 	private static final long serialVersionUID = 1L;
 
 	protected final int forbiddenCode = HttpServletResponse.SC_FORBIDDEN;
-	
+
 	protected final int notAllowedCode = HttpServletResponse.SC_METHOD_NOT_ALLOWED;
 
 	protected final int failureCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
-	
+
 	protected final Logger logger;
 
 	public JsonServlet() {
@@ -56,7 +56,7 @@
 
 	/**
 	 * Processes an gson request.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
diff --git a/src/main/java/com/gitblit/Launcher.java b/src/main/java/com/gitblit/Launcher.java
index ed465f0..68a9dbf 100644
--- a/src/main/java/com/gitblit/Launcher.java
+++ b/src/main/java/com/gitblit/Launcher.java
@@ -33,9 +33,9 @@
  * folders and then calls the application main. Using this technique we do not
  * have to specify a classpath and we can dynamically add jars to the
  * distribution.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class Launcher {
 
@@ -120,7 +120,7 @@
 
 	/**
 	 * Adds a file to the classpath
-	 * 
+	 *
 	 * @param f
 	 *            the file to be added
 	 * @throws IOException
diff --git a/src/main/java/com/gitblit/LdapUserService.java b/src/main/java/com/gitblit/LdapUserService.java
index b65f9bb..db38c52 100644
--- a/src/main/java/com/gitblit/LdapUserService.java
+++ b/src/main/java/com/gitblit/LdapUserService.java
@@ -49,7 +49,7 @@
 
 /**
  * Implementation of an LDAP user service.
- * 
+ *
  * @author John Crygier
  */
 public class LdapUserService extends GitblitUserService {
@@ -58,7 +58,7 @@
 
 	private IStoredSettings settings;
     private AtomicLong lastLdapUserSync = new AtomicLong(0L);
-	
+
 	public LdapUserService() {
 		super();
 	}
@@ -74,19 +74,19 @@
             throw new IllegalArgumentException(Keys.realm.ldap.ldapCachePeriod + " must have format '<long> <TimeUnit>' where <TimeUnit> is one of 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS'");
         }
     }
-    
+
 	@Override
 	public void setup(IStoredSettings settings) {
 		this.settings = settings;
 		String file = settings.getString(Keys.realm.ldap.backingUserService, "${baseFolder}/users.conf");
 		File realmFile = GitBlit.getFileOrFolder(file);
-		
+
 		serviceImpl = createUserService(realmFile);
 		logger.info("LDAP User Service backed by " + serviceImpl.toString());
-		
+
 		synchronizeLdapUsers();
 	}
-	
+
 	protected synchronized void synchronizeLdapUsers() {
         final boolean enabled = settings.getBoolean(Keys.realm.ldap.synchronizeUsers.enable, false);
         if (enabled) {
@@ -150,7 +150,7 @@
                                 updateTeamModels(userTeams.values());
                             }
                         }
-                        lastLdapUserSync.set(System.currentTimeMillis()); 
+                        lastLdapUserSync.set(System.currentTimeMillis());
                     } finally {
                         ldapConnection.close();
                     }
@@ -158,18 +158,18 @@
             }
         }
     }
-	
+
 	private LDAPConnection getLdapConnection() {
 		try {
 			URI ldapUrl = new URI(settings.getRequiredString(Keys.realm.ldap.server));
 			String bindUserName = settings.getString(Keys.realm.ldap.username, "");
 			String bindPassword = settings.getString(Keys.realm.ldap.password, "");
 			int ldapPort = ldapUrl.getPort();
-			
+
 			if (ldapUrl.getScheme().equalsIgnoreCase("ldaps")) {	// SSL
 				if (ldapPort == -1)	// Default Port
 					ldapPort = 636;
-				
+
 				LDAPConnection conn;
 				SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager());
 				if (StringUtils.isEmpty(bindUserName) && StringUtils.isEmpty(bindPassword)) {
@@ -184,9 +184,9 @@
 
 				LDAPConnection conn;
 				if (StringUtils.isEmpty(bindUserName) && StringUtils.isEmpty(bindPassword)) {
-					conn = new LDAPConnection(ldapUrl.getHost(), ldapPort);	
+					conn = new LDAPConnection(ldapUrl.getHost(), ldapPort);
 				} else {
-					conn = new LDAPConnection(ldapUrl.getHost(), ldapPort, bindUserName, bindPassword);	
+					conn = new LDAPConnection(ldapUrl.getHost(), ldapPort, bindUserName, bindPassword);
 				}
 
 				if (ldapUrl.getScheme().equalsIgnoreCase("ldap+tls")) {
@@ -208,10 +208,10 @@
 		} catch (LDAPException e) {
 			logger.error("Error Connecting to LDAP", e);
 		}
-		
+
 		return null;
 	}
-	
+
 	/**
 	 * Credentials are defined in the LDAP server and can not be manipulated
 	 * from Gitblit.
@@ -223,7 +223,7 @@
 	public boolean supportsCredentialChanges() {
 		return false;
 	}
-	
+
 	/**
 	 * If no displayName pattern is defined then Gitblit can manage the display name.
 	 *
@@ -234,7 +234,7 @@
 	public boolean supportsDisplayNameChanges() {
 		return StringUtils.isEmpty(settings.getString(Keys.realm.ldap.displayName, ""));
 	}
-	
+
 	/**
 	 * If no email pattern is defined then Gitblit can manage the email address.
 	 *
@@ -246,19 +246,20 @@
 		return StringUtils.isEmpty(settings.getString(Keys.realm.ldap.email, ""));
 	}
 
-	
+
 	/**
 	 * If the LDAP server will maintain team memberships then LdapUserService
 	 * will not allow team membership changes.  In this scenario all team
 	 * changes must be made on the LDAP server by the LDAP administrator.
-	 * 
+	 *
 	 * @return true or false
 	 * @since 1.0.0
-	 */	
+	 */
+	@Override
 	public boolean supportsTeamMembershipChanges() {
 		return !settings.getBoolean(Keys.realm.ldap.maintainTeams, false);
 	}
-	
+
 	@Override
 	protected AccountType getAccountType() {
 		 return AccountType.LDAP;
@@ -270,9 +271,9 @@
 			// local account, bypass LDAP authentication
 			return super.authenticate(username, password);
 		}
-		
+
 		String simpleUsername = getSimpleUsername(username);
-		
+
 		LDAPConnection ldapConnection = getLdapConnection();
 		if (ldapConnection != null) {
 			try {
@@ -313,7 +314,7 @@
 									updateTeamModel(userTeam);
 							}
 						}
-						
+
 						return user;
 					}
 				}
@@ -321,14 +322,14 @@
 				ldapConnection.close();
 			}
 		}
-		return null;		
+		return null;
 	}
 
 	/**
 	 * Set the admin attribute from team memberships retrieved from LDAP.
 	 * If we are not storing teams in LDAP and/or we have not defined any
 	 * administrator teams, then do not change the admin flag.
-	 * 
+	 *
 	 * @param user
 	 */
 	private void setAdminAttribute(UserModel user) {
@@ -349,17 +350,17 @@
 			}
 		}
 	}
-	
+
 	private void setUserAttributes(UserModel user, SearchResultEntry userEntry) {
 		// Is this user an admin?
 		setAdminAttribute(user);
-		
+
 		// Don't want visibility into the real password, make up a dummy
 		user.password = Constants.EXTERNAL_ACCOUNT;
 		user.accountType = getAccountType();
-		
+
 		// Get full name Attribute
-		String displayName = settings.getString(Keys.realm.ldap.displayName, "");		
+		String displayName = settings.getString(Keys.realm.ldap.displayName, "");
 		if (!StringUtils.isEmpty(displayName)) {
 			// Replace embedded ${} with attributes
 			if (displayName.contains("${")) {
@@ -374,7 +375,7 @@
 				}
 			}
 		}
-		
+
 		// Get email address Attribute
 		String email = settings.getString(Keys.realm.ldap.email, "");
 		if (!StringUtils.isEmpty(email)) {
@@ -394,39 +395,39 @@
 
 	private void getTeamsFromLdap(LDAPConnection ldapConnection, String simpleUsername, SearchResultEntry loggingInUser, UserModel user) {
 		String loggingInUserDN = loggingInUser.getDN();
-		
+
 		user.teams.clear();		// Clear the users team memberships - we're going to get them from LDAP
 		String groupBase = settings.getString(Keys.realm.ldap.groupBase, "");
 		String groupMemberPattern = settings.getString(Keys.realm.ldap.groupMemberPattern, "(&(objectClass=group)(member=${dn}))");
-		
+
 		groupMemberPattern = StringUtils.replace(groupMemberPattern, "${dn}", escapeLDAPSearchFilter(loggingInUserDN));
 		groupMemberPattern = StringUtils.replace(groupMemberPattern, "${username}", escapeLDAPSearchFilter(simpleUsername));
-		
+
 		// Fill in attributes into groupMemberPattern
 		for (Attribute userAttribute : loggingInUser.getAttributes())
 			groupMemberPattern = StringUtils.replace(groupMemberPattern, "${" + userAttribute.getName() + "}", escapeLDAPSearchFilter(userAttribute.getValue()));
-		
+
 		SearchResult teamMembershipResult = doSearch(ldapConnection, groupBase, groupMemberPattern);
 		if (teamMembershipResult != null && teamMembershipResult.getEntryCount() > 0) {
 			for (int i = 0; i < teamMembershipResult.getEntryCount(); i++) {
 				SearchResultEntry teamEntry = teamMembershipResult.getSearchEntries().get(i);
 				String teamName = teamEntry.getAttribute("cn").getValue();
-				
+
 				TeamModel teamModel = getTeamModel(teamName);
 				if (teamModel == null)
 					teamModel = createTeamFromLdap(teamEntry);
-					
+
 				user.teams.add(teamModel);
 				teamModel.addUser(user.getName());
 			}
 		}
 	}
-	
+
 	private TeamModel createTeamFromLdap(SearchResultEntry teamEntry) {
 		TeamModel answer = new TeamModel(teamEntry.getAttributeValue("cn"));
 		// potentially retrieve other attributes here in the future
-		
-		return answer;		
+
+		return answer;
 	}
 
 	private SearchResult doSearch(LDAPConnection ldapConnection, String base, String filter) {
@@ -434,11 +435,11 @@
 			return ldapConnection.search(base, SearchScope.SUB, filter);
 		} catch (LDAPSearchException e) {
 			logger.error("Problem Searching LDAP", e);
-			
+
 			return null;
 		}
 	}
-	
+
 	private boolean isAuthenticated(LDAPConnection ldapConnection, String userDn, String password) {
 		try {
 			// Binding will stop any LDAP-Injection Attacks since the searched-for user needs to bind to that DN
@@ -461,10 +462,10 @@
         synchronizeLdapUsers();
         return super.getAllUsers();
     }
-	
+
 	/**
 	 * Returns a simple username without any domain prefixes.
-	 * 
+	 *
 	 * @param username
 	 * @return a simple username
 	 */
@@ -473,10 +474,10 @@
 		if (lastSlash > -1) {
 			username = username.substring(lastSlash + 1);
 		}
-		
+
 		return username;
 	}
-	
+
 	// From: https://www.owasp.org/index.php/Preventing_LDAP_Injection_in_Java
 	public static final String escapeLDAPSearchFilter(String filter) {
 		StringBuilder sb = new StringBuilder();
@@ -495,8 +496,8 @@
 			case ')':
 				sb.append("\\29");
 				break;
-			case '\u0000': 
-				sb.append("\\00"); 
+			case '\u0000':
+				sb.append("\\00");
 				break;
 			default:
 				sb.append(curChar);
diff --git a/src/main/java/com/gitblit/LogoServlet.java b/src/main/java/com/gitblit/LogoServlet.java
index 823e464..eb167e7 100644
--- a/src/main/java/com/gitblit/LogoServlet.java
+++ b/src/main/java/com/gitblit/LogoServlet.java
@@ -29,20 +29,20 @@
 
 /**
  * Handles requests for logo.png
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class LogoServlet extends HttpServlet {
-	
+
 	private static final long serialVersionUID = 1L;
-	
+
 	private static final long lastModified = System.currentTimeMillis();
 
 	public LogoServlet() {
 		super();
 	}
-	
+
 	@Override
 	protected long getLastModified(HttpServletRequest req) {
 		File file = GitBlit.getFileOrFolder(Keys.web.headerLogo, "${baseFolder}/logo.png");
@@ -52,7 +52,7 @@
 			return lastModified;
 		}
 	}
-	
+
 	@Override
 	protected void doGet(HttpServletRequest request, HttpServletResponse response)
 			throws ServletException, IOException {
@@ -71,7 +71,7 @@
 				// default logo
 				response.setDateHeader("Last-Modified", lastModified);
 				is = getClass().getResourceAsStream("/logo.png");
-			}			
+			}
 			if (contentType == null) {
 				contentType = "image/png";
 			}
diff --git a/src/main/java/com/gitblit/LuceneExecutor.java b/src/main/java/com/gitblit/LuceneExecutor.java
index 376a763..28523ce 100644
--- a/src/main/java/com/gitblit/LuceneExecutor.java
+++ b/src/main/java/com/gitblit/LuceneExecutor.java
@@ -95,13 +95,13 @@
 
 /**
  * The Lucene executor handles indexing and searching repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class LuceneExecutor implements Runnable {
-	
-		
+
+
 	private static final int INDEX_VERSION = 5;
 
 	private static final String FIELD_OBJECT_TYPE = "type";
@@ -121,20 +121,20 @@
 	private static final String CONF_VERSION = "version";
 	private static final String CONF_ALIAS = "aliases";
 	private static final String CONF_BRANCH = "branches";
-		
+
 	private static final Version LUCENE_VERSION = Version.LUCENE_35;
-	
+
 	private final Logger logger = LoggerFactory.getLogger(LuceneExecutor.class);
-	
+
 	private final IStoredSettings storedSettings;
 	private final File repositoriesFolder;
-	
+
 	private final Map<String, IndexSearcher> searchers = new ConcurrentHashMap<String, IndexSearcher>();
 	private final Map<String, IndexWriter> writers = new ConcurrentHashMap<String, IndexWriter>();
-	
+
 	private final String luceneIgnoreExtensions = "7z arc arj bin bmp dll doc docx exe gif gz jar jpg lib lzh odg odf odt pdf ppt png so swf xcf xls xlsx zip";
 	private Set<String> excludedExtensions;
-	
+
 	public LuceneExecutor(IStoredSettings settings, File repositoriesFolder) {
 		this.storedSettings = settings;
 		this.repositoriesFolder = repositoriesFolder;
@@ -146,7 +146,7 @@
 	}
 
 	/**
-	 * Run is executed by the Gitblit executor service.  Because this is called 
+	 * Run is executed by the Gitblit executor service.  Because this is called
 	 * by an executor service, calls will queue - i.e. there can never be
 	 * concurrent execution of repository index updates.
 	 */
@@ -164,7 +164,7 @@
 			// busy collecting garbage, try again later
 			return;
 		}
-		
+
 		for (String repositoryName: GitBlit.self().getRepositoryList()) {
 			RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
 			if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {
@@ -175,7 +175,7 @@
 					}
 					continue;
 				}
-				index(model, repository);				
+				index(model, repository);
 				repository.close();
 				System.gc();
 			}
@@ -185,7 +185,7 @@
 	/**
 	 * Synchronously indexes a repository. This may build a complete index of a
 	 * repository or it may update an existing index.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the repository
 	 * @param repository
@@ -225,10 +225,10 @@
 			logger.error(MessageFormat.format("Lucene indexing failure for {0}", model.name), t);
 		}
 	}
-	
+
 	/**
 	 * Close the writer/searcher objects for a repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 */
 	public synchronized void close(String repositoryName) {
@@ -240,7 +240,7 @@
 		} catch (Exception e) {
 			logger.error("Failed to close index searcher for " + repositoryName, e);
 		}
-		
+
 		try {
 			IndexWriter writer = writers.remove(repositoryName);
 			if (writer != null) {
@@ -248,12 +248,12 @@
 			}
 		} catch (Exception e) {
 			logger.error("Failed to close index writer for " + repositoryName, e);
-		}		
+		}
 	}
 
 	/**
 	 * Close all Lucene indexers.
-	 * 
+	 *
 	 */
 	public synchronized void close() {
 		// close all writers
@@ -277,10 +277,10 @@
 		searchers.clear();
 	}
 
-	
+
 	/**
 	 * Deletes the Lucene index for the specified repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return true, if successful
 	 */
@@ -306,10 +306,10 @@
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	/**
 	 * Returns the author for the commit, if this information is available.
-	 * 
+	 *
 	 * @param commit
 	 * @return an author or unknown
 	 */
@@ -320,14 +320,14 @@
 			if (StringUtils.isEmpty(name)) {
 				name = commit.getAuthorIdent().getEmailAddress();
 			}
-		} catch (NullPointerException n) {						
+		} catch (NullPointerException n) {
 		}
 		return name;
 	}
-	
+
 	/**
 	 * Returns the committer for the commit, if this information is available.
-	 * 
+	 *
 	 * @param commit
 	 * @return an committer or unknown
 	 */
@@ -338,11 +338,11 @@
 			if (StringUtils.isEmpty(name)) {
 				name = commit.getCommitterIdent().getEmailAddress();
 			}
-		} catch (NullPointerException n) {						
+		} catch (NullPointerException n) {
 		}
 		return name;
 	}
-	
+
 	/**
 	 * Get the tree associated with the given commit.
 	 *
@@ -363,7 +363,7 @@
 
 	/**
 	 * Construct a keyname from the branch.
-	 * 
+	 *
 	 * @param branchName
 	 * @return a keyname appropriate for the Git config file format
 	 */
@@ -373,7 +373,7 @@
 
 	/**
 	 * Returns the Lucene configuration for the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @return a config object
 	 */
@@ -387,7 +387,7 @@
 	 * Reads the Lucene config file for the repository to check the index
 	 * version. If the index version is different, then rebuild the repository
 	 * index.
-	 * 
+	 *
 	 * @param repository
 	 * @return true of the on-disk index format is different than INDEX_VERSION
 	 */
@@ -407,13 +407,13 @@
 	/**
 	 * This completely indexes the repository and will destroy any existing
 	 * index.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @return IndexResult
 	 */
 	public IndexResult reindex(RepositoryModel model, Repository repository) {
-		IndexResult result = new IndexResult();		
+		IndexResult result = new IndexResult();
 		if (!deleteIndex(model.name)) {
 			return result;
 		}
@@ -434,12 +434,12 @@
 				}
 				tags.get(tag.getReferencedObjectId().getName()).add(tag.displayName);
 			}
-			
+
 			ObjectReader reader = repository.newObjectReader();
 
 			// get the local branches
 			List<RefModel> branches = JGitUtils.getLocalBranches(repository, true, -1);
-			
+
 			// sort them by most recently updated
 			Collections.sort(branches, new Comparator<RefModel>() {
 				@Override
@@ -447,7 +447,7 @@
 					return ref2.getDate().compareTo(ref1.getDate());
 				}
 			});
-			
+
 			// reorder default branch to first position
 			RefModel defaultBranch = null;
 			ObjectId defaultBranchId = JGitUtils.getDefaultBranch(repository);
@@ -459,7 +459,7 @@
 			}
 			branches.remove(defaultBranch);
 			branches.add(0, defaultBranch);
-			
+
 			// walk through each branch
 			for (RefModel branch : branches) {
 
@@ -475,7 +475,7 @@
 					// normal explicit branch check
 					indexBranch = model.indexedBranches.contains(branch.getName());
 				}
-				
+
 				// if this branch is not specifically indexed then skip
 				if (!indexBranch) {
 					continue;
@@ -493,22 +493,22 @@
 				// index the blob contents of the tree
 				TreeWalk treeWalk = new TreeWalk(repository);
 				treeWalk.addTree(tip.getTree());
-				treeWalk.setRecursive(true);								
-				
+				treeWalk.setRecursive(true);
+
 				Map<String, ObjectId> paths = new TreeMap<String, ObjectId>();
 				while (treeWalk.next()) {
 					// ensure path is not in a submodule
 					if (treeWalk.getFileMode(0) != FileMode.GITLINK) {
 						paths.put(treeWalk.getPathString(), treeWalk.getObjectId(0));
 					}
-				}				
+				}
 
 				ByteArrayOutputStream os = new ByteArrayOutputStream();
 				byte[] tmp = new byte[32767];
 
 				RevWalk commitWalk = new RevWalk(reader);
 				commitWalk.markStart(tip);
-				
+
 				RevCommit commit;
 				while ((paths.size() > 0) && (commit = commitWalk.next()) != null) {
 					TreeWalk diffWalk = new TreeWalk(reader);
@@ -532,17 +532,17 @@
 						if (!paths.containsKey(path)) {
 							continue;
 						}
-						
+
 						// remove path from set
 						ObjectId blobId = paths.remove(path);
 						result.blobCount++;
-						
+
 						// index the blob metadata
 						String blobAuthor = getAuthor(commit);
 						String blobCommitter = getCommitter(commit);
 						String blobDate = DateTools.timeToString(commit.getCommitTime() * 1000L,
 								Resolution.MINUTE);
-						
+
 						Document doc = new Document();
 						doc.add(new Field(FIELD_OBJECT_TYPE, SearchObjectType.blob.name(), Store.YES, Index.NOT_ANALYZED_NO_NORMS));
 						doc.add(new Field(FIELD_BRANCH, branchName, Store.YES, Index.ANALYZED));
@@ -550,7 +550,7 @@
 						doc.add(new Field(FIELD_PATH, path, Store.YES, Index.ANALYZED));
 						doc.add(new Field(FIELD_DATE, blobDate, Store.YES, Index.NO));
 						doc.add(new Field(FIELD_AUTHOR, blobAuthor, Store.YES, Index.ANALYZED));
-						doc.add(new Field(FIELD_COMMITTER, blobCommitter, Store.YES, Index.ANALYZED));					
+						doc.add(new Field(FIELD_COMMITTER, blobCommitter, Store.YES, Index.ANALYZED));
 
 						// determine extension to compare to the extension
 						// blacklist
@@ -561,20 +561,20 @@
 						}
 
 						// index the blob content
-						if (StringUtils.isEmpty(ext) || !excludedExtensions.contains(ext)) {							
+						if (StringUtils.isEmpty(ext) || !excludedExtensions.contains(ext)) {
 							ObjectLoader ldr = repository.open(blobId, Constants.OBJ_BLOB);
-							InputStream in = ldr.openStream();						
+							InputStream in = ldr.openStream();
 							int n;
 							while ((n = in.read(tmp)) > 0) {
 								os.write(tmp, 0, n);
 							}
 							in.close();
 							byte[] content = os.toByteArray();
-							String str = StringUtils.decodeString(content, encodings);							
+							String str = StringUtils.decodeString(content, encodings);
 							doc.add(new Field(FIELD_CONTENT, str, Store.YES, Index.ANALYZED));
 							os.reset();
-						}							
-						
+						}
+
 						// add the blob to the index
 						writer.addDocument(doc);
 					}
@@ -608,7 +608,7 @@
 
 			// finished
 			reader.release();
-			
+
 			// commit all changes and reset the searcher
 			config.setInt(CONF_INDEX, null, CONF_VERSION, INDEX_VERSION);
 			config.save();
@@ -620,11 +620,11 @@
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Incrementally update the index with the specified commit for the
 	 * repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param branch
@@ -632,7 +632,7 @@
 	 * @param commit
 	 * @return true, if successful
 	 */
-	private IndexResult index(String repositoryName, Repository repository, 
+	private IndexResult index(String repositoryName, Repository repository,
 			String branch, RevCommit commit) {
 		IndexResult result = new IndexResult();
 		try {
@@ -681,7 +681,7 @@
 				}
 			}
 			writer.commit();
-			
+
 			// get any annotated commit tags
 			List<String> commitTags = new ArrayList<String>();
 			for (RefModel ref : JGitUtils.getTags(repository, false, -1)) {
@@ -689,7 +689,7 @@
 					commitTags.add(ref.displayName);
 				}
 			}
-			
+
 			// create and write the Lucene document
 			Document doc = createDocument(commit, commitTags);
 			doc.add(new Field(FIELD_BRANCH, branch, Store.YES, Index.ANALYZED));
@@ -703,7 +703,7 @@
 
 	/**
 	 * Delete a blob from the specified branch of the repository index.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param branch
 	 * @param path
@@ -713,7 +713,7 @@
 	public boolean deleteBlob(String repositoryName, String branch, String path) throws Exception {
 		String pattern = MessageFormat.format("{0}:'{'0} AND {1}:\"'{'1'}'\" AND {2}:\"'{'2'}'\"", FIELD_OBJECT_TYPE, FIELD_BRANCH, FIELD_PATH);
 		String q = MessageFormat.format(pattern, SearchObjectType.blob.name(), branch, path);
-		
+
 		BooleanQuery query = new BooleanQuery();
 		StandardAnalyzer analyzer = new StandardAnalyzer(LUCENE_VERSION);
 		QueryParser qp = new QueryParser(LUCENE_VERSION, FIELD_SUMMARY, analyzer);
@@ -721,7 +721,7 @@
 
 		IndexWriter writer = getIndexWriter(repositoryName);
 		int numDocsBefore = writer.numDocs();
-		writer.deleteDocuments(query);		
+		writer.deleteDocuments(query);
 		writer.commit();
 		int numDocsAfter = writer.numDocs();
 		if (numDocsBefore == numDocsAfter) {
@@ -735,7 +735,7 @@
 
 	/**
 	 * Updates a repository index incrementally from the last indexed commits.
-	 * 
+	 *
 	 * @param model
 	 * @param repository
 	 * @return IndexResult
@@ -770,7 +770,7 @@
 
 			// get the local branches
 			List<RefModel> branches = JGitUtils.getLocalBranches(repository, true, -1);
-			
+
 			// sort them by most recently updated
 			Collections.sort(branches, new Comparator<RefModel>() {
 				@Override
@@ -778,7 +778,7 @@
 					return ref2.getDate().compareTo(ref1.getDate());
 				}
 			});
-						
+
 			// reorder default branch to first position
 			RefModel defaultBranch = null;
 			ObjectId defaultBranchId = JGitUtils.getDefaultBranch(repository);
@@ -790,7 +790,7 @@
 			}
 			branches.remove(defaultBranch);
 			branches.add(0, defaultBranch);
-			
+
 			// walk through each branches
 			for (RefModel branch : branches) {
 				String branchName = branch.getName();
@@ -807,15 +807,15 @@
 					// normal explicit branch check
 					indexBranch = model.indexedBranches.contains(branch.getName());
 				}
-				
+
 				// if this branch is not specifically indexed then skip
 				if (!indexBranch) {
 					continue;
 				}
-				
+
 				// remove this branch from the deletedBranches set
 				deletedBranches.remove(branchName);
-				
+
 				// determine last commit
 				String keyName = getBranchKey(branchName);
 				String lastCommit = config.getString(CONF_BRANCH, null, keyName);
@@ -832,10 +832,10 @@
 				if (revs.size() > 0) {
 					result.branchCount += 1;
 				}
-				
-				// reverse the list of commits so we start with the first commit				
+
+				// reverse the list of commits so we start with the first commit
 				Collections.reverse(revs);
-				for (RevCommit commit : revs) {					
+				for (RevCommit commit : revs) {
 					// index a commit
 					result.add(index(model.name, repository, branchName, commit));
 				}
@@ -862,10 +862,10 @@
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Creates a Lucene document for a commit
-	 * 
+	 *
 	 * @param commit
 	 * @param tags
 	 * @return a Lucene document
@@ -889,13 +889,13 @@
 
 	/**
 	 * Incrementally index an object for the repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param doc
 	 * @return true, if successful
 	 */
 	private boolean index(String repositoryName, Document doc) {
-		try {			
+		try {
 			IndexWriter writer = getIndexWriter(repositoryName);
 			writer.addDocument(doc);
 			writer.commit();
@@ -913,7 +913,7 @@
 		result.totalHits = totalHits;
 		result.score = score;
 		result.date = DateTools.stringToDate(doc.get(FIELD_DATE));
-		result.summary = doc.get(FIELD_SUMMARY);		
+		result.summary = doc.get(FIELD_SUMMARY);
 		result.author = doc.get(FIELD_AUTHOR);
 		result.committer = doc.get(FIELD_COMMITTER);
 		result.type = SearchObjectType.fromName(doc.get(FIELD_OBJECT_TYPE));
@@ -935,7 +935,7 @@
 
 	/**
 	 * Gets an index searcher for the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @return
 	 * @throws IOException
@@ -953,16 +953,16 @@
 	/**
 	 * Gets an index writer for the repository. The index will be created if it
 	 * does not already exist or if forceCreate is specified.
-	 * 
+	 *
 	 * @param repository
 	 * @return an IndexWriter
 	 * @throws IOException
 	 */
 	private IndexWriter getIndexWriter(String repository) throws IOException {
-		IndexWriter indexWriter = writers.get(repository);				
+		IndexWriter indexWriter = writers.get(repository);
 		File repositoryFolder = FileKey.resolve(new File(repositoriesFolder, repository), FS.DETECTED);
 		File indexFolder = new File(repositoryFolder, LUCENE_DIR);
-		Directory directory = FSDirectory.open(indexFolder);		
+		Directory directory = FSDirectory.open(indexFolder);
 
 		if (indexWriter == null) {
 			if (!indexFolder.exists()) {
@@ -979,7 +979,7 @@
 
 	/**
 	 * Searches the specified repositories for the given text or query
-	 * 
+	 *
 	 * @param text
 	 *            if the text is null or empty, null is returned
 	 * @param page
@@ -990,7 +990,7 @@
 	 *            a list of repositories to search. if no repositories are
 	 *            specified null is returned.
 	 * @return a list of SearchResults in order from highest to the lowest score
-	 * 
+	 *
 	 */
 	public List<SearchResult> search(String text, int page, int pageSize, List<String> repositories) {
 		if (ArrayUtils.isEmpty(repositories)) {
@@ -998,10 +998,10 @@
 		}
 		return search(text, page, pageSize, repositories.toArray(new String[0]));
 	}
-	
+
 	/**
 	 * Searches the specified repositories for the given text or query
-	 * 
+	 *
 	 * @param text
 	 *            if the text is null or empty, null is returned
 	 * @param page
@@ -1012,7 +1012,7 @@
 	 *            a list of repositories to search. if no repositories are
 	 *            specified null is returned.
 	 * @return a list of SearchResults in order from highest to the lowest score
-	 * 
+	 *
 	 */
 	public List<SearchResult> search(String text, int page, int pageSize, String... repositories) {
 		if (StringUtils.isEmpty(text)) {
@@ -1034,7 +1034,7 @@
 			qp = new QueryParser(LUCENE_VERSION, FIELD_CONTENT, analyzer);
 			qp.setAllowLeadingWildcard(true);
 			query.add(qp.parse(text), Occur.SHOULD);
-			
+
 			IndexSearcher searcher;
 			if (repositories.length == 1) {
 				// single repository search
@@ -1050,7 +1050,7 @@
 				MultiSourceReader reader = new MultiSourceReader(rdrs);
 				searcher = new IndexSearcher(reader);
 			}
-			
+
 			Query rewrittenQuery = searcher.rewrite(query);
 			logger.debug(rewrittenQuery.toString());
 
@@ -1072,7 +1072,7 @@
 					int index = reader.getSourceIndex(docId);
 					result.repository = repositories[index];
 				}
-				String content = doc.get(FIELD_CONTENT);				
+				String content = doc.get(FIELD_CONTENT);
 				result.fragment = getHighlightedFragment(analyzer, query, content, result);
 				results.add(result);
 			}
@@ -1081,9 +1081,9 @@
 		}
 		return new ArrayList<SearchResult>(results);
 	}
-	
+
 	/**
-	 * 
+	 *
 	 * @param analyzer
 	 * @param query
 	 * @param content
@@ -1096,18 +1096,18 @@
 			String content, SearchResult result) throws IOException, InvalidTokenOffsetsException {
 		if (content == null) {
 			content = "";
-		}		
+		}
 
 		int fragmentLength = SearchObjectType.commit == result.type ? 512 : 150;
 
 		QueryScorer scorer = new QueryScorer(query, "content");
-		Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, fragmentLength); 
+		Fragmenter fragmenter = new SimpleSpanFragmenter(scorer, fragmentLength);
 
 		// use an artificial delimiter for the token
 		String termTag = "!!--[";
 		String termTagEnd = "]--!!";
 		SimpleHTMLFormatter formatter = new SimpleHTMLFormatter(termTag, termTagEnd);
-		Highlighter highlighter = new Highlighter(formatter, scorer);		
+		Highlighter highlighter = new Highlighter(formatter, scorer);
 		highlighter.setTextFragmenter(fragmenter);
 
 		String [] fragments = highlighter.getBestFragments(analyzer, "content", content, 3);
@@ -1122,14 +1122,14 @@
 			}
 			return "<pre class=\"text\">" + StringUtils.escapeForHtml(fragment, true) + "</pre>";
 		}
-		
+
 		// make sure we have unique fragments
 		Set<String> uniqueFragments = new LinkedHashSet<String>();
 		for (String fragment : fragments) {
 			uniqueFragments.add(fragment);
 		}
 		fragments = uniqueFragments.toArray(new String[uniqueFragments.size()]);
-		
+
 		StringBuilder sb = new StringBuilder();
 		for (int i = 0, len = fragments.length; i < len; i++) {
 			String fragment = fragments[i];
@@ -1140,7 +1140,7 @@
 
 			// determine position of the raw fragment in the content
 			int pos = content.indexOf(raw);
-				
+
 			// restore complete first line of fragment
 			int c = pos;
 			while (c > 0) {
@@ -1153,11 +1153,11 @@
 				// inject leading chunk of first fragment line
 				fragment = content.substring(c + 1, pos) + fragment;
 			}
-				
+
 			if (SearchObjectType.blob  == result.type) {
 				// count lines as offset into the content for this fragment
 				int line = Math.max(1, StringUtils.countLines(content.substring(0, pos)));
-				
+
 				// create fragment tag with line number and language
 				String lang = "";
 				String ext = StringUtils.getFileExtension(result.path).toLowerCase();
@@ -1166,9 +1166,9 @@
 					lang = " lang-" + ext;
 				}
 				tag = MessageFormat.format("<pre class=\"prettyprint linenums:{0,number,0}{1}\">", line, lang);
-								
+
 			}
-			
+
 			sb.append(tag);
 
 			// replace the artificial delimiter with html tags
@@ -1181,10 +1181,10 @@
 			}
 		}
 		return sb.toString();
-	}	
-	
+	}
+
 	/**
-	 * Simple class to track the results of an index update. 
+	 * Simple class to track the results of an index update.
 	 */
 	private class IndexResult {
 		long startTime = System.currentTimeMillis();
@@ -1193,33 +1193,33 @@
 		int branchCount;
 		int commitCount;
 		int blobCount;
-		
+
 		void add(IndexResult result) {
 			this.branchCount += result.branchCount;
 			this.commitCount += result.commitCount;
 			this.blobCount += result.blobCount;
 		}
-		
+
 		void success() {
 			success = true;
 			endTime = System.currentTimeMillis();
 		}
-		
+
 		float duration() {
 			return (endTime - startTime)/1000f;
 		}
 	}
-	
+
 	/**
 	 * Custom subclass of MultiReader to identify the source index for a given
 	 * doc id.  This would not be necessary of there was a public method to
 	 * obtain this information.
-	 *  
+	 *
 	 */
 	private class MultiSourceReader extends MultiReader {
-		
+
 		final Method method;
-		
+
 		MultiSourceReader(IndexReader[] subReaders) {
 			super(subReaders);
 			Method m = null;
@@ -1231,7 +1231,7 @@
 			}
 			method = m;
 		}
-		
+
 		int getSourceIndex(int docId) {
 			int index = -1;
 			try {
diff --git a/src/main/java/com/gitblit/MailExecutor.java b/src/main/java/com/gitblit/MailExecutor.java
index c4e776a..b1ba3b6 100644
--- a/src/main/java/com/gitblit/MailExecutor.java
+++ b/src/main/java/com/gitblit/MailExecutor.java
@@ -41,9 +41,9 @@
 
 /**
  * The mail executor handles sending email messages asynchronously from queue.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class MailExecutor implements Runnable {
 
@@ -90,6 +90,7 @@
 		if (!StringUtils.isEmpty(mailUser) && !StringUtils.isEmpty(mailPassword)) {
 			// SMTP requires authentication
 			session = Session.getInstance(props, new Authenticator() {
+				@Override
 				protected PasswordAuthentication getPasswordAuthentication() {
 					PasswordAuthentication passwordAuthentication = new PasswordAuthentication(
 							mailUser, mailPassword);
@@ -104,7 +105,7 @@
 
 	/**
 	 * Indicates if the mail executor can send emails.
-	 * 
+	 *
 	 * @return true if the mail executor is ready to send emails
 	 */
 	public boolean isReady() {
@@ -114,7 +115,7 @@
 
 	/**
 	 * Create a message.
-	 * 
+	 *
 	 * @param toAddresses
 	 * @return a message
 	 */
@@ -124,7 +125,7 @@
 
 	/**
 	 * Create a message.
-	 * 
+	 *
 	 * @param toAddresses
 	 * @return a message
 	 */
@@ -143,7 +144,7 @@
 			for (String address : toAddresses) {
 				uniques.add(address.toLowerCase());
 			}
-			
+
 			Pattern validEmail = Pattern
 					.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
 			List<InternetAddress> tos = new ArrayList<InternetAddress>();
@@ -157,7 +158,7 @@
 					} catch (Throwable t) {
 					}
 				}
-			}			
+			}
 			message.setRecipients(Message.RecipientType.BCC,
 					tos.toArray(new InternetAddress[tos.size()]));
 			message.setSentDate(new Date());
@@ -169,7 +170,7 @@
 
 	/**
 	 * Returns the status of the mail queue.
-	 * 
+	 *
 	 * @return true, if the queue is empty
 	 */
 	public boolean hasEmptyQueue() {
@@ -178,7 +179,7 @@
 
 	/**
 	 * Queue's an email message to be sent.
-	 * 
+	 *
 	 * @param message
 	 * @return true if the message was queued
 	 */
@@ -213,13 +214,13 @@
 						failures.add(message);
 					}
 				}
-				
+
 				// push the failures back onto the queue for the next cycle
 				queue.addAll(failures);
 			}
 		}
 	}
-	
+
 	public void sendNow(Message message) throws Exception {
 		Transport.send(message);
 	}
diff --git a/src/main/java/com/gitblit/PAMUserService.java b/src/main/java/com/gitblit/PAMUserService.java
index 692b0f4..2134023 100644
--- a/src/main/java/com/gitblit/PAMUserService.java
+++ b/src/main/java/com/gitblit/PAMUserService.java
@@ -30,7 +30,7 @@
 
 /**
  * Implementation of a PAM user service for Linux/Unix/MacOSX.
- * 
+ *
  * @author James Moger
  */
 public class PAMUserService extends GitblitUserService {
@@ -38,7 +38,7 @@
     private final Logger logger = LoggerFactory.getLogger(PAMUserService.class);
 
     private IStoredSettings settings;
-    
+
     public PAMUserService() {
         super();
     }
@@ -52,7 +52,7 @@
 
         serviceImpl = createUserService(realmFile);
         logger.info("PAM User Service backed by " + serviceImpl.toString());
-        
+
         // Try to identify the passwd database
         String [] files = { "/etc/shadow", "/etc/master.passwd" };
 		File passwdFile = null;
@@ -69,7 +69,7 @@
 			logger.error("PAM User Service can not read passwd database {}! PAM authentications may fail!", passwdFile);
 		}
     }
-    
+
     @Override
     public boolean supportsCredentialChanges() {
         return false;
@@ -89,7 +89,7 @@
     public boolean supportsTeamMembershipChanges() {
         return true;
     }
-    
+
 	 @Override
 	protected AccountType getAccountType() {
 		return AccountType.PAM;
@@ -101,7 +101,7 @@
 			// local account, bypass PAM authentication
 			return super.authenticate(username, password);
 		}
-		
+
 		if (CLibrary.libc.getpwnam(username) == null) {
 			logger.warn("Can not get PAM passwd for " + username);
 			return null;
@@ -136,7 +136,7 @@
 
         // push the changes to the backing user service
         super.updateUserModel(user);
-        
+
         return user;
     }
 }
diff --git a/src/main/java/com/gitblit/PagesFilter.java b/src/main/java/com/gitblit/PagesFilter.java
index 68ae31e..e8deb5d 100644
--- a/src/main/java/com/gitblit/PagesFilter.java
+++ b/src/main/java/com/gitblit/PagesFilter.java
@@ -24,22 +24,22 @@
 /**
  * The PagesFilter is an AccessRestrictionFilter which ensures the gh-pages
  * requests for a view-restricted repository are authenticated and authorized.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PagesFilter extends AccessRestrictionFilter {
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param url
 	 * @return repository name
 	 */
 	@Override
-	protected String extractRepositoryName(String url) {		
+	protected String extractRepositoryName(String url) {
 		// get the repository name from the url by finding a known url suffix
-		String repository = "";		
+		String repository = "";
 		Repository r = null;
 		int offset = 0;
 		while (r == null) {
@@ -52,11 +52,11 @@
 			r = GitBlit.self().getRepository(repository, false);
 			if (r == null) {
 				// try again
-				offset = slash + 1;	
+				offset = slash + 1;
 			} else {
 				// close the repo
 				r.close();
-			}			
+			}
 			if (repository.equals(url)) {
 				// either only repository in url or no repository found
 				break;
@@ -67,7 +67,7 @@
 
 	/**
 	 * Analyze the url and returns the action of the request.
-	 * 
+	 *
 	 * @param cloneUrl
 	 * @return action of the request
 	 */
@@ -78,7 +78,7 @@
 
 	/**
 	 * Determine if a non-existing repository can be created using this filter.
-	 *  
+	 *
 	 * @return true if the filter allows repository creation
 	 */
 	@Override
@@ -88,7 +88,7 @@
 
 	/**
 	 * Determine if the action may be executed on the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if the action may be performed
@@ -97,10 +97,10 @@
 	protected boolean isActionAllowed(RepositoryModel repository, String action) {
 		return true;
 	}
-	
+
 	/**
 	 * Determine if the repository requires authentication.
-	 * 
+	 *
 	 * @param repository
 	 * @param action
 	 * @return true if authentication required
@@ -113,14 +113,14 @@
 	/**
 	 * Determine if the user can access the repository and perform the specified
 	 * action.
-	 * 
+	 *
 	 * @param repository
 	 * @param user
 	 * @param action
 	 * @return true if user may execute the action on the repository
 	 */
 	@Override
-	protected boolean canAccess(RepositoryModel repository, UserModel user, String action) {		
+	protected boolean canAccess(RepositoryModel repository, UserModel user, String action) {
 		return user.canView(repository);
 	}
 }
diff --git a/src/main/java/com/gitblit/PagesServlet.java b/src/main/java/com/gitblit/PagesServlet.java
index fc71bc5..ce4239c 100644
--- a/src/main/java/com/gitblit/PagesServlet.java
+++ b/src/main/java/com/gitblit/PagesServlet.java
@@ -41,9 +41,9 @@
 
 /**
  * Serves the content of a gh-pages branch.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PagesServlet extends HttpServlet {
 
@@ -57,7 +57,7 @@
 
 	/**
 	 * Returns an url to this servlet for the specified parameters.
-	 * 
+	 *
 	 * @param baseURL
 	 * @param repository
 	 * @param path
@@ -73,7 +73,7 @@
 	/**
 	 * Retrieves the specified resource from the gh-pages branch of the
 	 * repository.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
diff --git a/src/main/java/com/gitblit/RedmineUserService.java b/src/main/java/com/gitblit/RedmineUserService.java
index d677e3e..f1a6742 100644
--- a/src/main/java/com/gitblit/RedmineUserService.java
+++ b/src/main/java/com/gitblit/RedmineUserService.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2012 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package com.gitblit;
 
 import java.io.File;
@@ -73,7 +88,7 @@
     public boolean supportsTeamMembershipChanges() {
         return false;
     }
-    
+
 	 @Override
 	protected AccountType getAccountType() {
 		return AccountType.REDMINE;
@@ -101,12 +116,12 @@
         		return null;
         	}
         }
-        
+
         if (StringUtils.isEmpty(jsonString)) {
         	logger.error("Received empty authentication response from Redmine");
         	return null;
         }
-        
+
         RedmineCurrent current = null;
         try {
         	current = new Gson().fromJson(jsonString, RedmineCurrent.class);
@@ -176,7 +191,7 @@
         InputStreamReader reader = new InputStreamReader(http.getInputStream());
         return IOUtils.toString(reader);
     }
-    
+
     /**
      * set json response. do NOT invoke from production code.
      * @param json json
diff --git a/src/main/java/com/gitblit/RobotsTxtServlet.java b/src/main/java/com/gitblit/RobotsTxtServlet.java
index d66ebf4..dfc06b5 100644
--- a/src/main/java/com/gitblit/RobotsTxtServlet.java
+++ b/src/main/java/com/gitblit/RobotsTxtServlet.java
@@ -27,9 +27,9 @@
 
 /**
  * Handles requests for robots.txt
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RobotsTxtServlet extends HttpServlet {
 
@@ -38,7 +38,7 @@
 	public RobotsTxtServlet() {
 		super();
 	}
-	
+
 	@Override
 	protected void doPost(HttpServletRequest request, HttpServletResponse response)
 			throws ServletException, java.io.IOException {
diff --git a/src/main/java/com/gitblit/RpcFilter.java b/src/main/java/com/gitblit/RpcFilter.java
index 1de9fcc..4c9e12b 100644
--- a/src/main/java/com/gitblit/RpcFilter.java
+++ b/src/main/java/com/gitblit/RpcFilter.java
@@ -30,23 +30,23 @@
 
 /**
  * The RpcFilter is a servlet filter that secures the RpcServlet.
- * 
+ *
  * The filter extracts the rpc request type from the url and determines if the
  * requested action requires a Basic authentication prompt. If authentication is
  * required and no credentials are stored in the "Authorization" header, then a
  * basic authentication challenge is issued.
- * 
+ *
  * http://en.wikipedia.org/wiki/Basic_access_authentication
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RpcFilter extends AuthenticationFilter {
 
 	/**
 	 * doFilter does the actual work of preprocessing the request to ensure that
 	 * the user may proceed.
-	 * 
+	 *
 	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
 	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
 	 */
diff --git a/src/main/java/com/gitblit/RpcServlet.java b/src/main/java/com/gitblit/RpcServlet.java
index 89df473..8b48fbe 100644
--- a/src/main/java/com/gitblit/RpcServlet.java
+++ b/src/main/java/com/gitblit/RpcServlet.java
@@ -44,9 +44,9 @@
 
 /**
  * Handles remote procedure calls.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RpcServlet extends JsonServlet {
 
@@ -60,7 +60,7 @@
 
 	/**
 	 * Processes an rpc request.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
diff --git a/src/main/java/com/gitblit/SalesforceUserService.java b/src/main/java/com/gitblit/SalesforceUserService.java
index aa0795a..5979f63 100644
--- a/src/main/java/com/gitblit/SalesforceUserService.java
+++ b/src/main/java/com/gitblit/SalesforceUserService.java
@@ -16,14 +16,15 @@
 import com.sforce.ws.ConnectorConfig;
 
 public class SalesforceUserService extends GitblitUserService {
-	public static final Logger logger = LoggerFactory
-			.getLogger(SalesforceUserService.class);
+
+	public static final Logger logger = LoggerFactory.getLogger(SalesforceUserService.class);
 	private IStoredSettings settings;
-	
+
+	@Override
 	protected AccountType getAccountType() {
 		return AccountType.SALESFORCE;
 	}
-	
+
 	@Override
 	public void setup(IStoredSettings settings) {
 		this.settings = settings;
diff --git a/src/main/java/com/gitblit/SparkleShareInviteServlet.java b/src/main/java/com/gitblit/SparkleShareInviteServlet.java
index 14d281a..11a58dd 100644
--- a/src/main/java/com/gitblit/SparkleShareInviteServlet.java
+++ b/src/main/java/com/gitblit/SparkleShareInviteServlet.java
@@ -29,9 +29,9 @@
 
 /**
  * Handles requests for Sparkleshare Invites
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SparkleShareInviteServlet extends HttpServlet {
 
@@ -40,7 +40,7 @@
 	public SparkleShareInviteServlet() {
 		super();
 	}
-	
+
 	@Override
 	protected void doPost(HttpServletRequest request, HttpServletResponse response)
 			throws ServletException, java.io.IOException {
@@ -55,8 +55,8 @@
 
 	protected void processRequest(javax.servlet.http.HttpServletRequest request,
 			javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException,
-			java.io.IOException {		
-		
+			java.io.IOException {
+
 		// extract repo name from request
 		String repoUrl = request.getPathInfo().substring(1);
 
@@ -64,11 +64,11 @@
 		if (repoUrl.endsWith(".xml")) {
 			repoUrl = repoUrl.substring(0, repoUrl.length() - 4);
 		}
-		
+
 		String servletPath =  Constants.GIT_PATH;
-		
+
 		int schemeIndex = repoUrl.indexOf("://") + 3;
-		String host = repoUrl.substring(0, repoUrl.indexOf('/', schemeIndex));				
+		String host = repoUrl.substring(0, repoUrl.indexOf('/', schemeIndex));
 		String path = repoUrl.substring(repoUrl.indexOf(servletPath) + servletPath.length());
 		String username = null;
 		int fetchIndex = repoUrl.indexOf('@');
@@ -85,7 +85,7 @@
 			user = UserModel.ANONYMOUS;
 			username = "";
 		}
-		
+
 		// ensure that the requested repository exists
 		RepositoryModel model = GitBlit.self().getRepositoryModel(path);
 		if (model == null) {
@@ -93,8 +93,8 @@
 			response.getWriter().append(MessageFormat.format("Repository \"{0}\" not found!", path));
 			return;
 		}
-		
-		StringBuilder sb = new StringBuilder();		
+
+		StringBuilder sb = new StringBuilder();
 		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 		sb.append("<sparkleshare><invite>\n");
 		sb.append(MessageFormat.format("<address>{0}</address>\n", host));
diff --git a/src/main/java/com/gitblit/SyndicationFilter.java b/src/main/java/com/gitblit/SyndicationFilter.java
index 61bf225..2c232ad 100644
--- a/src/main/java/com/gitblit/SyndicationFilter.java
+++ b/src/main/java/com/gitblit/SyndicationFilter.java
@@ -34,15 +34,15 @@
  * The SyndicationFilter is an AuthenticationFilter which ensures that feed
  * requests for projects or view-restricted repositories have proper authentication
  * credentials and are authorized for the requested feed.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SyndicationFilter extends AuthenticationFilter {
 
 	/**
 	 * Extract the repository name from the url.
-	 * 
+	 *
 	 * @param url
 	 * @return repository name
 	 */
@@ -56,7 +56,7 @@
 	/**
 	 * doFilter does the actual work of preprocessing the request to ensure that
 	 * the user may proceed.
-	 * 
+	 *
 	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
 	 *      javax.servlet.ServletResponse, javax.servlet.FilterChain)
 	 */
@@ -72,7 +72,7 @@
 
 		ProjectModel project = GitBlit.self().getProjectModel(name);
 		RepositoryModel model = null;
-		
+
 		if (project == null) {
 			// try loading a repository model
 			model = GitBlit.self().getRepositoryModel(name);
@@ -84,7 +84,7 @@
 				return;
 			}
 		}
-		
+
 		// Wrap the HttpServletRequest with the AccessRestrictionRequest which
 		// overrides the servlet container user principal methods.
 		// JGit requires either:
diff --git a/src/main/java/com/gitblit/SyndicationServlet.java b/src/main/java/com/gitblit/SyndicationServlet.java
index bdb3b57..6b3c01c 100644
--- a/src/main/java/com/gitblit/SyndicationServlet.java
+++ b/src/main/java/com/gitblit/SyndicationServlet.java
@@ -43,11 +43,11 @@
 
 /**
  * SyndicationServlet generates RSS 2.0 feeds and feed links.
- * 
+ *
  * Access to this servlet is protected by the SyndicationFilter.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SyndicationServlet extends HttpServlet {
 
@@ -57,7 +57,7 @@
 
 	/**
 	 * Create a feed link for the specified repository and branch/tag/commit id.
-	 * 
+	 *
 	 * @param baseURL
 	 * @param repository
 	 *            the repository name
@@ -95,7 +95,7 @@
 
 	/**
 	 * Determines the appropriate title for a feed.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 * @return title of the feed
@@ -116,7 +116,7 @@
 
 	/**
 	 * Generates the feed content.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
@@ -162,12 +162,12 @@
 		}
 
 		response.setContentType("application/rss+xml; charset=UTF-8");
-		
+
 		boolean isProjectFeed = false;
 		String feedName = null;
 		String feedTitle = null;
 		String feedDescription = null;
-		
+
 		List<String> repositories = null;
 		if (repositoryName.indexOf('/') == -1 && !repositoryName.toLowerCase().endsWith(".git")) {
 			// try to find a project
@@ -179,14 +179,14 @@
 			if (project != null) {
 				isProjectFeed = true;
 				repositories = new ArrayList<String>(project.repositories);
-				
+
 				// project feed
 				feedName = project.name;
 				feedTitle = project.title;
 				feedDescription = project.description;
 			}
 		}
-		
+
 		if (repositories == null) {
 			// could not find project, assume this is a repository
 			repositories = Arrays.asList(repositoryName);
@@ -214,7 +214,7 @@
 			if (repository == null) {
 				if (model.isCollectingGarbage) {
 					logger.warn(MessageFormat.format("Temporarily excluding {0} from feed, busy collecting garbage", name));
-				} 
+				}
 				continue;
 			}
 			if (!isProjectFeed) {
@@ -223,7 +223,7 @@
 				feedTitle = model.name;
 				feedDescription = model.description;
 			}
-			
+
 			List<RevCommit> commits;
 			if (StringUtils.isEmpty(searchString)) {
 				// standard log/history lookup
@@ -248,7 +248,7 @@
 						commit.getFullMessage());
 				entry.content = message;
 				entry.repository = model.name;
-				entry.branch = objectId;			
+				entry.branch = objectId;
 				entry.tags = new ArrayList<String>();
 
 				// add commit id and parent commit ids
@@ -263,18 +263,18 @@
 					for (RefModel ref : refs) {
 						entry.tags.add("ref:" + ref.getName());
 					}
-				}			
+				}
 				entries.add(entry);
 			}
 		}
-		
+
 		// sort & truncate the feed
 		Collections.sort(entries);
 		if (entries.size() > length) {
 			// clip the list
 			entries = entries.subList(0, length);
 		}
-		
+
 		String feedLink;
 		if (isProjectFeed) {
 			// project feed
diff --git a/src/main/java/com/gitblit/WebXmlSettings.java b/src/main/java/com/gitblit/WebXmlSettings.java
index 7c8120b..7ae2697 100644
--- a/src/main/java/com/gitblit/WebXmlSettings.java
+++ b/src/main/java/com/gitblit/WebXmlSettings.java
@@ -31,9 +31,9 @@
 
 /**
  * Loads Gitblit settings from the context-parameter values of a web.xml file.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class WebXmlSettings extends IStoredSettings {
 
@@ -54,7 +54,7 @@
 
 	public void applyOverrides(File overrideFile) {
 		this.overrideFile = overrideFile;
-		
+
 		// apply any web-configured overrides
 		if (overrideFile.exists()) {
 			try {
diff --git a/src/main/java/com/gitblit/WindowsUserService.java b/src/main/java/com/gitblit/WindowsUserService.java
index 4830297..a65f44e 100644
--- a/src/main/java/com/gitblit/WindowsUserService.java
+++ b/src/main/java/com/gitblit/WindowsUserService.java
@@ -36,7 +36,7 @@
 
 /**
  * Implementation of a Windows user service.
- * 
+ *
  * @author James Moger
  */
 public class WindowsUserService extends GitblitUserService {
@@ -44,7 +44,7 @@
     private final Logger logger = LoggerFactory.getLogger(WindowsUserService.class);
 
     private IStoredSettings settings;
-    
+
     private IWindowsAuthProvider waffle;
 
     public WindowsUserService() {
@@ -60,7 +60,7 @@
 
         serviceImpl = createUserService(realmFile);
         logger.info("Windows User Service backed by " + serviceImpl.toString());
-        
+
         waffle = new WindowsAuthProviderImpl();
         IWindowsComputer computer = waffle.getCurrentComputer();
         logger.info("      name = " + computer.getComputerName());
@@ -68,7 +68,7 @@
         logger.info("  memberOf = " + computer.getMemberOf());
         //logger.info("  groups     = " + Arrays.asList(computer.getGroups()));
     }
-    
+
     protected String describeJoinStatus(String value) {
     	if ("NetSetupUnknownStatus".equals(value)) {
     		return "unknown";
@@ -101,7 +101,7 @@
     public boolean supportsTeamMembershipChanges() {
         return true;
     }
-    
+
 	 @Override
 	protected AccountType getAccountType() {
 		return AccountType.WINDOWS;
@@ -150,7 +150,7 @@
 			identity.dispose();
 			return null;
 		}
-		
+
         UserModel user = getUserModel(username);
         if (user == null)	// create user object for new authenticated user
         	user = new UserModel(username.toLowerCase());
@@ -174,12 +174,12 @@
        	for (IWindowsAccount group : identity.getGroups()) {
        		groupNames.add(group.getFqn());
         }
-        
+
         if (groupNames.contains("BUILTIN\\Administrators")) {
         	// local administrator
         	user.canAdmin = true;
         }
-        
+
         // TODO consider mapping Windows groups to teams
 
         // push the changes to the backing user service
@@ -188,7 +188,7 @@
 
         // cleanup resources
         identity.dispose();
-        
+
         return user;
     }
 }
diff --git a/src/main/java/com/gitblit/authority/AuthorityWorker.java b/src/main/java/com/gitblit/authority/AuthorityWorker.java
index 262bbb5..37a0df6 100644
--- a/src/main/java/com/gitblit/authority/AuthorityWorker.java
+++ b/src/main/java/com/gitblit/authority/AuthorityWorker.java
@@ -35,6 +35,7 @@
 		return doRequest();
 	}
 
+	@Override
 	protected void done() {
 		parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 		try {
diff --git a/src/main/java/com/gitblit/authority/CertificateStatusRenderer.java b/src/main/java/com/gitblit/authority/CertificateStatusRenderer.java
index 7a708ea..36c562a 100644
--- a/src/main/java/com/gitblit/authority/CertificateStatusRenderer.java
+++ b/src/main/java/com/gitblit/authority/CertificateStatusRenderer.java
@@ -26,9 +26,9 @@
 /**
  * Displays a subscribed icon on the left of the repository name, if there is at
  * least one subscribed branch.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class CertificateStatusRenderer extends DefaultTableCellRenderer {
 
@@ -49,6 +49,7 @@
 		okIcon = new ImageIcon(getClass().getResource("/bullet_green.png"));
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/authority/CertificatesTableModel.java b/src/main/java/com/gitblit/authority/CertificatesTableModel.java
index 333836d..bd99b24 100644
--- a/src/main/java/com/gitblit/authority/CertificatesTableModel.java
+++ b/src/main/java/com/gitblit/authority/CertificatesTableModel.java
@@ -28,16 +28,16 @@
 
 /**
  * Table model of a list of user certificate models.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class CertificatesTableModel extends AbstractTableModel {
 
 	private static final long serialVersionUID = 1L;
 
 	UserCertificateModel ucm;
-	
+
 	enum Columns {
 		SerialNumber, Status, Reason, Issued, Expires;
 
@@ -80,11 +80,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		Columns col = Columns.values()[columnIndex];
 		switch (col) {
@@ -127,7 +128,7 @@
 			if (ucm.getStatus(cert).equals(CertificateStatus.revoked)) {
 				RevocationReason r = ucm.getRevocationReason(cert.getSerialNumber());
 				return Translation.get("gb." + r.name());
-			}			
+			}
 		}
 		return null;
 	}
@@ -135,7 +136,7 @@
 	public X509Certificate get(int modelRow) {
 		return ucm.certs.get(modelRow);
 	}
-	
+
 	public void setUserCertificateModel(UserCertificateModel ucm) {
 		this.ucm = ucm;
 		if (ucm == null) {
diff --git a/src/main/java/com/gitblit/authority/DefaultOidsPanel.java b/src/main/java/com/gitblit/authority/DefaultOidsPanel.java
index 12b919f..d52b99f 100644
--- a/src/main/java/com/gitblit/authority/DefaultOidsPanel.java
+++ b/src/main/java/com/gitblit/authority/DefaultOidsPanel.java
@@ -24,9 +24,9 @@
 import com.gitblit.utils.X509Utils.X509Metadata;
 
 public class DefaultOidsPanel extends JPanel {
-	
+
 	private static final long serialVersionUID = 1L;
-	
+
 	private JTextField organizationalUnit;
 	private JTextField organization;
 	private JTextField locality;
@@ -35,13 +35,13 @@
 
 	public DefaultOidsPanel(X509Metadata metadata) {
 		super();
-		
+
 		organizationalUnit = new JTextField(metadata.getOID("OU", ""), 20);
 		organization = new JTextField(metadata.getOID("O", ""), 20);
 		locality = new JTextField(metadata.getOID("L", ""), 20);
 		stateProvince = new JTextField(metadata.getOID("ST", ""), 20);
 		countryCode = new JTextField(metadata.getOID("C", ""), 20);
-				
+
 		setLayout(new GridLayout(0, 1, Utils.MARGIN, Utils.MARGIN));
 		add(Utils.newFieldPanel(Translation.get("gb.organizationalUnit") + " (OU)", organizationalUnit));
 		add(Utils.newFieldPanel(Translation.get("gb.organization") + " (O)", organization));
@@ -49,7 +49,7 @@
 		add(Utils.newFieldPanel(Translation.get("gb.stateProvince") + " (ST)", stateProvince));
 		add(Utils.newFieldPanel(Translation.get("gb.countryCode") + " (C)", countryCode));
 	}
-	
+
 	public void update(X509Metadata metadata) {
 		metadata.setOID("OU", organizationalUnit.getText());
 		metadata.setOID("O", organization.getText());
@@ -57,15 +57,15 @@
 		metadata.setOID("ST", stateProvince.getText());
 		metadata.setOID("C", countryCode.getText());
 	}
-	
+
 	public String getOrganizationalUnit() {
 		return organizationalUnit.getText();
 	}
-	
+
 	public String getOrganization() {
 		return organization.getText();
 	}
-	
+
 	public String getLocality() {
 		return locality.getText();
 	}
diff --git a/src/main/java/com/gitblit/authority/GitblitAuthority.java b/src/main/java/com/gitblit/authority/GitblitAuthority.java
index bddb1cf..37088ae 100644
--- a/src/main/java/com/gitblit/authority/GitblitAuthority.java
+++ b/src/main/java/com/gitblit/authority/GitblitAuthority.java
@@ -105,32 +105,32 @@
 
 /**
  * Simple GUI tool for administering Gitblit client certificates.
- * 
+ *
  * @author James Moger
  *
  */
 public class GitblitAuthority extends JFrame implements X509Log {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	private final UserCertificateTableModel tableModel;
 
 	private UserCertificatePanel userCertificatePanel;
-	
+
 	private File folder;
-	
+
 	private IStoredSettings gitblitSettings;
-	
+
 	private IUserService userService;
-	
+
 	private String caKeystorePassword;
 
 	private JTable table;
-	
+
 	private int defaultDuration;
-	
+
 	private TableRowSorter<UserCertificateTableModel> defaultSorter;
-	
+
 	private MailExecutor mail;
 
 	private JButton certificateDefaultsButton;
@@ -154,6 +154,7 @@
 		}
 		final String baseFolder = folder;
 		EventQueue.invokeLater(new Runnable() {
+			@Override
 			public void run() {
 				try {
 					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
@@ -172,7 +173,7 @@
 		tableModel = new UserCertificateTableModel();
 		defaultSorter = new TableRowSorter<UserCertificateTableModel>(tableModel);
 	}
-	
+
 	public void initialize(String baseFolder) {
 		setIconImage(new ImageIcon(getClass().getResource("/gitblt-favicon.png")).getImage());
 		setTitle("Gitblit Certificate Authority v" + Constants.getVersion() + " (" + Constants.getBuildDate() + ")");
@@ -187,14 +188,14 @@
 			@Override
 			public void windowOpened(WindowEvent event) {
 			}
-		});		
+		});
 
 		File folder = new File(baseFolder).getAbsoluteFile();
 		load(folder);
-		
+
 		setSizeAndPosition();
 	}
-	
+
 	private void setSizeAndPosition() {
 		String sz = null;
 		String pos = null;
@@ -243,14 +244,14 @@
 			Utils.showException(GitblitAuthority.this, t);
 		}
 	}
-	
+
 	private StoredConfig getConfig() throws IOException, ConfigInvalidException {
 		File configFile  = new File(folder, X509Utils.CA_CONFIG);
 		FileBasedConfig config = new FileBasedConfig(configFile, FS.detect());
 		config.load();
 		return config;
 	}
-	
+
 	private IUserService loadUsers(File folder) {
 		File file = new File(folder, "gitblit.properties");
 		if (!file.exists()) {
@@ -271,11 +272,11 @@
 		} else {
 			throw new RuntimeException("Unsupported user service: " + us);
 		}
-		
+
 		service = new ConfigUserService(FileUtils.resolveParameter(Constants.baseFolder$, folder, us));
 		return service;
 	}
-	
+
 	private void load(File folder) {
 		this.folder = folder;
 		this.userService = loadUsers(folder);
@@ -287,7 +288,7 @@
 			Map<String, UserCertificateModel> map = new HashMap<String, UserCertificateModel>();
 			for (String user : userService.getAllUsernames()) {
 				UserModel model = userService.getUserModel(user);
-				UserCertificateModel ucm = new UserCertificateModel(model);				
+				UserCertificateModel ucm = new UserCertificateModel(model);
 				map.put(user, ucm);
 			}
 			File certificatesConfigFile = new File(folder, X509Utils.CA_CONFIG);
@@ -296,8 +297,8 @@
 				try {
 					config.load();
 					// replace user certificate model with actual data
-					List<UserCertificateModel> list = UserCertificateConfig.KEY.parse(config).list;					
-					for (UserCertificateModel ucm : list) {						
+					List<UserCertificateModel> list = UserCertificateConfig.KEY.parse(config).list;
+					for (UserCertificateModel ucm : list) {
 						ucm.user = userService.getUserModel(ucm.user.username);
 						map.put(ucm.user.username, ucm);
 					}
@@ -307,15 +308,15 @@
 					e.printStackTrace();
 				}
 			}
-			
+
 			tableModel.list = new ArrayList<UserCertificateModel>(map.values());
 			Collections.sort(tableModel.list);
 			tableModel.fireTableDataChanged();
 			Utils.packColumns(table, Utils.MARGIN);
-			
+
 			File caKeystore = new File(folder, X509Utils.CA_KEY_STORE);
 			if (!caKeystore.exists()) {
-				
+
 				if (!X509Utils.unlimitedStrength) {
 					// prompt to confirm user understands JCE Standard Strength encryption
 					int res = JOptionPane.showConfirmDialog(GitblitAuthority.this, Translation.get("gb.jceWarning"),
@@ -332,16 +333,16 @@
 						System.exit(1);
 					}
 				}
-				
-				// show certificate defaults dialog 
+
+				// show certificate defaults dialog
 				certificateDefaultsButton.doClick();
-				
+
 				// create "localhost" ssl certificate
 				prepareX509Infrastructure();
 			}
 		}
 	}
-	
+
 	private boolean prepareX509Infrastructure() {
 		if (caKeystorePassword == null) {
 			JPasswordField pass = new JPasswordField(10);
@@ -364,7 +365,7 @@
 		X509Utils.prepareX509Infrastructure(metadata, folder, this);
 		return true;
 	}
-	
+
 	private List<X509Certificate> findCerts(File folder, String username) {
 		List<X509Certificate> list = new ArrayList<X509Certificate>();
 		File userFolder = new File(folder, X509Utils.CERTS + File.separator + username);
@@ -379,7 +380,7 @@
 		});
 		try {
 			CertificateFactory factory = CertificateFactory.getInstance("X.509");
-			for (File cert : certs) {				
+			for (File cert : certs) {
 				BufferedInputStream is = new BufferedInputStream(new FileInputStream(cert));
 				X509Certificate x509 = (X509Certificate) factory.generateCertificate(is);
 				is.close();
@@ -390,16 +391,16 @@
 		}
 		return list;
 	}
-	
-	private Container getUI() {		
+
+	private Container getUI() {
 		userCertificatePanel = new UserCertificatePanel(this) {
-			
+
 			private static final long serialVersionUID = 1L;
 			@Override
 			public Insets getInsets() {
 				return Utils.INSETS;
 			}
-			
+
 			@Override
 			public boolean isAllowEmail() {
 				return mail.isReady();
@@ -415,12 +416,12 @@
 				c.set(Calendar.MILLISECOND, 0);
 				return c.getTime();
 			}
-			
+
 			@Override
 			public boolean saveUser(String username, UserCertificateModel ucm) {
 				return userService.updateUserModel(username, ucm.user);
 			}
-			
+
 			@Override
 			public boolean newCertificate(UserCertificateModel ucm, X509Metadata metadata, boolean sendEmail) {
 				if (!prepareX509Infrastructure()) {
@@ -430,9 +431,9 @@
 				Date notAfter = metadata.notAfter;
 				setMetadataDefaults(metadata);
 				metadata.notAfter = notAfter;
-				
+
 				// set user's specified OID values
-				UserModel user = ucm.user;				
+				UserModel user = ucm.user;
 				if (!StringUtils.isEmpty(user.organizationalUnit)) {
 					metadata.oids.put("OU", user.organizationalUnit);
 				}
@@ -456,21 +457,21 @@
 				if (ucm.expires == null || metadata.notAfter.before(ucm.expires)) {
 					ucm.expires = metadata.notAfter;
 				}
-				
+
 				updateAuthorityConfig(ucm);
-				
+
 				// refresh user
 				ucm.certs = null;
 				int selectedIndex = table.getSelectedRow();
 				tableModel.fireTableDataChanged();
 				table.getSelectionModel().setSelectionInterval(selectedIndex, selectedIndex);
-				
+
 				if (sendEmail) {
 					sendEmail(user, metadata, zip);
 				}
 				return true;
 			}
-			
+
 			@Override
 			public boolean revoke(UserCertificateModel ucm, X509Certificate cert, RevocationReason reason) {
 				if (!prepareX509Infrastructure()) {
@@ -497,20 +498,20 @@
 					} catch (Exception e) {
 						Utils.showException(GitblitAuthority.this, e);
 					}
-					
+
 					// refresh user
 					ucm.certs = null;
 					int modelIndex = table.convertRowIndexToModel(table.getSelectedRow());
 					tableModel.fireTableDataChanged();
 					table.getSelectionModel().setSelectionInterval(modelIndex, modelIndex);
-					
+
 					return true;
 				}
-				
+
 				return false;
 			}
 		};
-		
+
 		table = Utils.newTable(tableModel, Utils.DATE_FORMAT);
 		table.setRowSorter(defaultSorter);
 		table.setDefaultRenderer(CertificateStatus.class, new CertificateStatusRenderer());
@@ -533,9 +534,9 @@
 				userCertificatePanel.setUserCertificateModel(ucm);
 			}
 		});
-		
+
 		JPanel usersPanel = new JPanel(new BorderLayout()) {
-			
+
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -546,10 +547,10 @@
 		usersPanel.add(new HeaderPanel(Translation.get("gb.users"), "users_16x16.png"), BorderLayout.NORTH);
 		usersPanel.add(new JScrollPane(table), BorderLayout.CENTER);
 		usersPanel.setMinimumSize(new Dimension(400, 10));
-		
+
 		certificateDefaultsButton = new JButton(new ImageIcon(getClass().getResource("/settings_16x16.png")));
 		certificateDefaultsButton.setFocusable(false);
-		certificateDefaultsButton.setToolTipText(Translation.get("gb.newCertificateDefaults"));		
+		certificateDefaultsButton.setToolTipText(Translation.get("gb.newCertificateDefaults"));
 		certificateDefaultsButton.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -567,6 +568,7 @@
 					certificateConfig.update(metadata);
 				}
 				InputVerifier verifier = new InputVerifier() {
+					@Override
 					public boolean verify(JComponent comp) {
 						boolean returnValue;
 						JTextField textField = (JTextField) comp;
@@ -591,18 +593,18 @@
 				validityTF.setText("" + certificateConfig.duration);
 				JPanel validityPanel = Utils.newFieldPanel(Translation.get("gb.validity"),
 						validityTF, Translation.get("gb.duration.days").replace("{0}",  "").trim());
-				
+
 				JPanel p1 = new JPanel(new GridLayout(0, 1, 5, 2));
 				p1.add(siteNamePanel);
 				p1.add(validityPanel);
-				
+
 				DefaultOidsPanel oids = new DefaultOidsPanel(metadata);
 
 				JPanel panel = new JPanel(new BorderLayout());
 				panel.add(p1, BorderLayout.NORTH);
 				panel.add(oids, BorderLayout.CENTER);
 
-				int result = JOptionPane.showConfirmDialog(GitblitAuthority.this, 
+				int result = JOptionPane.showConfirmDialog(GitblitAuthority.this,
 						panel, Translation.get("gb.newCertificateDefaults"), JOptionPane.OK_CANCEL_OPTION,
 						JOptionPane.QUESTION_MESSAGE, new ImageIcon(getClass().getResource("/settings_32x32.png")));
 				if (result == JOptionPane.OK_OPTION) {
@@ -611,7 +613,7 @@
 						certificateConfig.duration = Integer.parseInt(validityTF.getText());
 						certificateConfig.store(config, metadata);
 						config.save();
-						
+
 						Map<String, String> updates = new HashMap<String, String>();
 						updates.put(Keys.web.siteName, siteNameTF.getText());
 						gitblitSettings.saveSettings(updates);
@@ -621,10 +623,10 @@
 				}
 			}
 		});
-		
+
 		newSSLCertificate = new JButton(new ImageIcon(getClass().getResource("/rosette_16x16.png")));
 		newSSLCertificate.setFocusable(false);
-		newSSLCertificate.setToolTipText(Translation.get("gb.newSSLCertificate"));		
+		newSSLCertificate.setToolTipText(Translation.get("gb.newSSLCertificate"));
 		newSSLCertificate.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -638,7 +640,7 @@
 				final Date expires = dialog.getExpiration();
 				final String hostname = dialog.getHostname();
 				final boolean serveCertificate = dialog.isServeCertificate();
-				
+
 				AuthorityWorker worker = new AuthorityWorker(GitblitAuthority.this) {
 
 					@Override
@@ -646,12 +648,12 @@
 						if (!prepareX509Infrastructure()) {
 							return false;
 						}
-						
+
 						// read CA private key and certificate
 						File caKeystoreFile = new File(folder, X509Utils.CA_KEY_STORE);
 						PrivateKey caPrivateKey = X509Utils.getPrivateKey(X509Utils.CA_ALIAS, caKeystoreFile, caKeystorePassword);
 						X509Certificate caCert = X509Utils.getCertificate(X509Utils.CA_ALIAS, caKeystoreFile, caKeystorePassword);
-						
+
 						// generate new SSL certificate
 						X509Metadata metadata = new X509Metadata(hostname, caKeystorePassword);
 						setMetadataDefaults(metadata);
@@ -671,24 +673,24 @@
 					@Override
 					protected void onSuccess() {
 						if (serveCertificate) {
-							JOptionPane.showMessageDialog(GitblitAuthority.this, 
+							JOptionPane.showMessageDialog(GitblitAuthority.this,
 									MessageFormat.format(Translation.get("gb.sslCertificateGeneratedRestart"), hostname),
 									Translation.get("gb.newSSLCertificate"), JOptionPane.INFORMATION_MESSAGE);
 						} else {
-							JOptionPane.showMessageDialog(GitblitAuthority.this, 
+							JOptionPane.showMessageDialog(GitblitAuthority.this,
 								MessageFormat.format(Translation.get("gb.sslCertificateGenerated"), hostname),
 								Translation.get("gb.newSSLCertificate"), JOptionPane.INFORMATION_MESSAGE);
 						}
 					}
 				};
-				
+
 				worker.execute();
 			}
 		});
-		
+
 		JButton emailBundle = new JButton(new ImageIcon(getClass().getResource("/mail_16x16.png")));
 		emailBundle.setFocusable(false);
-		emailBundle.setToolTipText(Translation.get("gb.emailCertificateBundle"));		
+		emailBundle.setToolTipText(Translation.get("gb.emailCertificateBundle"));
 		emailBundle.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -705,7 +707,7 @@
 				if (!zip.exists()) {
 					return;
 				}
-				
+
 				AuthorityWorker worker = new AuthorityWorker(GitblitAuthority.this) {
 					@Override
 					protected Boolean doRequest() throws IOException {
@@ -723,15 +725,15 @@
 						JOptionPane.showMessageDialog(GitblitAuthority.this, MessageFormat.format(Translation.get("gb.clientCertificateBundleSent"),
 								ucm.user.getDisplayName()));
 					}
-					
+
 				};
-				worker.execute();				
+				worker.execute();
 			}
 		});
-		
+
 		JButton logButton = new JButton(new ImageIcon(getClass().getResource("/script_16x16.png")));
 		logButton.setFocusable(false);
-		logButton.setToolTipText(Translation.get("gb.log"));		
+		logButton.setToolTipText(Translation.get("gb.log"));
 		logButton.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
@@ -745,19 +747,21 @@
 				}
 			}
 		});
-		
+
 		final JTextField filterTextfield = new JTextField(15);
 		filterTextfield.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				filterUsers(filterTextfield.getText());
 			}
 		});
 		filterTextfield.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent e) {
 				filterUsers(filterTextfield.getText());
 			}
 		});
-		
+
 		JToolBar buttonControls = new JToolBar(JToolBar.HORIZONTAL);
 		buttonControls.setFloatable(false);
 		buttonControls.add(certificateDefaultsButton);
@@ -768,17 +772,17 @@
 		JPanel userControls = new JPanel(new FlowLayout(FlowLayout.RIGHT, Utils.MARGIN, Utils.MARGIN));
 		userControls.add(new JLabel(Translation.get("gb.filter")));
 		userControls.add(filterTextfield);
-		
+
 		JPanel topPanel = new JPanel(new BorderLayout(0, 0));
 		topPanel.add(buttonControls, BorderLayout.WEST);
 		topPanel.add(userControls, BorderLayout.EAST);
-		
+
 		JPanel leftPanel = new JPanel(new BorderLayout());
 		leftPanel.add(topPanel, BorderLayout.NORTH);
 		leftPanel.add(usersPanel, BorderLayout.CENTER);
-		
+
 		userCertificatePanel.setMinimumSize(new Dimension(375, 10));
-		
+
 		JLabel statusLabel = new JLabel();
 		statusLabel.setHorizontalAlignment(SwingConstants.RIGHT);
 		if (X509Utils.unlimitedStrength) {
@@ -786,9 +790,10 @@
 		} else {
 			statusLabel.setText("JCE Standard Encryption Policy");
 		}
-		
+
 		JPanel root = new JPanel(new BorderLayout()) {
 			private static final long serialVersionUID = 1L;
+			@Override
 			public Insets getInsets() {
 				return Utils.INSETS;
 			}
@@ -799,7 +804,7 @@
 		root.add(statusLabel, BorderLayout.SOUTH);
 		return root;
 	}
-	
+
 	private void filterUsers(final String fragment) {
 		table.clearSelection();
 		userCertificatePanel.setUserCertificateModel(null);
@@ -808,6 +813,7 @@
 			return;
 		}
 		RowFilter<UserCertificateTableModel, Object> containsFilter = new RowFilter<UserCertificateTableModel, Object>() {
+			@Override
 			public boolean include(Entry<? extends UserCertificateTableModel, ? extends Object> entry) {
 				for (int i = entry.getValueCount() - 1; i >= 0; i--) {
 					if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
@@ -822,7 +828,7 @@
 		sorter.setRowFilter(containsFilter);
 		table.setRowSorter(sorter);
 	}
-	
+
 	@Override
 	public void log(String message) {
 		BufferedWriter writer = null;
@@ -842,7 +848,7 @@
 			}
 		}
 	}
-	
+
 	private boolean sendEmail(UserModel user, X509Metadata metadata, File zip) {
 		// send email
 		try {
@@ -879,13 +885,13 @@
 		}
 		return false;
 	}
-	
+
 	private void setMetadataDefaults(X509Metadata metadata) {
 		metadata.serverHostname = gitblitSettings.getString(Keys.web.siteName, Constants.NAME);
 		if (StringUtils.isEmpty(metadata.serverHostname)) {
 			metadata.serverHostname = Constants.NAME;
 		}
-		
+
 		// set default values from config file
 		File certificatesConfigFile = new File(folder, X509Utils.CA_CONFIG);
 		FileBasedConfig config = new FileBasedConfig(certificatesConfigFile, FS.detect());
@@ -899,7 +905,7 @@
 			certificateConfig.update(metadata);
 		}
 	}
-	
+
 	private void updateAuthorityConfig(UserCertificateModel ucm) {
 		File certificatesConfigFile = new File(folder, X509Utils.CA_CONFIG);
 		FileBasedConfig config = new FileBasedConfig(certificatesConfigFile, FS.detect());
diff --git a/src/main/java/com/gitblit/authority/Launcher.java b/src/main/java/com/gitblit/authority/Launcher.java
index 1da9714..bffeb68 100644
--- a/src/main/java/com/gitblit/authority/Launcher.java
+++ b/src/main/java/com/gitblit/authority/Launcher.java
@@ -37,9 +37,9 @@
 
 /**
  * Downloads dependencies and launches Gitblit Authority.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class Launcher {
 
@@ -53,10 +53,10 @@
 
 	public static void main(String[] args) {
 		final SplashScreen splash = SplashScreen.getSplashScreen();
-		
+
 		File libFolder = new File("ext");
 		List<File> jars = findJars(libFolder.getAbsoluteFile());
-		
+
 		// sort the jars by name and then reverse the order so the newer version
 		// of the library gets loaded in the event that this is an upgrade
 		Collections.sort(jars);
@@ -69,7 +69,7 @@
 
 			}
 		}
-		
+
 		updateSplash(splash, Translation.get("gb.starting") + " Gitblit Authority...");
 		GitblitAuthority.main(args);
 	}
@@ -80,12 +80,13 @@
 		}
 		try {
 			EventQueue.invokeAndWait(new Runnable() {
+				@Override
 				public void run() {
 					Graphics2D g = splash.createGraphics();
 					if (g != null) {
 						// Splash is 320x120
 						FontMetrics fm = g.getFontMetrics();
-						
+
 						// paint startup status
 						g.setColor(Color.darkGray);
 						int h = fm.getHeight() + fm.getMaxDescent();
@@ -98,7 +99,7 @@
 						g.setColor(Color.WHITE);
 						int xw = fm.stringWidth(string);
 						g.drawString(string, x + ((w - xw) / 2), y - 5);
-						
+
 						// paint version
 						String ver = "v" + Constants.getVersion();
 						int vw = g.getFontMetrics().stringWidth(ver);
@@ -112,7 +113,7 @@
 			t.printStackTrace();
 		}
 	}
-	
+
 	public static List<File> findJars(File folder) {
 		List<File> jars = new ArrayList<File>();
 		if (folder.exists()) {
@@ -137,7 +138,7 @@
 
 	/**
 	 * Adds a file to the classpath
-	 * 
+	 *
 	 * @param f
 	 *            the file to be added
 	 * @throws IOException
diff --git a/src/main/java/com/gitblit/authority/NewCertificateConfig.java b/src/main/java/com/gitblit/authority/NewCertificateConfig.java
index ca047c8..b6ba6e6 100644
--- a/src/main/java/com/gitblit/authority/NewCertificateConfig.java
+++ b/src/main/java/com/gitblit/authority/NewCertificateConfig.java
@@ -26,11 +26,12 @@
 
 /**
  * Certificate config file parser.
- *  
+ *
  * @author James Moger
  */
 public class NewCertificateConfig {
 		public static final SectionParser<NewCertificateConfig> KEY = new SectionParser<NewCertificateConfig>() {
+			@Override
 			public NewCertificateConfig parse(final Config cfg) {
 				return new NewCertificateConfig(cfg);
 			}
@@ -41,18 +42,18 @@
 		public String L;
 		public String ST;
 		public String C;
-		
+
 		public int duration;
-		
+
 		private NewCertificateConfig(final Config c) {
 			duration = c.getInt("new",  null, "duration", 0);
 			OU = c.getString("new", null, "organizationalUnit");
 			O = c.getString("new", null, "organization");
 			L = c.getString("new", null, "locality");
 			ST = c.getString("new", null, "stateProvince");
-			C = c.getString("new", null, "countryCode");			
+			C = c.getString("new", null, "countryCode");
 		}
-		
+
 		public void update(X509Metadata metadata) {
 			update(metadata, "OU", OU);
 			update(metadata, "O", O);
@@ -63,13 +64,13 @@
 				metadata.notAfter = new Date(System.currentTimeMillis() + duration*TimeUtils.ONEDAY);
 			}
 		}
-		
+
 		private void update(X509Metadata metadata, String oid, String value) {
 			if (!StringUtils.isEmpty(value)) {
 				metadata.oids.put(oid, value);
 			}
 		}
-		
+
 		public void store(Config c, X509Metadata metadata) {
 			store(c, "new", "organizationalUnit", metadata.getOID("OU", null));
 			store(c, "new", "organization", metadata.getOID("O", null));
@@ -82,7 +83,7 @@
 				c.setInt("new", null, "duration", duration);
 			}
 		}
-		
+
 		private void store(Config c, String section, String name, String value) {
 			if (StringUtils.isEmpty(value)) {
 				c.unset(section, null, name);
diff --git a/src/main/java/com/gitblit/authority/NewClientCertificateDialog.java b/src/main/java/com/gitblit/authority/NewClientCertificateDialog.java
index 3d21439..3d8ea7e 100644
--- a/src/main/java/com/gitblit/authority/NewClientCertificateDialog.java
+++ b/src/main/java/com/gitblit/authority/NewClientCertificateDialog.java
@@ -45,7 +45,7 @@
 public class NewClientCertificateDialog extends JDialog {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	JDateChooser expirationDate;
 	JPasswordField pw1;
 	JPasswordField pw2;
@@ -55,47 +55,48 @@
 
 	public NewClientCertificateDialog(Frame owner, String displayname, Date defaultExpiration, boolean allowEmail) {
 		super(owner);
-		
+
 		setTitle(Translation.get("gb.newCertificate"));
-		
-		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {			
+
+		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public Insets getInsets() {
-				
+
 				return Utils.INSETS;
 			}
 		};
-		
+
 		expirationDate = new JDateChooser(defaultExpiration);
 		pw1 = new JPasswordField(20);
 		pw2 = new JPasswordField(20);
 		hint = new JTextField(20);
 		sendEmail = new JCheckBox(Translation.get("gb.sendEmail"));
-		
+
 		JPanel panel = new JPanel(new GridLayout(0, 2, Utils.MARGIN, Utils.MARGIN));
-		
+
 		panel.add(new JLabel(Translation.get("gb.expires")));
 		panel.add(expirationDate);
-		
+
 		panel.add(new JLabel(Translation.get("gb.password")));
 		panel.add(pw1);
 
 		panel.add(new JLabel(Translation.get("gb.confirmPassword")));
 		panel.add(pw2);
-		
+
 		panel.add(new JLabel(Translation.get("gb.passwordHint")));
 		panel.add(hint);
-		
+
 		if (allowEmail) {
 			panel.add(new JLabel(""));
 			panel.add(sendEmail);
 		}
 
-		
+
 		JButton ok = new JButton(Translation.get("gb.ok"));
 		ok.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				if (validateInputs()) {
 					isCanceled = false;
@@ -105,34 +106,35 @@
 		});
 		JButton cancel = new JButton(Translation.get("gb.cancel"));
 		cancel.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				isCanceled = true;
 				setVisible(false);
 			}
 		});
-		
+
 		JPanel controls = new JPanel();
 		controls.add(ok);
 		controls.add(cancel);
-		
+
 		JTextArea message = new JTextArea(Translation.get("gb.newClientCertificateMessage"));
 		message.setLineWrap(true);
 		message.setWrapStyleWord(true);
 		message.setEditable(false);
 		message.setRows(6);
 		message.setPreferredSize(new Dimension(300, 100));
-		
+
 		content.add(new JScrollPane(message), BorderLayout.CENTER);
 		content.add(panel, BorderLayout.NORTH);
 		content.add(controls, BorderLayout.SOUTH);
-		
+
 		getContentPane().add(new HeaderPanel(Translation.get("gb.newCertificate") + " (" + displayname + ")", "rosette_16x16.png"), BorderLayout.NORTH);
 		getContentPane().add(content, BorderLayout.CENTER);
 		pack();
-		
+
 		setLocationRelativeTo(owner);
 	}
-	
+
 	private boolean validateInputs() {
 		if (getExpiration().getTime() < System.currentTimeMillis()) {
 			// expires before now
@@ -154,23 +156,23 @@
 		}
 		return true;
 	}
-	
+
 	public String getPassword() {
 		return new String(pw1.getPassword());
 	}
-	
+
 	public String getPasswordHint() {
 		return hint.getText();
 	}
-	
+
 	public Date getExpiration() {
 		return expirationDate.getDate();
 	}
-	
+
 	public boolean sendEmail() {
 		return sendEmail.isSelected();
 	}
-	
+
 	public boolean isCanceled() {
 		return isCanceled;
 	}
diff --git a/src/main/java/com/gitblit/authority/NewSSLCertificateDialog.java b/src/main/java/com/gitblit/authority/NewSSLCertificateDialog.java
index 821e9e9..654e463 100644
--- a/src/main/java/com/gitblit/authority/NewSSLCertificateDialog.java
+++ b/src/main/java/com/gitblit/authority/NewSSLCertificateDialog.java
@@ -39,7 +39,7 @@
 public class NewSSLCertificateDialog extends JDialog {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	JDateChooser expirationDate;
 	JTextField hostname;
 	JCheckBox serveCertificate;
@@ -47,36 +47,37 @@
 
 	public NewSSLCertificateDialog(Frame owner, Date defaultExpiration) {
 		super(owner);
-		
+
 		setTitle(Translation.get("gb.newSSLCertificate"));
-		
-		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {			
+
+		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public Insets getInsets() {
-				
+
 				return Utils.INSETS;
 			}
 		};
-		
+
 		expirationDate = new JDateChooser(defaultExpiration);
 		hostname = new JTextField(20);
 		serveCertificate = new JCheckBox(Translation.get("gb.serveCertificate"), true);
-		
+
 		JPanel panel = new JPanel(new GridLayout(0, 2, Utils.MARGIN, Utils.MARGIN));
-		
+
 		panel.add(new JLabel(Translation.get("gb.hostname")));
 		panel.add(hostname);
 
 		panel.add(new JLabel(Translation.get("gb.expires")));
 		panel.add(expirationDate);
-		
+
 		panel.add(new JLabel(""));
 		panel.add(serveCertificate);
-		
+
 		JButton ok = new JButton(Translation.get("gb.ok"));
 		ok.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				if (validateInputs()) {
 					isCanceled = false;
@@ -86,26 +87,27 @@
 		});
 		JButton cancel = new JButton(Translation.get("gb.cancel"));
 		cancel.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				isCanceled = true;
 				setVisible(false);
 			}
 		});
-		
+
 		JPanel controls = new JPanel();
 		controls.add(ok);
 		controls.add(cancel);
 
 		content.add(panel, BorderLayout.CENTER);
 		content.add(controls, BorderLayout.SOUTH);
-		
+
 		getContentPane().add(new HeaderPanel(Translation.get("gb.newSSLCertificate"), "rosette_16x16.png"), BorderLayout.NORTH);
 		getContentPane().add(content, BorderLayout.CENTER);
 		pack();
-		
+
 		setLocationRelativeTo(owner);
 	}
-	
+
 	private boolean validateInputs() {
 		if (getExpiration().getTime() < System.currentTimeMillis()) {
 			// expires before now
@@ -121,11 +123,11 @@
 		}
 		return true;
 	}
-	
+
 	public String getHostname() {
 		return hostname.getText();
 	}
-	
+
 	public Date getExpiration() {
 		return expirationDate.getDate();
 	}
diff --git a/src/main/java/com/gitblit/authority/RequestFocusListener.java b/src/main/java/com/gitblit/authority/RequestFocusListener.java
index 82eba6a..bb7f142 100644
--- a/src/main/java/com/gitblit/authority/RequestFocusListener.java
+++ b/src/main/java/com/gitblit/authority/RequestFocusListener.java
@@ -34,7 +34,7 @@
  *  allows you to specify a boolean value of false to prevent the
  *  AncestorListener from being removed when the event is generated. This will
  *  allow you to reuse the listener each time the event is generated.
- *  
+ *
  *  @author Rob Camick
  */
 public class RequestFocusListener implements AncestorListener
diff --git a/src/main/java/com/gitblit/authority/UserCertificateConfig.java b/src/main/java/com/gitblit/authority/UserCertificateConfig.java
index 5ec76f7..411b88a 100644
--- a/src/main/java/com/gitblit/authority/UserCertificateConfig.java
+++ b/src/main/java/com/gitblit/authority/UserCertificateConfig.java
@@ -30,35 +30,36 @@
 
 /**
  * User certificate config section parser.
- * 
+ *
  * @author James Moger
  */
 public class UserCertificateConfig {
 	public static final SectionParser<UserCertificateConfig> KEY = new SectionParser<UserCertificateConfig>() {
-		public UserCertificateConfig parse(final Config cfg) {			
+		@Override
+		public UserCertificateConfig parse(final Config cfg) {
 			return new UserCertificateConfig(cfg);
 		}
 	};
-	
+
 	public final List<UserCertificateModel> list;
 
 	private UserCertificateConfig(final Config c) {
 		SimpleDateFormat df = new SimpleDateFormat(Constants.ISO8601);
-		list = new ArrayList<UserCertificateModel>(); 
+		list = new ArrayList<UserCertificateModel>();
 		for (String username : c.getSubsections("user")) {
 			UserCertificateModel uc = new UserCertificateModel(new UserModel(username));
 			try {
 				uc.expires = df.parse(c.getString("user", username, "expires"));
 			} catch (ParseException e) {
 				LoggerFactory.getLogger(UserCertificateConfig.class).error("Failed to parse date!", e);
-			} catch (NullPointerException e) { 
+			} catch (NullPointerException e) {
 			}
 			uc.notes = c.getString("user", username, "notes");
-			uc.revoked = new ArrayList<String>(Arrays.asList(c.getStringList("user", username, "revoked")));			
+			uc.revoked = new ArrayList<String>(Arrays.asList(c.getStringList("user", username, "revoked")));
 			list.add(uc);
 		}
 	}
-	
+
 	public UserCertificateModel getUserCertificateModel(String username) {
 		for (UserCertificateModel ucm : list) {
 			if (ucm.user.username.equalsIgnoreCase(username)) {
diff --git a/src/main/java/com/gitblit/authority/UserCertificateModel.java b/src/main/java/com/gitblit/authority/UserCertificateModel.java
index 6c69a93..446b4f6 100644
--- a/src/main/java/com/gitblit/authority/UserCertificateModel.java
+++ b/src/main/java/com/gitblit/authority/UserCertificateModel.java
@@ -41,7 +41,7 @@
 		public UserCertificateModel(UserModel user) {
 			this.user = user;
 		}
-		
+
 		public void update(Config config) {
 			if (expires == null) {
 				config.unset("user",  user.username, "expires");
@@ -65,7 +65,7 @@
 		public int compareTo(UserCertificateModel o) {
 			return user.compareTo(o.user);
 		}
-		
+
 		public void revoke(BigInteger serial, RevocationReason reason) {
 			if (revoked == null) {
 				revoked = new ArrayList<String>();
@@ -82,7 +82,7 @@
 				}
 			}
 		}
-		
+
 		public boolean isRevoked(BigInteger serial) {
 			return isRevoked(serial.toString());
 		}
@@ -99,7 +99,7 @@
 			}
 			return false;
 		}
-		
+
 		public RevocationReason getRevocationReason(BigInteger serial) {
 			try {
 				String sn = serial + ":";
@@ -114,7 +114,7 @@
 			}
 			return RevocationReason.unspecified;
 		}
-		
+
 		public CertificateStatus getStatus() {
 			if (expires == null) {
 				return CertificateStatus.unknown;
@@ -140,11 +140,11 @@
 			}
 			return CertificateStatus.ok;
 		}
-		
+
 		private boolean isExpiring(Date date) {
 			return (date.getTime() - System.currentTimeMillis()) <= TimeUtils.ONEDAY * 30;
 		}
-		
+
 		private boolean isExpired(Date date) {
 			return date.getTime() < System.currentTimeMillis();
 		}
diff --git a/src/main/java/com/gitblit/authority/UserCertificatePanel.java b/src/main/java/com/gitblit/authority/UserCertificatePanel.java
index 0c49252..6ee281d 100644
--- a/src/main/java/com/gitblit/authority/UserCertificatePanel.java
+++ b/src/main/java/com/gitblit/authority/UserCertificatePanel.java
@@ -46,13 +46,13 @@
 public abstract class UserCertificatePanel extends JPanel {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	private Frame owner;
-	
+
 	private UserCertificateModel ucm;
-	
+
 	private UserOidsPanel oidsPanel;
-	
+
 	private CertificatesTableModel tableModel;
 
 	private JButton saveUserButton;
@@ -60,27 +60,28 @@
 	private JButton editUserButton;
 
 	private JButton newCertificateButton;
-	
+
 	private JButton revokeCertificateButton;
 
 	private JTable table;
-	
+
 	public UserCertificatePanel(Frame owner) {
 		super(new BorderLayout());
-		
+
 		this.owner = owner;
 		oidsPanel = new UserOidsPanel();
-		
+
 		JPanel fp = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN));
 		fp.add(oidsPanel, BorderLayout.NORTH);
-		
+
 		JPanel fieldsPanel = new JPanel(new BorderLayout());
 		fieldsPanel.add(new HeaderPanel(Translation.get("gb.properties"), "vcard_16x16.png"), BorderLayout.NORTH);
 		fieldsPanel.add(fp, BorderLayout.CENTER);
-		
+
 		saveUserButton = new JButton(Translation.get("gb.save"));
 		saveUserButton.setEnabled(false);
 		saveUserButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				setEditable(false);
 				String username = ucm.user.username;
@@ -88,22 +89,23 @@
 				saveUser(username, ucm);
 			}
 		});
-		
+
 		editUserButton = new JButton(Translation.get("gb.edit"));
 		editUserButton.setEnabled(false);
 		editUserButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				setEditable(true);
 			}
 		});
-		
+
 		JPanel userControls = new JPanel(new FlowLayout(FlowLayout.LEFT));
 		userControls.add(editUserButton);
 		userControls.add(saveUserButton);
 		fieldsPanel.add(userControls, BorderLayout.SOUTH);
-		
+
 		JPanel certificatesPanel = new JPanel(new BorderLayout());
-		certificatesPanel.add(new HeaderPanel(Translation.get("gb.certificates"), "rosette_16x16.png"), BorderLayout.NORTH);		
+		certificatesPanel.add(new HeaderPanel(Translation.get("gb.certificates"), "rosette_16x16.png"), BorderLayout.NORTH);
 		tableModel = new CertificatesTableModel();
 		table = Utils.newTable(tableModel, Utils.DATE_FORMAT);
 		table.setRowSorter(new TableRowSorter<CertificatesTableModel>(tableModel));
@@ -125,21 +127,23 @@
 			}
 		});
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
-				if (e.getClickCount() == 2) {					
+				if (e.getClickCount() == 2) {
 					int row = table.rowAtPoint(e.getPoint());
 					int modelIndex = table.convertRowIndexToModel(row);
 					X509Certificate cert = tableModel.get(modelIndex);
-					X509CertificateViewer viewer = new X509CertificateViewer(UserCertificatePanel.this.owner, cert);					
+					X509CertificateViewer viewer = new X509CertificateViewer(UserCertificatePanel.this.owner, cert);
 					viewer.setVisible(true);
 				}
 			}
 		});
 		certificatesPanel.add(new JScrollPane(table), BorderLayout.CENTER);
-		
+
 		newCertificateButton = new JButton(Translation.get("gb.newCertificate"));
 		newCertificateButton.setEnabled(false);
 		newCertificateButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				try {
 					if (saveUserButton.isEnabled()) {
@@ -149,7 +153,7 @@
 						oidsPanel.updateUser(ucm);
 						saveUser(username, ucm);
 					}
-					
+
 					NewClientCertificateDialog dialog = new NewClientCertificateDialog(UserCertificatePanel.this.owner,
 							ucm.user.getDisplayName(), getDefaultExpiration(), isAllowEmail());
 					dialog.setModal(true);
@@ -162,7 +166,7 @@
 					final UserModel user = ucm.user;
 					final X509Metadata metadata = new X509Metadata(user.username, dialog.getPassword());
 					metadata.userDisplayname = user.getDisplayName();
-					metadata.emailAddress = user.emailAddress;				
+					metadata.emailAddress = user.emailAddress;
 					metadata.passwordHint = dialog.getPasswordHint();
 					metadata.notAfter = dialog.getExpiration();
 
@@ -174,21 +178,22 @@
 
 						@Override
 						protected void onSuccess() {
-							JOptionPane.showMessageDialog(UserCertificatePanel.this.owner, 
+							JOptionPane.showMessageDialog(UserCertificatePanel.this.owner,
 									MessageFormat.format(Translation.get("gb.clientCertificateGenerated"), user.getDisplayName()),
 									Translation.get("gb.newCertificate"), JOptionPane.INFORMATION_MESSAGE);
 						}
 					};
-					worker.execute();					
+					worker.execute();
 				} catch (Exception x) {
 					Utils.showException(UserCertificatePanel.this, x);
 				}
 			}
 		});
-		
+
 		revokeCertificateButton = new JButton(Translation.get("gb.revokeCertificate"));
 		revokeCertificateButton.setEnabled(false);
 		revokeCertificateButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				try {
 					int row = table.getSelectedRow();
@@ -197,12 +202,12 @@
 					}
 					int modelIndex = table.convertRowIndexToModel(row);
 					final X509Certificate cert = tableModel.get(modelIndex);
-					
+
 					String [] choices = new String[RevocationReason.reasons.length];
 					for (int i = 0; i < choices.length; i++) {
 						choices[i] = Translation.get("gb." + RevocationReason.reasons[i].name());
 					}
-					
+
 					Object choice = JOptionPane.showInputDialog(UserCertificatePanel.this.owner,
 							Translation.get("gb.revokeCertificateReason"), Translation.get("gb.revokeCertificate"),
 							JOptionPane.PLAIN_MESSAGE, new ImageIcon(getClass().getResource("/rosette_32x32.png")), choices, Translation.get("gb.unspecified"));
@@ -224,7 +229,7 @@
 						} else {
 							// determine new expires date for user
 							Date newExpires = null;
-							for (X509Certificate c : ucm.certs) {								
+							for (X509Certificate c : ucm.certs) {
 								if (!c.equals(cert)) {
 									if (!ucm.isRevoked(c.getSerialNumber())) {
 										if (newExpires == null || c.getNotAfter().after(newExpires)) {
@@ -235,7 +240,7 @@
 							}
 							ucm.expires = newExpires;
 						}
-						
+
 						AuthorityWorker worker = new AuthorityWorker(UserCertificatePanel.this.owner) {
 
 							@Override
@@ -245,11 +250,11 @@
 
 							@Override
 							protected void onSuccess() {
-								JOptionPane.showMessageDialog(UserCertificatePanel.this.owner, 
+								JOptionPane.showMessageDialog(UserCertificatePanel.this.owner,
 										MessageFormat.format(Translation.get("gb.certificateRevoked"), cert.getSerialNumber(), cert.getIssuerDN().getName()),
 										Translation.get("gb.revokeCertificate"), JOptionPane.INFORMATION_MESSAGE);
 							}
-							
+
 						};
 						worker.execute();
 					}
@@ -258,40 +263,40 @@
 				}
 			}
 		});
-		
+
 		JPanel certificateControls = new JPanel(new FlowLayout(FlowLayout.LEFT));
 		certificateControls.add(newCertificateButton);
 		certificateControls.add(revokeCertificateButton);
 		certificatesPanel.add(certificateControls, BorderLayout.SOUTH);
-				
+
 		add(fieldsPanel, BorderLayout.NORTH);
 		add(certificatesPanel, BorderLayout.CENTER);
 		setEditable(false);
 	}
-	
+
 	public void setUserCertificateModel(UserCertificateModel ucm) {
 		this.ucm = ucm;
 		setEditable(false);
 		oidsPanel.setUserCertificateModel(ucm);
-		
+
 		tableModel.setUserCertificateModel(ucm);
 		tableModel.fireTableDataChanged();
 		Utils.packColumns(table, Utils.MARGIN);
 	}
-	
+
 	public void setEditable(boolean editable) {
 		oidsPanel.setEditable(editable);
-		
+
 		editUserButton.setEnabled(!editable && ucm != null);
 		saveUserButton.setEnabled(editable && ucm != null);
-		
+
 		newCertificateButton.setEnabled(ucm != null);
 		revokeCertificateButton.setEnabled(false);
 	}
-	
+
 	public abstract Date getDefaultExpiration();
 	public abstract boolean isAllowEmail();
-	
+
 	public abstract boolean saveUser(String username, UserCertificateModel ucm);
 	public abstract boolean newCertificate(UserCertificateModel ucm, X509Metadata metadata, boolean sendEmail);
 	public abstract boolean revoke(UserCertificateModel ucm, X509Certificate cert, RevocationReason reason);
diff --git a/src/main/java/com/gitblit/authority/UserCertificateTableModel.java b/src/main/java/com/gitblit/authority/UserCertificateTableModel.java
index dde73fc..7763124 100644
--- a/src/main/java/com/gitblit/authority/UserCertificateTableModel.java
+++ b/src/main/java/com/gitblit/authority/UserCertificateTableModel.java
@@ -26,9 +26,9 @@
 
 /**
  * Table model of a list of user certificate models.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class UserCertificateTableModel extends AbstractTableModel {
 
@@ -82,11 +82,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		Columns col = Columns.values()[columnIndex];
 		switch (col) {
diff --git a/src/main/java/com/gitblit/authority/UserOidsPanel.java b/src/main/java/com/gitblit/authority/UserOidsPanel.java
index 5a33b3f..815a470 100644
--- a/src/main/java/com/gitblit/authority/UserOidsPanel.java
+++ b/src/main/java/com/gitblit/authority/UserOidsPanel.java
@@ -23,9 +23,9 @@
 import com.gitblit.client.Translation;
 
 public class UserOidsPanel extends JPanel {
-	
+
 	private static final long serialVersionUID = 1L;
-	
+
 	private JTextField displayname;
 	private JTextField username;
 	private JTextField emailAddress;
@@ -37,7 +37,7 @@
 
 	public UserOidsPanel() {
 		super();
-		
+
 		displayname = new JTextField(20);
 		username = new JTextField(20);
 		username.setEditable(false);
@@ -47,7 +47,7 @@
 		locality = new JTextField(20);
 		stateProvince = new JTextField(20);
 		countryCode = new JTextField(20);
-				
+
 		setLayout(new GridLayout(0, 1, Utils.MARGIN, Utils.MARGIN));
 		add(Utils.newFieldPanel(Translation.get("gb.displayName"), displayname));
 		add(Utils.newFieldPanel(Translation.get("gb.username") + " (CN)", username));
@@ -58,7 +58,7 @@
 		add(Utils.newFieldPanel(Translation.get("gb.stateProvince") + " (ST)", stateProvince));
 		add(Utils.newFieldPanel(Translation.get("gb.countryCode") + " (C)", countryCode));
 	}
-	
+
 	public void setUserCertificateModel(UserCertificateModel ucm) {
 		setEditable(false);
 		displayname.setText(ucm == null ? "" : ucm.user.getDisplayName());
@@ -70,7 +70,7 @@
 		stateProvince.setText(ucm == null ? "" : ucm.user.stateProvince);
 		countryCode.setText(ucm == null ? "" : ucm.user.countryCode);
 	}
-	
+
 	public void setEditable(boolean editable) {
 		displayname.setEditable(editable);
 //		username.setEditable(editable);
@@ -81,7 +81,7 @@
 		stateProvince.setEditable(editable);
 		countryCode.setEditable(editable);
 	}
-	
+
 	protected void updateUser(UserCertificateModel ucm) {
 		ucm.user.displayName = displayname.getText();
 		ucm.user.username = username.getText();
diff --git a/src/main/java/com/gitblit/authority/Utils.java b/src/main/java/com/gitblit/authority/Utils.java
index 45e028e..6879960 100644
--- a/src/main/java/com/gitblit/authority/Utils.java
+++ b/src/main/java/com/gitblit/authority/Utils.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2011 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package com.gitblit.authority;
 
 import java.awt.Color;
@@ -26,7 +41,7 @@
 import com.gitblit.utils.StringUtils;
 
 public class Utils {
-	
+
 	public final static int LABEL_WIDTH = 175;
 
 	public final static int MARGIN = 5;
@@ -49,11 +64,11 @@
 				new DateCellRenderer(datePattern, Color.orange.darker()));
 		return table;
 	}
-	
+
 	public static JPanel newFieldPanel(String label, Component c) {
 		return newFieldPanel(label, c, null);
 	}
-	
+
 	public static JPanel newFieldPanel(String label, Component c, String trailingLabel) {
 		JLabel jlabel = new JLabel(label);
 		jlabel.setPreferredSize(new Dimension(Utils.LABEL_WIDTH, 20));
@@ -61,11 +76,11 @@
 		panel.add(jlabel);
 		panel.add(c);
 		if (!StringUtils.isEmpty(trailingLabel)) {
-			panel.add(new JLabel(trailingLabel));	
+			panel.add(new JLabel(trailingLabel));
 		}
 		return panel;
 	}
-	
+
 	public static void showException(Component c, Throwable t) {
 		StringWriter writer = new StringWriter();
 		t.printStackTrace(new PrintWriter(writer));
@@ -81,7 +96,7 @@
 		JOptionPane.showMessageDialog(c, jsp, Translation.get("gb.error"),
 				JOptionPane.ERROR_MESSAGE);
 	}
-	
+
 	public static void packColumns(JTable table, int margin) {
 		for (int c = 0; c < table.getColumnCount(); c++) {
 			packColumn(table, c, 4);
diff --git a/src/main/java/com/gitblit/authority/X509CertificateViewer.java b/src/main/java/com/gitblit/authority/X509CertificateViewer.java
index 797b9a8..4711003 100644
--- a/src/main/java/com/gitblit/authority/X509CertificateViewer.java
+++ b/src/main/java/com/gitblit/authority/X509CertificateViewer.java
@@ -41,24 +41,24 @@
 public class X509CertificateViewer extends JDialog {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public X509CertificateViewer(Frame owner, X509Certificate cert) {
 		super(owner);
-		
+
 		setTitle(Translation.get("gb.viewCertificate"));
-		
-		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {			
+
+		JPanel content = new JPanel(new BorderLayout(Utils.MARGIN, Utils.MARGIN)) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public Insets getInsets() {
-				
+
 				return Utils.INSETS;
 			}
 		};
-		
+
 		DateFormat df = DateFormat.getDateTimeInstance();
-		
+
 		int l1 = 15;
 		int l2 = 25;
 		int l3 = 45;
@@ -82,26 +82,27 @@
 		}
 
 		content.add(panel, BorderLayout.CENTER);
-		
+
 		JButton ok = new JButton(Translation.get("gb.ok"));
 		ok.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				setVisible(false);
 			}
 		});
-		
+
 		JPanel controls = new JPanel();
 		controls.add(ok);
-		
+
 		content.add(controls, BorderLayout.SOUTH);
-		
+
 		getContentPane().add(new HeaderPanel(Translation.get("gb.certificate"), "rosette_16x16.png"), BorderLayout.NORTH);
 		getContentPane().add(content, BorderLayout.CENTER);
 		pack();
-		
+
 		setLocationRelativeTo(owner);
 	}
-	
+
 	private JPanel newField(String label, String value, int cols) {
 		JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 2*Utils.MARGIN, 0));
 		JLabel lbl = new JLabel(label);
@@ -114,7 +115,7 @@
 		panel.add(tf);
 		return panel;
 	}
-	
+
 	private String fingerprint(String value) {
 		value = value.toUpperCase();
 		StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/com/gitblit/client/BooleanCellRenderer.java b/src/main/java/com/gitblit/client/BooleanCellRenderer.java
index c8341df..65a3c67 100644
--- a/src/main/java/com/gitblit/client/BooleanCellRenderer.java
+++ b/src/main/java/com/gitblit/client/BooleanCellRenderer.java
@@ -25,9 +25,9 @@
 
 /**
  * Boolean checkbox cell renderer.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class BooleanCellRenderer extends JCheckBox implements TableCellRenderer, Serializable {
 
@@ -39,6 +39,7 @@
 		setHorizontalAlignment(SwingConstants.CENTER);
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		if (value instanceof Boolean) {
diff --git a/src/main/java/com/gitblit/client/BranchRenderer.java b/src/main/java/com/gitblit/client/BranchRenderer.java
index 5f12c42..43352d8 100644
--- a/src/main/java/com/gitblit/client/BranchRenderer.java
+++ b/src/main/java/com/gitblit/client/BranchRenderer.java
@@ -26,9 +26,9 @@
 /**
  * Branch renderer displays refs/heads and refs/remotes in a color similar to
  * the site.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class BranchRenderer extends DefaultTableCellRenderer implements ListCellRenderer {
 
@@ -37,9 +37,10 @@
 	private static final String R_HEADS = "refs/heads/";
 
 	private static final String R_REMOTES = "refs/remotes/";
-	
+
 	private static final String R_CHANGES = "refs/changes/";
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/client/ClosableTabComponent.java b/src/main/java/com/gitblit/client/ClosableTabComponent.java
index a121806..f6bbaeb 100644
--- a/src/main/java/com/gitblit/client/ClosableTabComponent.java
+++ b/src/main/java/com/gitblit/client/ClosableTabComponent.java
@@ -46,6 +46,7 @@
 	private static final long serialVersionUID = 1L;
 
 	private static final MouseListener BUTTON_MOUSE_LISTENER = new MouseAdapter() {
+		@Override
 		public void mouseEntered(MouseEvent e) {
 			Component component = e.getComponent();
 			if (component instanceof AbstractButton) {
@@ -54,6 +55,7 @@
 			}
 		}
 
+		@Override
 		public void mouseExited(MouseEvent e) {
 			Component component = e.getComponent();
 			if (component instanceof AbstractButton) {
@@ -112,6 +114,7 @@
 			addActionListener(this);
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent e) {
 			int i = pane.indexOfTabComponent(ClosableTabComponent.this);
 			Component c = pane.getComponentAt(i);
@@ -123,6 +126,7 @@
 			}
 		}
 
+		@Override
 		public void updateUI() {
 		}
 
diff --git a/src/main/java/com/gitblit/client/DateCellRenderer.java b/src/main/java/com/gitblit/client/DateCellRenderer.java
index 751c7db..ef5be3a 100644
--- a/src/main/java/com/gitblit/client/DateCellRenderer.java
+++ b/src/main/java/com/gitblit/client/DateCellRenderer.java
@@ -26,22 +26,23 @@
 
 /**
  * Time ago cell renderer with real date tooltip.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class DateCellRenderer extends DefaultTableCellRenderer {
 
 	private static final long serialVersionUID = 1L;
 
 	private final String pattern;
-	
+
 	public DateCellRenderer(String pattern, Color foreground) {
 		this.pattern = (pattern == null ? "yyyy-MM-dd HH:mm" : pattern);
 		setForeground(foreground);
 		setHorizontalAlignment(SwingConstants.CENTER);
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/client/EditRegistrationDialog.java b/src/main/java/com/gitblit/client/EditRegistrationDialog.java
index 99cd36f..66bb197 100644
--- a/src/main/java/com/gitblit/client/EditRegistrationDialog.java
+++ b/src/main/java/com/gitblit/client/EditRegistrationDialog.java
@@ -42,9 +42,9 @@
 
 /**
  * Dialog to create or edit a Gitblit registration.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class EditRegistrationDialog extends JDialog {
 
@@ -71,6 +71,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -98,6 +99,7 @@
 
 		JButton cancel = new JButton(Translation.get("gb.cancel"));
 		cancel.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				setVisible(false);
 			}
@@ -105,6 +107,7 @@
 
 		final JButton save = new JButton(Translation.get(isLogin ? "gb.login" : "gb.save"));
 		save.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				if (validateFields()) {
 					canceled = false;
@@ -115,6 +118,7 @@
 
 		// on enter in password field, save or login
 		passwordField.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				save.doClick();
 			}
diff --git a/src/main/java/com/gitblit/client/EditRepositoryDialog.java b/src/main/java/com/gitblit/client/EditRepositoryDialog.java
index 118c5c8..4a8a215 100644
--- a/src/main/java/com/gitblit/client/EditRepositoryDialog.java
+++ b/src/main/java/com/gitblit/client/EditRepositoryDialog.java
@@ -69,7 +69,7 @@
 
 /**
  * Dialog to create/edit a repository.
- * 
+ *
  * @author James Moger
  */
 public class EditRepositoryDialog extends JDialog {
@@ -93,7 +93,7 @@
 	private JCheckBox useDocs;
 
 	private JCheckBox useIncrementalPushTags;
-	
+
 	private JCheckBox showRemoteBranches;
 
 	private JCheckBox showReadme;
@@ -107,11 +107,11 @@
 	private JTextField mailingListsField;
 
 	private JComboBox accessRestriction;
-	
+
 	private JRadioButton allowAuthenticated;
-	
+
 	private JRadioButton allowNamed;
-	
+
 	private JCheckBox allowForks;
 
 	private JCheckBox verifyCommitter;
@@ -121,19 +121,19 @@
 	private JPalette<String> ownersPalette;
 
 	private JComboBox headRefField;
-	
+
 	private JComboBox gcPeriod;
-	
+
 	private JTextField gcThreshold;
-	
+
 	private JComboBox maxActivityCommits;
-	
+
 	private RegistrantPermissionsPanel usersPalette;
 
 	private JPalette<String> setsPalette;
 
 	private RegistrantPermissionsPanel teamsPalette;
-	
+
 	private JPalette<String> indexedBranchesPalette;
 
 	private JPalette<String> preReceivePalette;
@@ -145,9 +145,9 @@
 	private JLabel postReceiveInherited;
 
 	private Set<String> repositoryNames;
-	
+
 	private JPanel customFieldsPanel;
-	
+
 	private List<JTextField> customTextfields;
 
 	public EditRepositoryDialog(int protocolVersion) {
@@ -175,6 +175,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -194,17 +195,17 @@
 
 		if (ArrayUtils.isEmpty(anRepository.availableRefs)) {
 			headRefField = new JComboBox();
-			headRefField.setEnabled(false);			
+			headRefField.setEnabled(false);
 		} else {
 			headRefField = new JComboBox(
 					anRepository.availableRefs.toArray());
 			headRefField.setSelectedItem(anRepository.HEAD);
 		}
-		
+
 		Integer []  gcPeriods =  { 1, 2, 3, 4, 5, 7, 10, 14 };
 		gcPeriod = new JComboBox(gcPeriods);
 		gcPeriod.setSelectedItem(anRepository.gcPeriod);
-		
+
 		gcThreshold = new JTextField(8);
 		gcThreshold.setText(anRepository.gcThreshold);
 
@@ -250,21 +251,21 @@
 				}
 			}
 		});
-		
-		boolean authenticated = anRepository.authorizationControl != null 
+
+		boolean authenticated = anRepository.authorizationControl != null
 				&& AuthorizationControl.AUTHENTICATED.equals(anRepository.authorizationControl);
 		allowAuthenticated = new JRadioButton(Translation.get("gb.allowAuthenticatedDescription"));
 		allowAuthenticated.setSelected(authenticated);
 		allowAuthenticated.addItemListener(new ItemListener() {
 			@Override
 			public void itemStateChanged(ItemEvent e) {
-				if (e.getStateChange() == ItemEvent.SELECTED) {					
+				if (e.getStateChange() == ItemEvent.SELECTED) {
 					usersPalette.setEnabled(false);
 					teamsPalette.setEnabled(false);
 				}
 			}
 		});
-		
+
 		allowNamed = new JRadioButton(Translation.get("gb.allowNamedDescription"));
 		allowNamed.setSelected(!authenticated);
 		allowNamed.addItemListener(new ItemListener() {
@@ -276,15 +277,15 @@
 				}
 			}
 		});
-		
+
 		ButtonGroup group = new ButtonGroup();
 		group.add(allowAuthenticated);
 		group.add(allowNamed);
-		
+
 		JPanel authorizationPanel = new JPanel(new GridLayout(0, 1));
 		authorizationPanel.add(allowAuthenticated);
 		authorizationPanel.add(allowNamed);
-		
+
 		allowForks = new JCheckBox(Translation.get("gb.allowForksDescription"), anRepository.allowForks);
 		verifyCommitter = new JCheckBox(Translation.get("gb.verifyCommitterDescription"), anRepository.verifyCommitter);
 
@@ -387,7 +388,7 @@
 		JPanel postReceivePanel = new JPanel(new BorderLayout(5, 5));
 		postReceivePanel.add(postReceivePalette, BorderLayout.CENTER);
 		postReceivePanel.add(postReceiveInherited, BorderLayout.WEST);
-		
+
 		customFieldsPanel = new JPanel();
 		customFieldsPanel.setLayout(new BoxLayout(customFieldsPanel, BoxLayout.Y_AXIS));
 		JScrollPane customFieldsScrollPane = new JScrollPane(customFieldsPanel);
@@ -406,14 +407,15 @@
 		}
 		panel.addTab(Translation.get("gb.preReceiveScripts"), preReceivePanel);
 		panel.addTab(Translation.get("gb.postReceiveScripts"), postReceivePanel);
-		
+
 		panel.addTab(Translation.get("gb.customFields"), customFieldsScrollPane);
-		
+
 
 		setupAccessPermissions(anRepository.accessRestriction);
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				if (validateFields()) {
 					canceled = false;
@@ -424,6 +426,7 @@
 
 		JButton cancelButton = new JButton(Translation.get("gb.cancel"));
 		cancelButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				canceled = true;
 				setVisible(false);
@@ -452,7 +455,7 @@
 		pack();
 		nameField.requestFocus();
 	}
-	
+
 	private JPanel newFieldPanel(String label, JComponent comp) {
 		return newFieldPanel(label, 150, comp);
 	}
@@ -466,12 +469,12 @@
 		panel.add(comp);
 		return panel;
 	}
-	
+
 	private void setupAccessPermissions(AccessRestrictionType art) {
 		if (AccessRestrictionType.NONE.equals(art)) {
 			usersPalette.setEnabled(false);
 			teamsPalette.setEnabled(false);
-			
+
 			allowAuthenticated.setEnabled(false);
 			allowNamed.setEnabled(false);
 			verifyCommitter.setEnabled(false);
@@ -479,7 +482,7 @@
 			allowAuthenticated.setEnabled(true);
 			allowNamed.setEnabled(true);
 			verifyCommitter.setEnabled(true);
-			
+
 			if (allowNamed.isSelected()) {
 				usersPalette.setEnabled(true);
 				teamsPalette.setEnabled(true);
@@ -575,7 +578,7 @@
 		repository.skipSizeCalculation = skipSizeCalculation.isSelected();
 		repository.skipSummaryMetrics = skipSummaryMetrics.isSelected();
 		repository.maxActivityCommits = (Integer) maxActivityCommits.getSelectedItem();
-		
+
 		repository.isFrozen = isFrozen.isSelected();
 		repository.allowForks = allowForks.isSelected();
 		repository.verifyCommitter = verifyCommitter.isSelected();
@@ -594,7 +597,7 @@
 
 		repository.accessRestriction = (AccessRestrictionType) accessRestriction
 				.getSelectedItem();
-		repository.authorizationControl = allowAuthenticated.isSelected() ? 
+		repository.authorizationControl = allowAuthenticated.isSelected() ?
 				AuthorizationControl.AUTHENTICATED : AuthorizationControl.NAMED;
 		repository.federationStrategy = (FederationStrategy) federationStrategy
 				.getSelectedItem();
@@ -602,11 +605,11 @@
 		if (repository.federationStrategy.exceeds(FederationStrategy.EXCLUDE)) {
 			repository.federationSets = setsPalette.getSelections();
 		}
-		
+
 		repository.indexedBranches = indexedBranchesPalette.getSelections();
 		repository.preReceiveScripts = preReceivePalette.getSelections();
 		repository.postReceiveScripts = postReceivePalette.getSelections();
-		
+
 		// Custom Fields
 		repository.customFields = new LinkedHashMap<String, String>();
 		if (customTextfields != null) {
@@ -623,7 +626,7 @@
 		JOptionPane.showMessageDialog(EditRepositoryDialog.this, message,
 				Translation.get("gb.error"), JOptionPane.ERROR_MESSAGE);
 	}
-	
+
 	public void setAccessRestriction(AccessRestrictionType restriction) {
 		this.accessRestriction.setSelectedItem(restriction);
 		setupAccessPermissions(restriction);
@@ -658,7 +661,7 @@
 	public void setFederationSets(List<String> all, List<String> selected) {
 		setsPalette.setObjects(all, selected);
 	}
-	
+
 	public void setIndexedBranches(List<String> all, List<String> selected) {
 		indexedBranchesPalette.setObjects(all, selected);
 	}
@@ -701,11 +704,11 @@
 	public List<RegistrantAccessPermission> getTeamAccessPermissions() {
 		return teamsPalette.getPermissions();
 	}
-	
+
 	public void setCustomFields(RepositoryModel repository, Map<String, String> customFields) {
 		customFieldsPanel.removeAll();
 		customTextfields = new ArrayList<JTextField>();
-		
+
 		final Insets insets = new Insets(5, 5, 5, 5);
 		JPanel fields = new JPanel(new GridLayout(0, 1, 0, 5)) {
 
@@ -715,8 +718,8 @@
 			public Insets getInsets() {
 				return insets;
 			}
-		};		
-		
+		};
+
 		for (Map.Entry<String, String> entry : customFields.entrySet()) {
 			String field = entry.getKey();
 			String value = "";
@@ -725,14 +728,14 @@
 			}
 			JTextField textField = new JTextField(value);
 			textField.setName(field);
-			
+
 			textField.setPreferredSize(new Dimension(450, 26));
-			
+
 			fields.add(newFieldPanel(entry.getValue(), 250, textField));
-			
+
 			customTextfields.add(textField);
 		}
-		JScrollPane jsp = new JScrollPane(fields);		
+		JScrollPane jsp = new JScrollPane(fields);
 		jsp.getVerticalScrollBar().setBlockIncrement(100);
 		jsp.getVerticalScrollBar().setUnitIncrement(100);
 		jsp.setViewportBorder(null);
@@ -743,7 +746,7 @@
 	/**
 	 * ListCellRenderer to display descriptive text about the access
 	 * restriction.
-	 * 
+	 *
 	 */
 	private class AccessRestrictionRenderer extends DefaultListCellRenderer {
 
@@ -753,7 +756,7 @@
 		public Component getListCellRendererComponent(JList list, Object value,
 				int index, boolean isSelected, boolean cellHasFocus) {
 			super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-			
+
 			if (value instanceof AccessRestrictionType) {
 				AccessRestrictionType restriction = (AccessRestrictionType) value;
 				switch (restriction) {
diff --git a/src/main/java/com/gitblit/client/EditTeamDialog.java b/src/main/java/com/gitblit/client/EditTeamDialog.java
index 7464055..3c0b928 100644
--- a/src/main/java/com/gitblit/client/EditTeamDialog.java
+++ b/src/main/java/com/gitblit/client/EditTeamDialog.java
@@ -70,11 +70,11 @@
 	private boolean canceled = true;
 
 	private JTextField teamnameField;
-	
+
 	private JCheckBox canAdminCheckbox;
-	
+
 	private JCheckBox canForkCheckbox;
-	
+
 	private JCheckBox canCreateCheckbox;
 
 	private JTextField mailingListsField;
@@ -117,6 +117,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -127,7 +128,7 @@
 	private void initialize(int protocolVersion, TeamModel aTeam) {
 		teamnameField = new JTextField(aTeam.name == null ? "" : aTeam.name, 25);
 
-		canAdminCheckbox = new JCheckBox(Translation.get("gb.canAdminDescription"), aTeam.canAdmin);		
+		canAdminCheckbox = new JCheckBox(Translation.get("gb.canAdminDescription"), aTeam.canAdmin);
 		canForkCheckbox = new JCheckBox(Translation.get("gb.canForkDescription"), aTeam.canFork);
 		canCreateCheckbox = new JCheckBox(Translation.get("gb.canCreateDescription"), aTeam.canCreate);
 
@@ -146,7 +147,7 @@
 		repositoryPalette = new RegistrantPermissionsPanel(RegistrantType.REPOSITORY);
 		userPalette = new JPalette<String>();
 		userPalette.setEnabled(settings.supportsTeamMembershipChanges);
-		
+
 		JPanel fieldsPanelTop = new JPanel(new BorderLayout());
 		fieldsPanelTop.add(fieldsPanel, BorderLayout.NORTH);
 
@@ -154,6 +155,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return _insets;
 			}
@@ -164,6 +166,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return _insets;
 			}
@@ -175,7 +178,7 @@
 		JPanel preReceivePanel = new JPanel(new BorderLayout(5, 5));
 		preReceivePanel.add(preReceivePalette, BorderLayout.CENTER);
 		preReceivePanel.add(preReceiveInherited, BorderLayout.WEST);
-		
+
 		postReceivePalette = new JPalette<String>(true);
 		postReceiveInherited = new JLabel();
 		JPanel postReceivePanel = new JPanel(new BorderLayout(5, 5));
@@ -191,6 +194,7 @@
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				if (validateFields()) {
 					canceled = false;
@@ -201,6 +205,7 @@
 
 		JButton cancelButton = new JButton(Translation.get("gb.cancel"));
 		cancelButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				canceled = true;
 				setVisible(false);
@@ -317,10 +322,10 @@
 			if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)
 					&& repo.authorizationControl.equals(AuthorizationControl.NAMED)) {
 				restricted.add(repo.name);
-			}				
+			}
 		}
 		StringUtils.sortRepositorynames(restricted);
-		
+
 		List<String> list = new ArrayList<String>();
 		// repositories
 		list.add(".*");
@@ -339,7 +344,7 @@
 			// all repositories excluding personal repositories
 			list.add("[^" + prefix + "].*");
 		}
-		
+
 		String lastProject = null;
 		for (String repo : restricted) {
 			String projectPath = StringUtils.getFirstPathElement(repo);
diff --git a/src/main/java/com/gitblit/client/EditUserDialog.java b/src/main/java/com/gitblit/client/EditUserDialog.java
index fd6745e..fd5cf79 100644
--- a/src/main/java/com/gitblit/client/EditUserDialog.java
+++ b/src/main/java/com/gitblit/client/EditUserDialog.java
@@ -79,29 +79,29 @@
 	private JPasswordField passwordField;
 
 	private JPasswordField confirmPasswordField;
-	
+
 	private JTextField displayNameField;
-	
+
 	private JTextField emailAddressField;
 
 	private JCheckBox canAdminCheckbox;
-	
+
 	private JCheckBox canForkCheckbox;
-	
+
 	private JCheckBox canCreateCheckbox;
 
 	private JCheckBox notFederatedCheckbox;
-	
+
 	private JTextField organizationalUnitField;
-	
+
 	private JTextField organizationField;
 
 	private JTextField localityField;
-	
+
 	private JTextField stateProvinceField;
-	
+
 	private JTextField countryCodeField;
-	
+
 	private RegistrantPermissionsPanel repositoryPalette;
 
 	private JPalette<TeamModel> teamsPalette;
@@ -132,6 +132,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -146,19 +147,19 @@
 				25);
 		displayNameField = new JTextField(anUser.displayName == null ? "" : anUser.displayName, 25);
 		emailAddressField = new JTextField(anUser.emailAddress == null ? "" : anUser.emailAddress, 25);
-		canAdminCheckbox = new JCheckBox(Translation.get("gb.canAdminDescription"), anUser.canAdmin);		
+		canAdminCheckbox = new JCheckBox(Translation.get("gb.canAdminDescription"), anUser.canAdmin);
 		canForkCheckbox = new JCheckBox(Translation.get("gb.canForkDescription"), anUser.canFork);
 		canCreateCheckbox = new JCheckBox(Translation.get("gb.canCreateDescription"), anUser.canCreate);
 		notFederatedCheckbox = new JCheckBox(
 				Translation.get("gb.excludeFromFederationDescription"),
 				anUser.excludeFromFederation);
-		
+
 		organizationalUnitField = new JTextField(anUser.organizationalUnit == null ? "" : anUser.organizationalUnit, 25);
 		organizationField = new JTextField(anUser.organization == null ? "" : anUser.organization, 25);
 		localityField = new JTextField(anUser.locality == null ? "" : anUser.locality, 25);
 		stateProvinceField = new JTextField(anUser.stateProvince == null ? "" : anUser.stateProvince, 25);
 		countryCodeField = new JTextField(anUser.countryCode == null ? "" : anUser.countryCode, 15);
-		
+
 		// credentials are optionally controlled by 3rd-party authentication
 		usernameField.setEnabled(settings.supportsCredentialChanges);
 		passwordField.setEnabled(settings.supportsCredentialChanges);
@@ -166,7 +167,7 @@
 
 		displayNameField.setEnabled(settings.supportsDisplayNameChanges);
 		emailAddressField.setEnabled(settings.supportsEmailAddressChanges);
-		
+
 		organizationalUnitField.setEnabled(settings.supportsDisplayNameChanges);
 		organizationField.setEnabled(settings.supportsDisplayNameChanges);
 		localityField.setEnabled(settings.supportsDisplayNameChanges);
@@ -191,7 +192,7 @@
 		attributesPanel.add(newFieldPanel(Translation.get("gb.locality") + " (L)", localityField));
 		attributesPanel.add(newFieldPanel(Translation.get("gb.stateProvince") + " (ST)", stateProvinceField));
 		attributesPanel.add(newFieldPanel(Translation.get("gb.countryCode") + " (C)", countryCodeField));
-		
+
 		final Insets _insets = new Insets(5, 5, 5, 5);
 		repositoryPalette = new RegistrantPermissionsPanel(RegistrantType.REPOSITORY);
 		teamsPalette = new JPalette<TeamModel>();
@@ -207,6 +208,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return _insets;
 			}
@@ -217,6 +219,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return _insets;
 			}
@@ -233,6 +236,7 @@
 
 		JButton createButton = new JButton(Translation.get("gb.save"));
 		createButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				if (validateFields()) {
 					canceled = false;
@@ -243,6 +247,7 @@
 
 		JButton cancelButton = new JButton(Translation.get("gb.cancel"));
 		cancelButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				canceled = true;
 				setVisible(false);
@@ -349,7 +354,7 @@
 			// no change in password
 			user.password = password;
 		}
-		
+
 		user.displayName = displayNameField.getText().trim();
 		user.emailAddress = emailAddressField.getText().trim();
 
@@ -363,7 +368,7 @@
 		user.locality = localityField.getText().trim();
 		user.stateProvince = stateProvinceField.getText().trim();
 		user.countryCode = countryCodeField.getText().trim();
-		
+
 		for (RegistrantAccessPermission rp : repositoryPalette.getPermissions()) {
 			user.setRepositoryPermission(rp.registrant, rp.permission);
 		}
@@ -394,16 +399,16 @@
 				if (repo.accessRestriction.exceeds(AccessRestrictionType.NONE)
 						&& repo.authorizationControl.equals(AuthorizationControl.NAMED)) {
 					restricted.add(repo.name);
-				}				
+				}
 			}
 			repoMap.put(repo.name.toLowerCase(), repo);
 		}
 		StringUtils.sortRepositorynames(restricted);
-		
+
 		List<String> list = new ArrayList<String>();
 		// repositories
 		list.add(".*");
-		
+
 		String prefix;
 		if (settings.hasKey(Keys.git.userRepositoryPrefix)) {
 			prefix = settings.get(Keys.git.userRepositoryPrefix).currentValue;
@@ -418,7 +423,7 @@
 			// all repositories excluding personal repositories
 			list.add("[^" + prefix + "].*");
 		}
-		
+
 		String lastProject = null;
 		for (String repo : restricted) {
 			String projectPath = StringUtils.getFirstPathElement(repo).toLowerCase();
@@ -440,7 +445,7 @@
 				list.remove(rp.registrant.toLowerCase());
 			}
 		}
-		
+
 		// update owner and missing permissions for editing
 		for (RegistrantAccessPermission permission : permissions) {
 			if (permission.mutable && PermissionType.EXPLICIT.equals(permission.permissionType)) {
@@ -471,7 +476,7 @@
 		}
 		teamsPalette.setObjects(teams, selected);
 	}
-	
+
 	public UserModel getUser() {
 		if (canceled) {
 			return null;
diff --git a/src/main/java/com/gitblit/client/FeedEntryTableModel.java b/src/main/java/com/gitblit/client/FeedEntryTableModel.java
index 0b0ef17..2118bc3 100644
--- a/src/main/java/com/gitblit/client/FeedEntryTableModel.java
+++ b/src/main/java/com/gitblit/client/FeedEntryTableModel.java
@@ -26,9 +26,9 @@
 
 /**
  * Table model for a list of retrieved feed entries.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FeedEntryTableModel extends AbstractTableModel {
 
@@ -84,11 +84,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		if (Columns.Date.ordinal() == columnIndex) {
 			return Date.class;
diff --git a/src/main/java/com/gitblit/client/FeedsPanel.java b/src/main/java/com/gitblit/client/FeedsPanel.java
index 392636e..3b7959e 100644
--- a/src/main/java/com/gitblit/client/FeedsPanel.java
+++ b/src/main/java/com/gitblit/client/FeedsPanel.java
@@ -49,9 +49,9 @@
 /**
  * RSS Feeds Panel displays recent entries and launches the browser to view the
  * commit. commitdiff, or tree of a commit.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class FeedsPanel extends JPanel {
 
@@ -95,6 +95,7 @@
 		prev.setToolTipText(Translation.get("gb.pagePrevious"));
 		prev.setEnabled(false);
 		prev.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshFeeds(--page);
 			}
@@ -104,6 +105,7 @@
 		next.setToolTipText(Translation.get("gb.pageNext"));
 		next.setEnabled(false);
 		next.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshFeeds(++page);
 			}
@@ -111,6 +113,7 @@
 
 		JButton refreshFeeds = new JButton(Translation.get("gb.refresh"));
 		refreshFeeds.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshFeeds(0);
 			}
@@ -119,6 +122,7 @@
 		final JButton viewCommit = new JButton(Translation.get("gb.view"));
 		viewCommit.setEnabled(false);
 		viewCommit.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewCommit();
 			}
@@ -127,6 +131,7 @@
 		final JButton viewCommitDiff = new JButton(Translation.get("gb.commitdiff"));
 		viewCommitDiff.setEnabled(false);
 		viewCommitDiff.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewCommitDiff();
 			}
@@ -135,6 +140,7 @@
 		final JButton viewTree = new JButton(Translation.get("gb.tree"));
 		viewTree.setEnabled(false);
 		viewTree.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewTree();
 			}
@@ -142,6 +148,7 @@
 
 		JButton subscribeFeeds = new JButton(Translation.get("gb.subscribe") + "...");
 		subscribeFeeds.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				subscribeFeeds(gitblit.getAvailableFeeds());
 			}
@@ -171,6 +178,7 @@
 		table.getColumn(name).setCellRenderer(new MessageRenderer(gitblit));
 
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					if (e.isControlDown()) {
@@ -200,6 +208,7 @@
 		repositorySelector.setRenderer(nameRenderer);
 		repositorySelector.setForeground(nameRenderer.getForeground());
 		repositorySelector.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				// repopulate the author list based on repository selection
 				// preserve author selection, if possible
@@ -221,6 +230,7 @@
 		authorSelector.setRenderer(nameRenderer);
 		authorSelector.setForeground(nameRenderer.getForeground());
 		authorSelector.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				filterFeeds();
 			}
@@ -371,6 +381,7 @@
 		if (repository.equals(ALL)) {
 			// author filter
 			containsFilter = new RowFilter<FeedEntryTableModel, Object>() {
+				@Override
 				public boolean include(
 						Entry<? extends FeedEntryTableModel, ? extends Object> entry) {
 					return entry.getStringValue(authorIndex).equalsIgnoreCase(author);
@@ -379,6 +390,7 @@
 		} else if (author.equals(ALL)) {
 			// repository filter
 			containsFilter = new RowFilter<FeedEntryTableModel, Object>() {
+				@Override
 				public boolean include(
 						Entry<? extends FeedEntryTableModel, ? extends Object> entry) {
 					return entry.getStringValue(repositoryIndex).equalsIgnoreCase(repository);
@@ -387,6 +399,7 @@
 		} else {
 			// repository-author filter
 			containsFilter = new RowFilter<FeedEntryTableModel, Object>() {
+				@Override
 				public boolean include(
 						Entry<? extends FeedEntryTableModel, ? extends Object> entry) {
 					boolean authorMatch = entry.getStringValue(authorIndex)
diff --git a/src/main/java/com/gitblit/client/FeedsTableModel.java b/src/main/java/com/gitblit/client/FeedsTableModel.java
index 0979a4c..e709b6a 100644
--- a/src/main/java/com/gitblit/client/FeedsTableModel.java
+++ b/src/main/java/com/gitblit/client/FeedsTableModel.java
@@ -25,9 +25,9 @@
 
 /**
  * Table model of a list of available feeds.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FeedsTableModel extends AbstractTableModel {
 
@@ -77,11 +77,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		Columns col = Columns.values()[columnIndex];
 		switch (col) {
diff --git a/src/main/java/com/gitblit/client/GitblitClient.java b/src/main/java/com/gitblit/client/GitblitClient.java
index 427f45b..66625a8 100644
--- a/src/main/java/com/gitblit/client/GitblitClient.java
+++ b/src/main/java/com/gitblit/client/GitblitClient.java
@@ -55,9 +55,9 @@
 /**
  * GitblitClient is a object that retrieves data from a Gitblit server, caches
  * it for local operations, and allows updating or creating Gitblit objects.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitClient implements Serializable {
 
@@ -191,7 +191,7 @@
 			return sb.toString();
 		}
 	}
-	
+
 	public AccessRestrictionType getDefaultAccessRestriction() {
 		String restriction = "PUSH";
 		if (settings.hasKey(Keys.git.defaultAccessRestriction)) {
@@ -211,7 +211,7 @@
 	/**
 	 * Returns the list of pre-receive scripts the repository inherited from the
 	 * global settings and team affiliations.
-	 * 
+	 *
 	 * @param repository
 	 *            if null only the globally specified scripts are returned
 	 * @return a list of scripts
@@ -243,7 +243,7 @@
 	 * Returns the list of all available Groovy pre-receive push hook scripts
 	 * that are not already inherited by the repository. Script files must have
 	 * .groovy extension
-	 * 
+	 *
 	 * @param repository
 	 *            optional parameter
 	 * @return list of available hook scripts
@@ -264,7 +264,7 @@
 	/**
 	 * Returns the list of post-receive scripts the repository inherited from
 	 * the global settings and team affiliations.
-	 * 
+	 *
 	 * @param repository
 	 *            if null only the globally specified scripts are returned
 	 * @return a list of scripts
@@ -295,7 +295,7 @@
 	 * Returns the list of unused Groovy post-receive push hook scripts that are
 	 * not already inherited by the repository. Script files must have .groovy
 	 * extension
-	 * 
+	 *
 	 * @param repository
 	 *            optional parameter
 	 * @return list of available hook scripts
@@ -305,7 +305,7 @@
 
 		// create list of available scripts by excluding inherited scripts
 		List<String> scripts = new ArrayList<String>();
-		if (!ArrayUtils.isEmpty(settings.pushScripts)) {			
+		if (!ArrayUtils.isEmpty(settings.pushScripts)) {
 			for (String script : settings.pushScripts) {
 				if (!inherited.contains(script)) {
 					scripts.add(script);
@@ -478,7 +478,7 @@
 	public List<UserModel> getUsers() {
 		return allUsers;
 	}
-	
+
 	public UserModel getUser(String username) {
 		for (UserModel user : getUsers()) {
 			if (user.username.equalsIgnoreCase(username)) {
@@ -506,11 +506,11 @@
 		}
 		return usernames;
 	}
-	
+
 	/**
 	 * Returns the effective list of permissions for this user, taking into account
 	 * team memberships, ownerships.
-	 * 
+	 *
 	 * @param user
 	 * @return the effective list of permissions for the user
 	 */
@@ -541,12 +541,12 @@
 				set.add(rp);
 			}
 		}
-		
+
 		List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>(set);
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	public List<RegistrantAccessPermission> getUserAccessPermissions(RepositoryModel repository) {
 		List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>();
 		if (AccessRestrictionType.NONE.equals(repository.accessRestriction)) {
@@ -593,7 +593,7 @@
 		}
 		return teamnames;
 	}
-	
+
 	public List<RegistrantAccessPermission> getTeamAccessPermissions(RepositoryModel repository) {
 		List<RegistrantAccessPermission> list = new ArrayList<RegistrantAccessPermission>();
 		for (TeamModel team : allTeams) {
@@ -626,7 +626,7 @@
 	public List<RepositoryModel> getRepositories() {
 		return allRepositories;
 	}
-	
+
 	public RepositoryModel getRepository(String name) {
 		for (RepositoryModel repository : allRepositories) {
 			if (repository.name.equalsIgnoreCase(name)) {
@@ -682,7 +682,7 @@
 	public boolean deleteRepository(RepositoryModel repository) throws IOException {
 		return RpcUtils.deleteRepository(repository, url, account, password);
 	}
-	
+
 	public boolean clearRepositoryCache() throws IOException {
 		return RpcUtils.clearRepositoryCache(url, account, password);
 	}
diff --git a/src/main/java/com/gitblit/client/GitblitManager.java b/src/main/java/com/gitblit/client/GitblitManager.java
index d2fd7f7..06e4892 100644
--- a/src/main/java/com/gitblit/client/GitblitManager.java
+++ b/src/main/java/com/gitblit/client/GitblitManager.java
@@ -70,9 +70,9 @@
 
 /**
  * Gitblit Manager issues JSON RPC requests to a Gitblit server.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitManager extends JFrame implements RegistrationsDialog.RegistrationListener {
 
@@ -173,6 +173,7 @@
 		JMenuItem manage = new JMenuItem(Translation.get("gb.manage") + "...");
 		manage.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.CTRL_DOWN_MASK, false));
 		manage.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				manageRegistrations();
 			}
@@ -287,6 +288,7 @@
 			item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1 + i, KeyEvent.CTRL_DOWN_MASK,
 					false));
 			item.addActionListener(new ActionListener() {
+				@Override
 				public void actionPerformed(ActionEvent e) {
 					login(reg);
 				}
@@ -317,6 +319,7 @@
 				GitblitRegistration reg = new GitblitRegistration(server, url, account, password) {
 					private static final long serialVersionUID = 1L;
 
+					@Override
 					protected void cacheFeeds() {
 						writeFeedCache(this);
 					}
@@ -444,6 +447,7 @@
 
 	public static void main(String[] args) {
 		EventQueue.invokeLater(new Runnable() {
+			@Override
 			public void run() {
 				try {
 					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
diff --git a/src/main/java/com/gitblit/client/GitblitManagerLauncher.java b/src/main/java/com/gitblit/client/GitblitManagerLauncher.java
index d0cc839..8a43c47 100644
--- a/src/main/java/com/gitblit/client/GitblitManagerLauncher.java
+++ b/src/main/java/com/gitblit/client/GitblitManagerLauncher.java
@@ -36,9 +36,9 @@
 
 /**
  * Downloads dependencies and launches Gitblit Manager.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitManagerLauncher {
 
@@ -51,10 +51,10 @@
 
 	public static void main(String[] args) {
 		final SplashScreen splash = SplashScreen.getSplashScreen();
-		
+
 		File libFolder = new File("ext");
 		List<File> jars = findJars(libFolder.getAbsoluteFile());
-		
+
 		// sort the jars by name and then reverse the order so the newer version
 		// of the library gets loaded in the event that this is an upgrade
 		Collections.sort(jars);
@@ -67,7 +67,7 @@
 
 			}
 		}
-		
+
 		updateSplash(splash, Translation.get("gb.starting") + " Gitblit Manager...");
 		GitblitManager.main(args);
 	}
@@ -78,12 +78,13 @@
 		}
 		try {
 			EventQueue.invokeAndWait(new Runnable() {
+				@Override
 				public void run() {
 					Graphics2D g = splash.createGraphics();
 					if (g != null) {
 						// Splash is 320x120
 						FontMetrics fm = g.getFontMetrics();
-						
+
 						// paint startup status
 						g.setColor(Color.darkGray);
 						int h = fm.getHeight() + fm.getMaxDescent();
@@ -96,7 +97,7 @@
 						g.setColor(Color.WHITE);
 						int xw = fm.stringWidth(string);
 						g.drawString(string, x + ((w - xw) / 2), y - 5);
-						
+
 						// paint version
 						String ver = "v" + Constants.getVersion();
 						int vw = g.getFontMetrics().stringWidth(ver);
@@ -110,7 +111,7 @@
 			t.printStackTrace();
 		}
 	}
-	
+
 	public static List<File> findJars(File folder) {
 		List<File> jars = new ArrayList<File>();
 		if (folder.exists()) {
@@ -135,7 +136,7 @@
 
 	/**
 	 * Adds a file to the classpath
-	 * 
+	 *
 	 * @param f
 	 *            the file to be added
 	 * @throws IOException
diff --git a/src/main/java/com/gitblit/client/GitblitPanel.java b/src/main/java/com/gitblit/client/GitblitPanel.java
index f14ce79..84c7905 100644
--- a/src/main/java/com/gitblit/client/GitblitPanel.java
+++ b/src/main/java/com/gitblit/client/GitblitPanel.java
@@ -31,9 +31,9 @@
 
 /**
  * GitblitPanel is a container for the repository, users, settings, etc panels.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitPanel extends JPanel implements CloseTabListener {
 
@@ -50,7 +50,7 @@
 	private FeedsPanel feedsPanel;
 
 	private UsersPanel usersPanel;
-	
+
 	private TeamsPanel teamsPanel;
 
 	private SettingsPanel settingsPanel;
@@ -69,6 +69,7 @@
 		tabs.addTab(Translation.get("gb.settings"), createSettingsPanel());
 		tabs.addTab(Translation.get("gb.status"), createStatusPanel());
 		tabs.addChangeListener(new ChangeListener() {
+			@Override
 			public void stateChanged(ChangeEvent e) {
 				tabs.getSelectedComponent().requestFocus();
 			}
@@ -92,7 +93,7 @@
 			protected void updateUsersTable() {
 				usersPanel.updateTable(false);
 			}
-			
+
 			@Override
 			protected void updateTeamsTable() {
 				teamsPanel.updateTable(false);
@@ -116,9 +117,9 @@
 
 	private JPanel createUsersPanel() {
 		usersPanel = new UsersPanel(gitblit) {
-			
+
 			private static final long serialVersionUID = 1L;
-			
+
 			@Override
 			protected void updateTeamsTable() {
 				teamsPanel.updateTable(false);
@@ -126,10 +127,10 @@
 		};
 		return usersPanel;
 	}
-	
+
 	private JPanel createTeamsPanel() {
 		teamsPanel = new TeamsPanel(gitblit) {
-			
+
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -138,7 +139,7 @@
 			}
 		};
 		return teamsPanel;
-	}	
+	}
 
 	private JPanel createSettingsPanel() {
 		settingsPanel = new SettingsPanel(gitblit);
diff --git a/src/main/java/com/gitblit/client/GitblitRegistration.java b/src/main/java/com/gitblit/client/GitblitRegistration.java
index f9d0748..c95f01a 100644
--- a/src/main/java/com/gitblit/client/GitblitRegistration.java
+++ b/src/main/java/com/gitblit/client/GitblitRegistration.java
@@ -25,9 +25,9 @@
 
 /**
  * Simple class to encapsulate a Gitblit server registration.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitRegistration implements Serializable, Comparable<GitblitRegistration> {
 
diff --git a/src/main/java/com/gitblit/client/GitblitWorker.java b/src/main/java/com/gitblit/client/GitblitWorker.java
index 93c35d6..86ec920 100644
--- a/src/main/java/com/gitblit/client/GitblitWorker.java
+++ b/src/main/java/com/gitblit/client/GitblitWorker.java
@@ -50,6 +50,7 @@
 		return doRequest();
 	}
 
+	@Override
 	protected void done() {
 		parent.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 		try {
diff --git a/src/main/java/com/gitblit/client/IndicatorsRenderer.java b/src/main/java/com/gitblit/client/IndicatorsRenderer.java
index 44b39d0..66cce01 100644
--- a/src/main/java/com/gitblit/client/IndicatorsRenderer.java
+++ b/src/main/java/com/gitblit/client/IndicatorsRenderer.java
@@ -30,9 +30,9 @@
 /**
  * Renders the type indicators (tickets, frozen, access restriction, etc) in a
  * single cell.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class IndicatorsRenderer extends JPanel implements TableCellRenderer, Serializable {
 
@@ -53,9 +53,9 @@
 	private final ImageIcon frozenIcon;
 
 	private final ImageIcon federatedIcon;
-	
+
 	private final ImageIcon forkIcon;
-	
+
 	private final ImageIcon sparkleshareIcon;
 
 	public IndicatorsRenderer() {
diff --git a/src/main/java/com/gitblit/client/JPalette.java b/src/main/java/com/gitblit/client/JPalette.java
index a0c2b25..47b3f4d 100644
--- a/src/main/java/com/gitblit/client/JPalette.java
+++ b/src/main/java/com/gitblit/client/JPalette.java
@@ -58,6 +58,7 @@
 
 		add = new JButton("->");
 		add.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				List<T> move = new ArrayList<T>();
 				if (available.getSelectedRowCount() <= 0) {
@@ -65,7 +66,7 @@
 				}
 				for (int row : available.getSelectedRows()) {
 					int modelIndex = available.convertRowIndexToModel(row);
-					T item = (T) availableModel.list.get(modelIndex);
+					T item = availableModel.list.get(modelIndex);
 					move.add(item);
 				}
 				availableModel.list.removeAll(move);
@@ -76,6 +77,7 @@
 		});
 		subtract = new JButton("<-");
 		subtract.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				List<T> move = new ArrayList<T>();
 				if (selected.getSelectedRowCount() <= 0) {
@@ -83,7 +85,7 @@
 				}
 				for (int row : selected.getSelectedRows()) {
 					int modelIndex = selected.convertRowIndexToModel(row);
-					T item = (T) selectedModel.list.get(modelIndex);
+					T item = selectedModel.list.get(modelIndex);
 					move.add(item);
 				}
 				selectedModel.list.removeAll(move);
@@ -96,6 +98,7 @@
 
 		up = new JButton("\u2191");
 		up.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				int row = selected.getSelectedRow();
 				if (row > 0) {
@@ -108,6 +111,7 @@
 
 		down = new JButton("\u2193");
 		down.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				int row = selected.getSelectedRow();
 				if (row < selected.getRowCount() - 1) {
@@ -152,7 +156,7 @@
 		panel.add(jsp, BorderLayout.CENTER);
 		return panel;
 	}
-	
+
 	@Override
 	public void setEnabled(boolean enabled) {
 		super.setEnabled(enabled);
@@ -211,6 +215,7 @@
 			return Translation.get("gb.name");
 		}
 
+		@Override
 		public Class<?> getColumnClass(int columnIndex) {
 			return String.class;
 		}
diff --git a/src/main/java/com/gitblit/client/MessageRenderer.java b/src/main/java/com/gitblit/client/MessageRenderer.java
index 2fe3415..453c4fc 100644
--- a/src/main/java/com/gitblit/client/MessageRenderer.java
+++ b/src/main/java/com/gitblit/client/MessageRenderer.java
@@ -36,20 +36,20 @@
 /**
  * Message renderer displays the short log message and then any refs in a style
  * like the site.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class MessageRenderer extends JPanel implements TableCellRenderer, Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	private final GitblitClient gitblit;
-	
+
 	private final ImageIcon mergeIcon;
-	
+
 	private final ImageIcon blankIcon;
-	
+
 	private final JLabel messageLabel;
 
 	private final JLabel headLabel;
@@ -67,12 +67,12 @@
 	public MessageRenderer(GitblitClient gitblit) {
 		super(new FlowLayout(FlowLayout.LEFT, Utils.MARGIN, 1));
 		this.gitblit = gitblit;
-	
+
 		mergeIcon = new ImageIcon(getClass().getResource("/commit_merge_16x16.png"));
 		blankIcon = new ImageIcon(getClass().getResource("/blank.png"));
 
 		messageLabel = new JLabel();
-	
+
 		headLabel = newRefLabel();
 		branchLabel = newRefLabel();
 		remoteLabel = newRefLabel();
@@ -85,7 +85,7 @@
 		add(tagLabel);
 	}
 
-	private JLabel newRefLabel() {		
+	private JLabel newRefLabel() {
 		JLabel label = new JLabel();
 		label.setOpaque(true);
 		Font font = label.getFont();
@@ -131,6 +131,7 @@
 		label.setVisible(true);
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		if (isSelected)
diff --git a/src/main/java/com/gitblit/client/NameRenderer.java b/src/main/java/com/gitblit/client/NameRenderer.java
index 4cbb590..29b8f9b 100644
--- a/src/main/java/com/gitblit/client/NameRenderer.java
+++ b/src/main/java/com/gitblit/client/NameRenderer.java
@@ -26,9 +26,9 @@
 /**
  * Repository name cell renderer. This renderer shows the group name in a gray
  * color and accentuates the repository name in a cornflower blue color.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class NameRenderer extends DefaultTableCellRenderer implements ListCellRenderer {
 
@@ -56,6 +56,7 @@
 		return sb.toString();
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/client/PropertiesTableModel.java b/src/main/java/com/gitblit/client/PropertiesTableModel.java
index 0c803f4..9941ee4 100644
--- a/src/main/java/com/gitblit/client/PropertiesTableModel.java
+++ b/src/main/java/com/gitblit/client/PropertiesTableModel.java
@@ -25,9 +25,9 @@
 
 /**
  * Table model of a map of properties.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PropertiesTableModel extends AbstractTableModel {
 
@@ -82,11 +82,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		return String.class;
 	}
diff --git a/src/main/java/com/gitblit/client/RegistrantPermissionsPanel.java b/src/main/java/com/gitblit/client/RegistrantPermissionsPanel.java
index 98dbfb7..3d5aa4a 100644
--- a/src/main/java/com/gitblit/client/RegistrantPermissionsPanel.java
+++ b/src/main/java/com/gitblit/client/RegistrantPermissionsPanel.java
@@ -46,7 +46,7 @@
 public class RegistrantPermissionsPanel extends JPanel {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	private JTable permissionsTable;
 
 	private RegistrantPermissionsTableModel tableModel;
@@ -67,7 +67,7 @@
 		permissionsTable = Utils.newTable(tableModel, Utils.DATE_FORMAT, new RowRenderer() {
 			Color clear = new Color(0, 0, 0, 0);
 			Color iceGray = new Color(0xf0, 0xf0, 0xf0);
-			
+
 			@Override
 			public void prepareRow(Component c, boolean isSelected, int row, int column) {
 				if (isSelected) {
@@ -85,19 +85,20 @@
 		permissionsTable.setPreferredScrollableViewportSize(new Dimension(400, 150));
 		JScrollPane jsp = new JScrollPane(permissionsTable);
 		add(jsp, BorderLayout.CENTER);
-		
+
 		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Registrant.ordinal())
 		.setCellRenderer(new NameRenderer());
 		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Type.ordinal())
 				.setCellRenderer(new PermissionTypeRenderer());
 		permissionsTable.getColumnModel().getColumn(RegistrantPermissionsTableModel.Columns.Permission.ordinal())
 		.setCellEditor(new AccessPermissionEditor());
-		
+
 		registrantModel = new DefaultComboBoxModel();
 		registrantSelector = new JComboBox(registrantModel);
 		permissionSelector = new JComboBox(AccessPermission.NEWPERMISSIONS);
 		addButton = new JButton(Translation.get("gb.add"));
 		addButton.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				if (registrantSelector.getSelectedIndex() < 0) {
 					return;
@@ -105,7 +106,7 @@
 				if (permissionSelector.getSelectedIndex() < 0) {
 					return;
 				}
-				
+
 				RegistrantAccessPermission rp = new RegistrantAccessPermission(registrantType);
 				rp.registrant = registrantSelector.getSelectedItem().toString();
 				rp.permission = (AccessPermission) permissionSelector.getSelectedItem();
@@ -119,16 +120,16 @@
 				tableModel.permissions.add(rp);
 				// resort permissions after insert to convey idea of eval order
 				Collections.sort(tableModel.permissions);
-				
+
 				registrantModel.removeElement(rp.registrant);
 				registrantSelector.setSelectedIndex(-1);
 				registrantSelector.invalidate();
 				addPanel.setVisible(registrantModel.getSize() > 0);
-				
+
 				tableModel.fireTableDataChanged();
 			}
 		});
-		
+
 		addPanel = new JPanel();
 		addPanel.add(registrantSelector);
 		addPanel.add(permissionSelector);
@@ -172,7 +173,7 @@
 			registrantModel.addElement(registrant);
 		}
 		tableModel.setPermissions(permissions);
-		
+
 		registrantSelector.setSelectedIndex(-1);
 		permissionSelector.setSelectedIndex(-1);
 		addPanel.setVisible(filtered.size() > 0);
@@ -181,16 +182,16 @@
 	public List<RegistrantAccessPermission> getPermissions() {
 		return tableModel.permissions;
 	}
-	
+
 	private class AccessPermissionEditor extends DefaultCellEditor {
-	    
+
 		private static final long serialVersionUID = 1L;
 
 		public AccessPermissionEditor() {
-	        super(new JComboBox(AccessPermission.values()));	        
+	        super(new JComboBox(AccessPermission.values()));
 	    }
 	}
-	
+
 	private class PermissionTypeRenderer extends DefaultTableCellRenderer {
 
 		private static final long serialVersionUID = 1L;
diff --git a/src/main/java/com/gitblit/client/RegistrantPermissionsTableModel.java b/src/main/java/com/gitblit/client/RegistrantPermissionsTableModel.java
index 28d2534..402104d 100644
--- a/src/main/java/com/gitblit/client/RegistrantPermissionsTableModel.java
+++ b/src/main/java/com/gitblit/client/RegistrantPermissionsTableModel.java
@@ -25,9 +25,9 @@
 
 /**
  * Table model of a registrant permissions.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RegistrantPermissionsTableModel extends AbstractTableModel {
 
@@ -82,11 +82,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		if (columnIndex == Columns.Permission.ordinal()) {
 			return AccessPermission.class;
@@ -95,7 +96,7 @@
 		}
 		return String.class;
 	}
-	
+
 	@Override
 	public boolean isCellEditable(int rowIndex, int columnIndex) {
 		if (columnIndex == Columns.Permission.ordinal()) {
@@ -123,7 +124,7 @@
 		}
 		return null;
 	}
-	
+
 	@Override
 	public void setValueAt(Object o, int rowIndex, int columnIndex) {
 		RegistrantAccessPermission rp = permissions.get(rowIndex);
diff --git a/src/main/java/com/gitblit/client/RegistrationsDialog.java b/src/main/java/com/gitblit/client/RegistrationsDialog.java
index 9550e97..edbc862 100644
--- a/src/main/java/com/gitblit/client/RegistrationsDialog.java
+++ b/src/main/java/com/gitblit/client/RegistrationsDialog.java
@@ -41,9 +41,9 @@
 /**
  * Displays a list of registrations and allows management of server
  * registrations.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RegistrationsDialog extends JDialog {
 
@@ -82,6 +82,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -98,6 +99,7 @@
 				.getColumnName(RegistrationsTableModel.Columns.Name.ordinal());
 		registrationsTable.getColumn(id).setCellRenderer(nameRenderer);
 		registrationsTable.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					login();
@@ -107,6 +109,7 @@
 
 		final JButton create = new JButton(Translation.get("gb.create"));
 		create.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				create();
 			}
@@ -115,6 +118,7 @@
 		final JButton login = new JButton(Translation.get("gb.login"));
 		login.setEnabled(false);
 		login.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				login();
 			}
@@ -123,6 +127,7 @@
 		final JButton edit = new JButton(Translation.get("gb.edit"));
 		edit.setEnabled(false);
 		edit.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				edit();
 			}
@@ -131,6 +136,7 @@
 		final JButton delete = new JButton(Translation.get("gb.delete"));
 		delete.setEnabled(false);
 		delete.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				delete();
 			}
@@ -162,6 +168,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return insets;
 			}
diff --git a/src/main/java/com/gitblit/client/RegistrationsTableModel.java b/src/main/java/com/gitblit/client/RegistrationsTableModel.java
index 8c6b34f..4c106bc 100644
--- a/src/main/java/com/gitblit/client/RegistrationsTableModel.java
+++ b/src/main/java/com/gitblit/client/RegistrationsTableModel.java
@@ -23,9 +23,9 @@
 
 /**
  * Table model of a list of Gitblit server registrations.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RegistrationsTableModel extends AbstractTableModel {
 
@@ -73,11 +73,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		if (columnIndex == Columns.Last_Login.ordinal()) {
 			return Date.class;
diff --git a/src/main/java/com/gitblit/client/RepositoriesPanel.java b/src/main/java/com/gitblit/client/RepositoriesPanel.java
index 64bde9b..0fab934 100644
--- a/src/main/java/com/gitblit/client/RepositoriesPanel.java
+++ b/src/main/java/com/gitblit/client/RepositoriesPanel.java
@@ -57,9 +57,9 @@
 /**
  * RSS Feeds Panel displays recent entries and launches the browser to view the
  * commit. commitdiff, or tree of a commit.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class RepositoriesPanel extends JPanel {
 
@@ -95,6 +95,7 @@
 		final JButton browseRepository = new JButton(Translation.get("gb.browse"));
 		browseRepository.setEnabled(false);
 		browseRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				RepositoryModel model = getSelectedRepositories().get(0);
 				String url = gitblit.getURL("summary", model.name, null);
@@ -104,13 +105,15 @@
 
 		JButton refreshRepositories = new JButton(Translation.get("gb.refresh"));
 		refreshRepositories.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshRepositories();
 			}
 		});
-		
+
 		clearCache = new JButton(Translation.get("gb.clearCache"));
 		clearCache.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				clearCache();
 			}
@@ -118,6 +121,7 @@
 
 		createRepository = new JButton(Translation.get("gb.create"));
 		createRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				createRepository();
 			}
@@ -126,6 +130,7 @@
 		editRepository = new JButton(Translation.get("gb.edit"));
 		editRepository.setEnabled(false);
 		editRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				editRepository(getSelectedRepositories().get(0));
 			}
@@ -134,6 +139,7 @@
 		delRepository = new JButton(Translation.get("gb.delete"));
 		delRepository.setEnabled(false);
 		delRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				deleteRepositories(getSelectedRepositories());
 			}
@@ -142,6 +148,7 @@
 		final JButton subscribeRepository = new JButton(Translation.get("gb.subscribe") + "...");
 		subscribeRepository.setEnabled(false);
 		subscribeRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				List<FeedModel> feeds = gitblit.getAvailableFeeds(getSelectedRepositories().get(0));
 				subscribeFeeds(feeds);
@@ -151,6 +158,7 @@
 		final JButton logRepository = new JButton(Translation.get("gb.log") + "...");
 		logRepository.setEnabled(false);
 		logRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				RepositoryModel model = getSelectedRepositories().get(0);
 				showSearchDialog(false, model);
@@ -160,6 +168,7 @@
 		final JButton searchRepository = new JButton(Translation.get("gb.search") + "...");
 		searchRepository.setEnabled(false);
 		searchRepository.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				RepositoryModel model = getSelectedRepositories().get(0);
 				showSearchDialog(true, model);
@@ -223,6 +232,7 @@
 		});
 
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2 && gitblit.allowManagement()) {
 					editRepository(getSelectedRepositories().get(0));
@@ -232,11 +242,13 @@
 
 		filterTextfield = new JTextField();
 		filterTextfield.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				filterRepositories(filterTextfield.getText());
 			}
 		});
 		filterTextfield.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent e) {
 				filterRepositories(filterTextfield.getText());
 			}
@@ -318,6 +330,7 @@
 			return;
 		}
 		RowFilter<RepositoriesTableModel, Object> containsFilter = new RowFilter<RepositoriesTableModel, Object>() {
+			@Override
 			public boolean include(Entry<? extends RepositoriesTableModel, ? extends Object> entry) {
 				for (int i = entry.getValueCount() - 1; i >= 0; i--) {
 					if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
@@ -359,7 +372,7 @@
 		};
 		worker.execute();
 	}
-	
+
 	protected void clearCache() {
 		GitblitWorker worker = new GitblitWorker(RepositoriesPanel.this,
 				RpcRequest.CLEAR_REPOSITORY_CACHE) {
@@ -383,7 +396,7 @@
 	/**
 	 * Displays the create repository dialog and fires a SwingWorker to update
 	 * the server, if appropriate.
-	 * 
+	 *
 	 */
 	protected void createRepository() {
 		EditRepositoryDialog dialog = new EditRepositoryDialog(gitblit.getProtocolVersion());
@@ -444,7 +457,7 @@
 	/**
 	 * Displays the edit repository dialog and fires a SwingWorker to update the
 	 * server, if appropriate.
-	 * 
+	 *
 	 * @param repository
 	 */
 	protected void editRepository(final RepositoryModel repository) {
diff --git a/src/main/java/com/gitblit/client/RepositoriesTableModel.java b/src/main/java/com/gitblit/client/RepositoriesTableModel.java
index 6b295a4..0d26e42 100644
--- a/src/main/java/com/gitblit/client/RepositoriesTableModel.java
+++ b/src/main/java/com/gitblit/client/RepositoriesTableModel.java
@@ -27,9 +27,9 @@
 
 /**
  * Table model of a list of repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RepositoriesTableModel extends AbstractTableModel {
 
@@ -85,11 +85,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		Columns col = Columns.values()[columnIndex];
 		switch (col) {
diff --git a/src/main/java/com/gitblit/client/SearchDialog.java b/src/main/java/com/gitblit/client/SearchDialog.java
index 829bc52..71204cb 100644
--- a/src/main/java/com/gitblit/client/SearchDialog.java
+++ b/src/main/java/com/gitblit/client/SearchDialog.java
@@ -51,9 +51,9 @@
 /**
  * The search dialog allows searching of a repository branch. This matches the
  * search implementation of the site.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SearchDialog extends JFrame {
 
@@ -103,6 +103,7 @@
 		prev.setToolTipText(Translation.get("gb.pagePrevious"));
 		prev.setEnabled(false);
 		prev.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				search(--page);
 			}
@@ -112,6 +113,7 @@
 		next.setToolTipText(Translation.get("gb.pageNext"));
 		next.setEnabled(false);
 		next.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				search(++page);
 			}
@@ -119,6 +121,7 @@
 
 		final JButton search = new JButton(Translation.get(isSearch ? "gb.search" : "gb.refresh"));
 		search.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				search(0);
 			}
@@ -127,6 +130,7 @@
 		final JButton viewCommit = new JButton(Translation.get("gb.view"));
 		viewCommit.setEnabled(false);
 		viewCommit.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewCommit();
 			}
@@ -135,6 +139,7 @@
 		final JButton viewCommitDiff = new JButton(Translation.get("gb.commitdiff"));
 		viewCommitDiff.setEnabled(false);
 		viewCommitDiff.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewCommitDiff();
 			}
@@ -143,6 +148,7 @@
 		final JButton viewTree = new JButton(Translation.get("gb.tree"));
 		viewTree.setEnabled(false);
 		viewTree.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				viewTree();
 			}
@@ -171,6 +177,7 @@
 		table.getColumn(name).setCellRenderer(new MessageRenderer());
 
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					if (e.isControlDown()) {
@@ -199,6 +206,7 @@
 		repositorySelector.setRenderer(nameRenderer);
 		repositorySelector.setForeground(nameRenderer.getForeground());
 		repositorySelector.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				// repopulate the branch list based on repository selection
 				// preserve branch selection, if possible
@@ -234,6 +242,7 @@
 
 		searchFragment = new JTextField(25);
 		searchFragment.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				search(0);
 			}
diff --git a/src/main/java/com/gitblit/client/SettingCellRenderer.java b/src/main/java/com/gitblit/client/SettingCellRenderer.java
index d164fb1..2f52ddb 100644
--- a/src/main/java/com/gitblit/client/SettingCellRenderer.java
+++ b/src/main/java/com/gitblit/client/SettingCellRenderer.java
@@ -27,9 +27,9 @@
 /**
  * SettingModel cell renderer that indicates if a setting is the default or
  * modified.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SettingCellRenderer extends DefaultTableCellRenderer {
 
@@ -44,6 +44,7 @@
 		modifiedFont = defaultFont.deriveFont(Font.BOLD);
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/client/SettingPanel.java b/src/main/java/com/gitblit/client/SettingPanel.java
index 6da09e1..9e64400 100644
--- a/src/main/java/com/gitblit/client/SettingPanel.java
+++ b/src/main/java/com/gitblit/client/SettingPanel.java
@@ -33,7 +33,7 @@
 
 /**
  * This panel displays the metadata for a particular setting.
- * 
+ *
  * @author James Moger
  */
 public class SettingPanel extends JPanel {
diff --git a/src/main/java/com/gitblit/client/SettingsPanel.java b/src/main/java/com/gitblit/client/SettingsPanel.java
index b0adc0c..b4129fa 100644
--- a/src/main/java/com/gitblit/client/SettingsPanel.java
+++ b/src/main/java/com/gitblit/client/SettingsPanel.java
@@ -50,9 +50,9 @@
 /**
  * Settings panel displays a list of server settings and their associated
  * metadata. This panel also allows editing of a setting.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SettingsPanel extends JPanel {
 
@@ -79,6 +79,7 @@
 	private void initialize() {
 		JButton refreshSettings = new JButton(Translation.get("gb.refresh"));
 		refreshSettings.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshSettings();
 			}
@@ -86,6 +87,7 @@
 
 		final JButton editSetting = new JButton(Translation.get("gb.edit"));
 		editSetting.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				int viewRow = table.getSelectedRow();
 				int modelRow = table.convertRowIndexToModel(viewRow);
@@ -125,6 +127,7 @@
 			}
 		});
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					int viewRow = table.getSelectedRow();
@@ -137,11 +140,13 @@
 
 		filterTextfield = new JTextField();
 		filterTextfield.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				filterSettings(filterTextfield.getText());
 			}
 		});
 		filterTextfield.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent e) {
 				filterSettings(filterTextfield.getText());
 			}
@@ -166,7 +171,7 @@
 		add(settingsTablePanel, BorderLayout.CENTER);
 		add(settingsControls, BorderLayout.SOUTH);
 	}
-	
+
 	@Override
 	public void requestFocus() {
 		filterTextfield.requestFocus();
@@ -192,6 +197,7 @@
 			return;
 		}
 		RowFilter<SettingsTableModel, Object> containsFilter = new RowFilter<SettingsTableModel, Object>() {
+			@Override
 			public boolean include(Entry<? extends SettingsTableModel, ? extends Object> entry) {
 				for (int i = entry.getValueCount() - 1; i >= 0; i--) {
 					if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
diff --git a/src/main/java/com/gitblit/client/SettingsTableModel.java b/src/main/java/com/gitblit/client/SettingsTableModel.java
index f14eae4..a781c69 100644
--- a/src/main/java/com/gitblit/client/SettingsTableModel.java
+++ b/src/main/java/com/gitblit/client/SettingsTableModel.java
@@ -26,9 +26,9 @@
 
 /**
  * Table model of Map<String, SettingModel>.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SettingsTableModel extends AbstractTableModel {
 
@@ -89,11 +89,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		if (Columns.Value.ordinal() == columnIndex) {
 			return SettingModel.class;
diff --git a/src/main/java/com/gitblit/client/StatusPanel.java b/src/main/java/com/gitblit/client/StatusPanel.java
index 6d004f1..2c061c2 100644
--- a/src/main/java/com/gitblit/client/StatusPanel.java
+++ b/src/main/java/com/gitblit/client/StatusPanel.java
@@ -38,7 +38,7 @@
 
 /**
  * This panel displays the server status.
- * 
+ *
  * @author James Moger
  */
 public class StatusPanel extends JPanel {
@@ -65,6 +65,7 @@
 	private void initialize() {
 		JButton refreshStatus = new JButton(Translation.get("gb.refresh"));
 		refreshStatus.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshStatus();
 			}
@@ -153,7 +154,7 @@
 		ServerStatus status = gitblit.getStatus();
 		header.setText(Translation.get("gb.status"));
 		version.setText(Constants.NAME + (status.isGO ? " GO v" : " WAR v") + status.version);
-		releaseDate.setText(status.releaseDate);		
+		releaseDate.setText(status.releaseDate);
 		bootDate.setText(status.bootDate.toString() + " (" + Translation.getTimeUtils().timeAgo(status.bootDate)
 				+ ")");
 		url.setText(gitblit.url);
diff --git a/src/main/java/com/gitblit/client/SubscribedRepositoryRenderer.java b/src/main/java/com/gitblit/client/SubscribedRepositoryRenderer.java
index 9943333..37769f9 100644
--- a/src/main/java/com/gitblit/client/SubscribedRepositoryRenderer.java
+++ b/src/main/java/com/gitblit/client/SubscribedRepositoryRenderer.java
@@ -25,9 +25,9 @@
 /**
  * Displays a subscribed icon on the left of the repository name, if there is at
  * least one subscribed branch.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SubscribedRepositoryRenderer extends NameRenderer {
 
@@ -46,6 +46,7 @@
 		subscribedIcon = new ImageIcon(getClass().getResource("/bullet_feed.png"));
 	}
 
+	@Override
 	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 			boolean hasFocus, int row, int column) {
 		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
diff --git a/src/main/java/com/gitblit/client/SubscriptionsDialog.java b/src/main/java/com/gitblit/client/SubscriptionsDialog.java
index 5ae836a..f348e90 100644
--- a/src/main/java/com/gitblit/client/SubscriptionsDialog.java
+++ b/src/main/java/com/gitblit/client/SubscriptionsDialog.java
@@ -40,9 +40,9 @@
 /**
  * Displays a list of repository branches and allows the user to check or
  * uncheck branches.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class SubscriptionsDialog extends JDialog {
 
@@ -68,6 +68,7 @@
 		KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 		JRootPane rootPane = new JRootPane();
 		rootPane.registerKeyboardAction(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent actionEvent) {
 				setVisible(false);
 			}
@@ -111,6 +112,7 @@
 
 		final JButton cancel = new JButton(Translation.get("gb.cancel"));
 		cancel.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				setVisible(false);
 			}
@@ -118,6 +120,7 @@
 
 		final JButton save = new JButton(Translation.get("gb.save"));
 		save.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent event) {
 				save();
 			}
@@ -141,6 +144,7 @@
 
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public Insets getInsets() {
 				return insets;
 			}
diff --git a/src/main/java/com/gitblit/client/TeamsPanel.java b/src/main/java/com/gitblit/client/TeamsPanel.java
index 9218222..4f52fde 100644
--- a/src/main/java/com/gitblit/client/TeamsPanel.java
+++ b/src/main/java/com/gitblit/client/TeamsPanel.java
@@ -47,9 +47,9 @@
 /**
  * Users panel displays a list of user accounts and allows management of those
  * accounts.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class TeamsPanel extends JPanel {
 
@@ -76,6 +76,7 @@
 	private void initialize() {
 		JButton refreshTeams = new JButton(Translation.get("gb.refresh"));
 		refreshTeams.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshTeams();
 			}
@@ -83,6 +84,7 @@
 
 		JButton createTeam = new JButton(Translation.get("gb.create"));
 		createTeam.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				createTeam();
 			}
@@ -91,6 +93,7 @@
 		final JButton editTeam = new JButton(Translation.get("gb.edit"));
 		editTeam.setEnabled(false);
 		editTeam.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				editTeam(getSelectedTeams().get(0));
 			}
@@ -99,6 +102,7 @@
 		final JButton delTeam = new JButton(Translation.get("gb.delete"));
 		delTeam.setEnabled(false);
 		delTeam.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				deleteTeams(getSelectedTeams());
 			}
@@ -136,6 +140,7 @@
 		});
 
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					editTeam(getSelectedTeams().get(0));
@@ -145,11 +150,13 @@
 
 		filterTextfield = new JTextField();
 		filterTextfield.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				filterTeams(filterTextfield.getText());
 			}
 		});
 		filterTextfield.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent e) {
 				filterTeams(filterTextfield.getText());
 			}
@@ -204,6 +211,7 @@
 			return;
 		}
 		RowFilter<TeamsTableModel, Object> containsFilter = new RowFilter<TeamsTableModel, Object>() {
+			@Override
 			public boolean include(Entry<? extends TeamsTableModel, ? extends Object> entry) {
 				for (int i = entry.getValueCount() - 1; i >= 0; i--) {
 					if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
@@ -247,7 +255,7 @@
 	/**
 	 * Displays the create team dialog and fires a SwingWorker to update the
 	 * server, if appropriate.
-	 * 
+	 *
 	 */
 	protected void createTeam() {
 		EditTeamDialog dialog = new EditTeamDialog(gitblit.getProtocolVersion(),
@@ -296,7 +304,7 @@
 	/**
 	 * Displays the edit team dialog and fires a SwingWorker to update the
 	 * server, if appropriate.
-	 * 
+	 *
 	 * @param user
 	 */
 	protected void editTeam(final TeamModel team) {
diff --git a/src/main/java/com/gitblit/client/TeamsTableModel.java b/src/main/java/com/gitblit/client/TeamsTableModel.java
index e6d8a94..bc43a6c 100644
--- a/src/main/java/com/gitblit/client/TeamsTableModel.java
+++ b/src/main/java/com/gitblit/client/TeamsTableModel.java
@@ -25,9 +25,9 @@
 
 /**
  * Table model of a list of teams.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class TeamsTableModel extends AbstractTableModel {
 
@@ -79,11 +79,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		return String.class;
 	}
diff --git a/src/main/java/com/gitblit/client/Translation.java b/src/main/java/com/gitblit/client/Translation.java
index 9f643db..87e2b83 100644
--- a/src/main/java/com/gitblit/client/Translation.java
+++ b/src/main/java/com/gitblit/client/Translation.java
@@ -22,14 +22,14 @@
 
 /**
  * Loads the Gitblit language resource file.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class Translation {
 
 	private final static ResourceBundle translation;
-	
+
 	private final static TimeUtils timeUtils;
 
 	static {
@@ -42,7 +42,7 @@
 			bundle = ResourceBundle.getBundle("GitBlitWebApp");
 		}
 		translation = bundle;
-		
+
 		timeUtils = new TimeUtils(translation, null);
 	}
 
@@ -52,7 +52,7 @@
 		}
 		return key;
 	}
-	
+
 	public static TimeUtils getTimeUtils() {
 		return timeUtils;
 	}
diff --git a/src/main/java/com/gitblit/client/UsersPanel.java b/src/main/java/com/gitblit/client/UsersPanel.java
index c53a579..f947e69 100644
--- a/src/main/java/com/gitblit/client/UsersPanel.java
+++ b/src/main/java/com/gitblit/client/UsersPanel.java
@@ -48,9 +48,9 @@
 /**
  * Users panel displays a list of user accounts and allows management of those
  * accounts.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class UsersPanel extends JPanel {
 
@@ -77,6 +77,7 @@
 	private void initialize() {
 		JButton refreshUsers = new JButton(Translation.get("gb.refresh"));
 		refreshUsers.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				refreshUsers();
 			}
@@ -84,6 +85,7 @@
 
 		JButton createUser = new JButton(Translation.get("gb.create"));
 		createUser.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				createUser();
 			}
@@ -92,6 +94,7 @@
 		final JButton editUser = new JButton(Translation.get("gb.edit"));
 		editUser.setEnabled(false);
 		editUser.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				editUser(getSelectedUsers().get(0));
 			}
@@ -100,6 +103,7 @@
 		final JButton delUser = new JButton(Translation.get("gb.delete"));
 		delUser.setEnabled(false);
 		delUser.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				deleteUsers(getSelectedUsers());
 			}
@@ -111,7 +115,7 @@
 		table = Utils.newTable(tableModel, Utils.DATE_FORMAT);
 		String name = table.getColumnName(UsersTableModel.Columns.Name.ordinal());
 		table.getColumn(name).setCellRenderer(nameRenderer);
-		
+
 		int w = 130;
 		name = table.getColumnName(UsersTableModel.Columns.Type.ordinal());
 		table.getColumn(name).setMinWidth(w);
@@ -122,7 +126,7 @@
 		name = table.getColumnName(UsersTableModel.Columns.Repositories.ordinal());
 		table.getColumn(name).setMinWidth(w);
 		table.getColumn(name).setMaxWidth(w);
-		
+
 		table.setRowSorter(defaultSorter);
 		table.getRowSorter().toggleSortOrder(UsersTableModel.Columns.Name.ordinal());
 		table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@@ -140,6 +144,7 @@
 		});
 
 		table.addMouseListener(new MouseAdapter() {
+			@Override
 			public void mouseClicked(MouseEvent e) {
 				if (e.getClickCount() == 2) {
 					editUser(getSelectedUsers().get(0));
@@ -149,11 +154,13 @@
 
 		filterTextfield = new JTextField();
 		filterTextfield.addActionListener(new ActionListener() {
+			@Override
 			public void actionPerformed(ActionEvent e) {
 				filterUsers(filterTextfield.getText());
 			}
 		});
 		filterTextfield.addKeyListener(new KeyAdapter() {
+			@Override
 			public void keyReleased(KeyEvent e) {
 				filterUsers(filterTextfield.getText());
 			}
@@ -191,7 +198,7 @@
 	}
 
 	protected abstract void updateTeamsTable();
-	
+
 	protected void updateTable(boolean pack) {
 		tableModel.list.clear();
 		tableModel.list.addAll(gitblit.getUsers());
@@ -208,6 +215,7 @@
 			return;
 		}
 		RowFilter<UsersTableModel, Object> containsFilter = new RowFilter<UsersTableModel, Object>() {
+			@Override
 			public boolean include(Entry<? extends UsersTableModel, ? extends Object> entry) {
 				for (int i = entry.getValueCount() - 1; i >= 0; i--) {
 					if (entry.getStringValue(i).toLowerCase().contains(fragment.toLowerCase())) {
@@ -251,7 +259,7 @@
 	/**
 	 * Displays the create user dialog and fires a SwingWorker to update the
 	 * server, if appropriate.
-	 * 
+	 *
 	 */
 	protected void createUser() {
 		EditUserDialog dialog = new EditUserDialog(gitblit.getProtocolVersion(),
@@ -300,7 +308,7 @@
 	/**
 	 * Displays the edit user dialog and fires a SwingWorker to update the
 	 * server, if appropriate.
-	 * 
+	 *
 	 * @param user
 	 */
 	protected void editUser(final UserModel user) {
diff --git a/src/main/java/com/gitblit/client/UsersTableModel.java b/src/main/java/com/gitblit/client/UsersTableModel.java
index 439d5af..aedb9cb 100644
--- a/src/main/java/com/gitblit/client/UsersTableModel.java
+++ b/src/main/java/com/gitblit/client/UsersTableModel.java
@@ -25,9 +25,9 @@
 
 /**
  * Table model of a list of users.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class UsersTableModel extends AbstractTableModel {
 
@@ -83,11 +83,12 @@
 
 	/**
 	 * Returns <code>Object.class</code> regardless of <code>columnIndex</code>.
-	 * 
+	 *
 	 * @param columnIndex
 	 *            the column being queried
 	 * @return the Object.class
 	 */
+	@Override
 	public Class<?> getColumnClass(int columnIndex) {
 		return String.class;
 	}
diff --git a/src/main/java/com/gitblit/client/Utils.java b/src/main/java/com/gitblit/client/Utils.java
index 1e6ab2b..ad3a307 100644
--- a/src/main/java/com/gitblit/client/Utils.java
+++ b/src/main/java/com/gitblit/client/Utils.java
@@ -51,14 +51,14 @@
 	public static JTable newTable(TableModel model, String datePattern) {
 		return newTable(model, datePattern, null);
 	}
-	
+
 	public static JTable newTable(TableModel model, String datePattern, final RowRenderer rowRenderer) {
 		JTable table;
 		if (rowRenderer == null) {
 			table = new JTable(model);
 		} else {
 			table = new JTable(model) {
-				
+
 				@Override
 				public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
 					Component c = super.prepareRenderer(renderer, row, column);
@@ -166,7 +166,7 @@
 			showException(null, x);
 		}
 	}
-	
+
 	public static abstract class RowRenderer {
 		public abstract void prepareRow(Component c, boolean isSelected, int row, int column);
 	}
diff --git a/src/main/java/com/gitblit/fanout/FanoutClient.java b/src/main/java/com/gitblit/fanout/FanoutClient.java
index b9ace4b..a676abc 100644
--- a/src/main/java/com/gitblit/fanout/FanoutClient.java
+++ b/src/main/java/com/gitblit/fanout/FanoutClient.java
@@ -39,7 +39,7 @@
 
 /**
  * Fanout client class.
- * 
+ *
  * @author James Moger
  *
  */
@@ -57,24 +57,26 @@
 	private volatile Selector selector;
 	private volatile SocketChannel socketCh;
 	private Thread clientThread;
-	
+
 	private final AtomicBoolean isConnected;
 	private final AtomicBoolean isRunning;
 	private final AtomicBoolean isAutomaticReconnect;
 	private final ByteBuffer writeBuffer;
 	private final ByteBuffer readBuffer;
 	private final CharsetDecoder decoder;
-	
+
 	private final Set<String> subscriptions;
 	private boolean resubscribe;
-	
+
 	public interface FanoutListener {
 		public void pong(Date timestamp);
 		public void announcement(String channel, String message);
 	}
-	
+
 	public static class FanoutAdapter implements FanoutListener {
+		@Override
 		public void pong(Date timestamp) { }
+		@Override
 		public void announcement(String channel, String message) { }
 	}
 
@@ -86,20 +88,20 @@
 			public void pong(Date timestamp) {
 				System.out.println("Pong. " + timestamp);
 			}
-			
+
 			@Override
 			public void announcement(String channel, String message) {
 				System.out.println(MessageFormat.format("Here ye, Here ye. {0} says {1}", channel, message));
 			}
 		});
 		client.start();
-		
+
 		Thread.sleep(5000);
 		client.ping();
 		client.subscribe("james");
-		client.announce("james", "12345");		
+		client.announce("james", "12345");
 		client.subscribe("c52f99d16eb5627877ae957df7ce1be102783bd5");
-		
+
 		while (true) {
 			Thread.sleep(10000);
 			client.ping();
@@ -126,11 +128,11 @@
 	public void removeListener(FanoutListener listener) {
 		listeners.remove(listener);
 	}
-	
+
 	public boolean isAutomaticReconnect() {
 		return isAutomaticReconnect.get();
 	}
-	
+
 	public void setAutomaticReconnect(boolean value) {
 		isAutomaticReconnect.set(value);
 	}
@@ -144,21 +146,21 @@
 		confirmConnection();
 		write("status");
 	}
-	
+
 	public void subscribe(String channel) {
 		confirmConnection();
 		if (subscriptions.add(channel)) {
 			write("subscribe " + channel);
 		}
 	}
-	
+
 	public void unsubscribe(String channel) {
 		confirmConnection();
 		if (subscriptions.remove(channel)) {
 			write("unsubscribe " + channel);
 		}
 	}
-	
+
 	public void announce(String channel, String message) {
 		confirmConnection();
 		write("announce " + channel + " " + message);
@@ -169,11 +171,11 @@
 			throw new RuntimeException("Fanout client is disconnected!");
 		}
 	}
-	
+
 	public boolean isConnected() {
 		return isRunning.get() && socketCh != null && isConnected.get();
 	}
-	
+
 	/**
 	 * Start client connection and return immediately.
 	 */
@@ -185,13 +187,13 @@
 		clientThread = new Thread(this, "Fanout client");
 		clientThread.start();
 	}
-	
+
 	/**
 	 * Start client connection and wait until it has connected.
 	 */
 	public void startSynchronously() {
 		start();
-		while (!isConnected()) {			
+		while (!isConnected()) {
 			try {
 				Thread.sleep(100);
 			} catch (Exception e) {
@@ -221,8 +223,8 @@
 	@Override
 	public void run() {
 		resetState();
-		
-		isRunning.set(true);		
+
+		isRunning.set(true);
 		while (isRunning.get()) {
 			// (re)connect
 			if (socketCh == null) {
@@ -231,7 +233,7 @@
 					socketCh = SocketChannel.open(new InetSocketAddress(addr, port));
 					socketCh.configureBlocking(false);
 					selector = Selector.open();
-					id = FanoutConstants.getLocalSocketId(socketCh.socket());									
+					id = FanoutConstants.getLocalSocketId(socketCh.socket());
 					socketCh.register(selector, SelectionKey.OP_READ);
 				} catch (Exception e) {
 					logger.error(MessageFormat.format("failed to open client connection to {0}:{1,number,0}", host, port), e);
@@ -242,7 +244,7 @@
 					continue;
 				}
 			}
-			
+
 			// read/write
 			try {
 				selector.select(clientTimeout);
@@ -251,7 +253,7 @@
 				while (i.hasNext()) {
 					SelectionKey key = i.next();
 					i.remove();
-					
+
 					if (key.isReadable()) {
 						// read message
 						String content = read();
@@ -266,7 +268,7 @@
 						// resubscribe
 						if (resubscribe) {
 							resubscribe = false;
-							logger.info(MessageFormat.format("fanout client {0} re-subscribing to {1} channels", id, subscriptions.size()));						
+							logger.info(MessageFormat.format("fanout client {0} re-subscribing to {1} channels", id, subscriptions.size()));
 							for (String subscription : subscriptions) {
 								write("subscribe " + subscription);
 							}
@@ -276,25 +278,25 @@
 				}
 			} catch (IOException e) {
 				logger.error(MessageFormat.format("fanout client {0} error: {1}", id, e.getMessage()));
-				closeChannel();				
+				closeChannel();
 				if (!isAutomaticReconnect.get()) {
 					isRunning.set(false);
 					continue;
 				}
 			}
 		}
-		
+
 		closeChannel();
 		resetState();
 	}
-	
+
 	protected void resetState() {
 		readBuffer.clear();
 		writeBuffer.clear();
 		isRunning.set(false);
 		isConnected.set(false);
 	}
-	
+
 	private void closeChannel() {
 		try {
 			if (socketCh != null) {
@@ -315,7 +317,7 @@
 				long time = Long.parseLong(fields[0]);
 				Date date = new Date(time);
 				firePong(date);
-			} catch (Exception e) {				
+			} catch (Exception e) {
 			}
 			return true;
 		} else if (fields.length == 2) {
@@ -366,7 +368,7 @@
 			}
 		}
 	}
-	
+
 	protected synchronized String read() throws IOException {
 		readBuffer.clear();
 		long len = socketCh.read(readBuffer);
@@ -382,7 +384,7 @@
 			return content;
 		}
 	}
-	
+
 	protected synchronized boolean write(String message) {
 		try {
 			logger.info(MessageFormat.format("fanout client {0} > {1}", id, message));
diff --git a/src/main/java/com/gitblit/fanout/FanoutConstants.java b/src/main/java/com/gitblit/fanout/FanoutConstants.java
index 6e6964c..84fd2c5 100644
--- a/src/main/java/com/gitblit/fanout/FanoutConstants.java
+++ b/src/main/java/com/gitblit/fanout/FanoutConstants.java
@@ -25,11 +25,11 @@
 	public final static String CH_DEBUG = "debug";
 	public final static String MSG_CONNECTED = "connected...";
 	public final static String MSG_BUSY = "busy";
-	
+
 	public static String getRemoteSocketId(Socket socket) {
 		return socket.getInetAddress().getHostAddress() + ":" + socket.getPort();
 	}
-	
+
 	public static String getLocalSocketId(Socket socket) {
 		return socket.getInetAddress().getHostAddress() + ":" + socket.getLocalPort();
 	}
diff --git a/src/main/java/com/gitblit/fanout/FanoutNioService.java b/src/main/java/com/gitblit/fanout/FanoutNioService.java
index 65d022a..e7aff34 100644
--- a/src/main/java/com/gitblit/fanout/FanoutNioService.java
+++ b/src/main/java/com/gitblit/fanout/FanoutNioService.java
@@ -44,7 +44,7 @@
  *
  * This implementation uses channels and selectors, which are the Java analog of
  * the Linux epoll mechanism used in the original fanout C code.
- * 
+ *
  * @author James Moger
  *
  */
@@ -54,7 +54,7 @@
 
 	private volatile ServerSocketChannel serviceCh;
 	private volatile Selector selector;
-	
+
 	public static void main(String[] args) throws Exception {
 		FanoutNioService pubsub = new FanoutNioService(null, DEFAULT_PORT);
 		pubsub.setStrictRequestTermination(false);
@@ -64,7 +64,7 @@
 
 	/**
 	 * Create a single-threaded fanout service.
-	 * 
+	 *
 	 * @param host
 	 * @param port
 	 *            the port for running the fanout PubSub service
@@ -73,10 +73,10 @@
 	public FanoutNioService(int port) {
 		this(null, port);
 	}
-	
+
 	/**
 	 * Create a single-threaded fanout service.
-	 * 
+	 *
 	 * @param bindInterface
 	 *            the ip address to bind for the service, may be null
 	 * @param port
@@ -86,7 +86,7 @@
 	public FanoutNioService(String bindInterface, int port) {
 		super(bindInterface, port, "Fanout nio service");
 	}
-	
+
 	@Override
 	protected boolean isConnected() {
 		return serviceCh != null;
@@ -102,10 +102,10 @@
 				serviceCh.socket().bind(host == null ? new InetSocketAddress(port) : new InetSocketAddress(host, port));
 				selector = Selector.open();
 				serviceCh.register(selector, SelectionKey.OP_ACCEPT);
-				logger.info(MessageFormat.format("{0} is ready on {1}:{2,number,0}", 
+				logger.info(MessageFormat.format("{0} is ready on {1}:{2,number,0}",
 						name, host == null ? "0.0.0.0" : host, port));
 			} catch (IOException e) {
-				logger.error(MessageFormat.format("failed to open {0} on {1}:{2,number,0}", 
+				logger.error(MessageFormat.format("failed to open {0} on {1}:{2,number,0}",
 						name, name, host == null ? "0.0.0.0" : host, port), e);
 				return false;
 			}
@@ -122,11 +122,11 @@
 				for (Map.Entry<String, SocketChannel> client : clients.entrySet()) {
 					closeClientSocket(client.getKey(), client.getValue());
 				}
-				
+
 				// close service socket channel
 				logger.debug(MessageFormat.format("closing {0} socket channel", name));
 				serviceCh.socket().close();
-				serviceCh.close();				
+				serviceCh.close();
 				serviceCh = null;
 				selector.close();
 				selector = null;
@@ -142,7 +142,7 @@
 			Set<SelectionKey> keys = selector.selectedKeys();
 			Iterator<SelectionKey> keyItr = keys.iterator();
 			while (keyItr.hasNext()) {
-				SelectionKey key = (SelectionKey) keyItr.next();
+				SelectionKey key = keyItr.next();
 				if (key.isAcceptable()) {
 					// new fanout client connection
 					ServerSocketChannel sch = (ServerSocketChannel) key.channel();
@@ -213,7 +213,7 @@
 			}
 		}
 	}
-	
+
 	protected void closeClientSocket(String id, SocketChannel ch) {
 		try {
 			ch.close();
@@ -221,10 +221,11 @@
 			logger.error(MessageFormat.format("fanout connection {0}", id), e);
 		}
 	}
-	
+
+	@Override
 	protected void broadcast(Collection<FanoutServiceConnection> connections, String channel, String message) {
 		super.broadcast(connections, channel, message);
-		
+
 		// register queued write
 		Map<String, SocketChannel> sockets = getCurrentClientSockets();
 		for (FanoutServiceConnection connection : connections) {
@@ -241,7 +242,7 @@
 			}
 		}
 	}
-	
+
 	protected Map<String, SocketChannel> getCurrentClientSockets() {
 		Map<String, SocketChannel> sockets = new HashMap<String, SocketChannel>();
 		for (SelectionKey key : selector.keys()) {
@@ -253,11 +254,11 @@
 		}
 		return sockets;
 	}
-	
+
 	/**
 	 * FanoutNioConnection handles reading/writing messages from a remote fanout
 	 * connection.
-	 * 
+	 *
 	 * @author James Moger
 	 *
 	 */
@@ -276,7 +277,7 @@
 			replyQueue = new ArrayList<String>();
 			decoder = Charset.forName(FanoutConstants.CHARSET).newDecoder();
 		}
-		
+
 		protected void read(SocketChannel ch, boolean strictRequestTermination) throws CharacterCodingException, IOException {
 			long bytesRead = 0;
 			readBuffer.clear();
@@ -293,7 +294,7 @@
 			String [] lines = req.split(strictRequestTermination ? "\n" : "\n|\r");
 			requestQueue.addAll(Arrays.asList(lines));
 		}
-		
+
 		protected void write(SocketChannel ch) throws IOException {
 			Iterator<String> itr = replyQueue.iterator();
 			while (itr.hasNext()) {
@@ -306,7 +307,7 @@
 					writeBuffer.put((byte) 0xa);
 				}
 				writeBuffer.flip();
-				
+
 				// loop until write buffer has been completely sent
 				int written = 0;
 				int toWrite = writeBuffer.remaining();
@@ -316,7 +317,7 @@
 						Thread.sleep(10);
 					} catch (Exception x) {
 					}
-				}				
+				}
 				itr.remove();
 			}
 			writeBuffer.clear();
diff --git a/src/main/java/com/gitblit/fanout/FanoutService.java b/src/main/java/com/gitblit/fanout/FanoutService.java
index cbfd8a2..e0e4d64 100644
--- a/src/main/java/com/gitblit/fanout/FanoutService.java
+++ b/src/main/java/com/gitblit/fanout/FanoutService.java
@@ -37,29 +37,29 @@
 
 /**
  * Base class for Fanout service implementations.
- * 
+ *
  * Subclass implementations can be used as a Sparkleshare PubSub notification
  * server.  This allows Sparkleshare to be used in conjunction with Gitblit
  * behind a corporate firewall that restricts or prohibits client internet access
  * to the default Sparkleshare PubSub server: notifications.sparkleshare.org
- * 
+ *
  * @author James Moger
  *
  */
 public abstract class FanoutService implements Runnable {
 
 	private final static Logger logger = LoggerFactory.getLogger(FanoutService.class);
-	
+
 	public final static int DEFAULT_PORT = 17000;
-	
+
 	protected final static int serviceTimeout = 5000;
 
 	protected final String host;
 	protected final int port;
-	protected final String name; 
-	
+	protected final String name;
+
 	private Thread serviceThread;
-	
+
 	private final Map<String, FanoutServiceConnection> connections;
 	private final Map<String, Set<FanoutServiceConnection>> subscriptions;
 
@@ -67,7 +67,7 @@
 	private final AtomicBoolean strictRequestTermination;
 	private final AtomicBoolean allowAllChannelAnnouncements;
 	private final AtomicInteger concurrentConnectionLimit;
-	
+
 	private final Date bootDate;
 	private final AtomicLong rejectedConnectionCount;
 	private final AtomicInteger peakConnectionCount;
@@ -82,16 +82,16 @@
 		this.host = host;
 		this.port = port;
 		this.name = name;
-		
+
 		connections = new ConcurrentHashMap<String, FanoutServiceConnection>();
 		subscriptions = new ConcurrentHashMap<String, Set<FanoutServiceConnection>>();
 		subscriptions.put(FanoutConstants.CH_ALL, new ConcurrentSkipListSet<FanoutServiceConnection>());
-		
+
 		isRunning = new AtomicBoolean(false);
 		strictRequestTermination = new AtomicBoolean(false);
 		allowAllChannelAnnouncements = new AtomicBoolean(false);
 		concurrentConnectionLimit = new AtomicInteger(0);
-		
+
 		bootDate = new Date();
 		rejectedConnectionCount = new AtomicLong(0);
 		peakConnectionCount = new AtomicInteger(0);
@@ -106,18 +106,18 @@
 	/*
 	 * Abstract methods
 	 */
-	
+
 	protected abstract boolean isConnected();
-	
+
 	protected abstract boolean connect();
-	
+
 	protected abstract void listen() throws IOException;
-	
+
 	protected abstract void disconnect();
-	
+
 	/**
 	 * Returns true if the service requires \n request termination.
-	 * 
+	 *
 	 * @return true if request requires \n termination
 	 */
 	public boolean isStrictRequestTermination() {
@@ -128,62 +128,62 @@
 	 * Control the termination of fanout requests. If true, fanout requests must
 	 * be terminated with \n. If false, fanout requests may be terminated with
 	 * \n, \r, \r\n, or \n\r. This is useful for debugging with a telnet client.
-	 * 
+	 *
 	 * @param isStrictTermination
 	 */
 	public void setStrictRequestTermination(boolean isStrictTermination) {
 		strictRequestTermination.set(isStrictTermination);
 	}
-	
+
 	/**
 	 * Returns the maximum allowable concurrent fanout connections.
-	 *  
+	 *
 	 * @return the maximum allowable concurrent connection count
 	 */
 	public int getConcurrentConnectionLimit() {
 		return concurrentConnectionLimit.get();
 	}
-	
+
 	/**
 	 * Sets the maximum allowable concurrent fanout connection count.
-	 * 
+	 *
 	 * @param value
 	 */
 	public void setConcurrentConnectionLimit(int value) {
 		concurrentConnectionLimit.set(value);
 	}
-	
+
 	/**
 	 * Returns true if connections are allowed to announce on the all channel.
-	 *  
+	 *
 	 * @return true if connections are allowed to announce on the all channel
 	 */
 	public boolean allowAllChannelAnnouncements() {
 		return allowAllChannelAnnouncements.get();
 	}
-	
+
 	/**
 	 * Allows/prohibits connections from announcing on the ALL channel.
-	 * 
+	 *
 	 * @param value
 	 */
 	public void setAllowAllChannelAnnouncements(boolean value) {
 		allowAllChannelAnnouncements.set(value);
 	}
-	
+
 	/**
 	 * Returns the current connections
-	 * 
+	 *
 	 * @param channel
 	 * @return map of current connections keyed by their id
 	 */
 	public Map<String, FanoutServiceConnection> getCurrentConnections() {
 		return connections;
 	}
-	
+
 	/**
 	 * Returns all subscriptions
-	 * 
+	 *
 	 * @return map of current subscriptions keyed by channel name
 	 */
 	public Map<String, Set<FanoutServiceConnection>> getCurrentSubscriptions() {
@@ -192,7 +192,7 @@
 
 	/**
 	 * Returns the subscriptions for the specified channel
-	 * 
+	 *
 	 * @param channel
 	 * @return set of subscribed connections for the specified channel
 	 */
@@ -202,17 +202,17 @@
 
 	/**
 	 * Returns the runtime statistics object for this service.
-	 * 
+	 *
 	 * @return stats
 	 */
 	public FanoutStats getStatistics() {
 		FanoutStats stats = new FanoutStats();
-		
+
 		// settings
 		stats.allowAllChannelAnnouncements = allowAllChannelAnnouncements();
 		stats.concurrentConnectionLimit = getConcurrentConnectionLimit();
 		stats.strictRequestTermination = isStrictRequestTermination();
-		
+
 		// runtime stats
 		stats.bootDate = bootDate;
 		stats.rejectedConnectionCount = rejectedConnectionCount.get();
@@ -222,16 +222,16 @@
 		stats.totalMessages = totalMessages.get();
 		stats.totalSubscribes = totalSubscribes.get();
 		stats.totalUnsubscribes = totalUnsubscribes.get();
-		stats.totalPings = totalPings.get();		
+		stats.totalPings = totalPings.get();
 		stats.currentConnections = connections.size();
 		stats.currentChannels = subscriptions.size();
 		stats.currentSubscriptions = subscriptions.size() * connections.size();
 		return stats;
 	}
-	
+
 	/**
 	 * Returns true if the service is ready.
-	 * 
+	 *
 	 * @return true, if the service is ready
 	 */
 	public boolean isReady() {
@@ -243,7 +243,7 @@
 
 	/**
 	 * Start the Fanout service thread and immediatel return.
-	 * 
+	 *
 	 */
 	public void start() {
 		if (isRunning.get()) {
@@ -254,10 +254,10 @@
 		serviceThread.setName(MessageFormat.format("{0} {1}:{2,number,0}", name, host == null ? "all" : host, port));
 		serviceThread.start();
 	}
-	
+
 	/**
 	 * Start the Fanout service thread and wait until it is accepting connections.
-	 * 
+	 *
 	 */
 	public void startSynchronously() {
 		start();
@@ -268,7 +268,7 @@
 			}
 		}
 	}
-		
+
 	/**
 	 * Stop the Fanout service.  This method returns when the service has been
 	 * completely shutdown.
@@ -290,7 +290,7 @@
 		}
 		logger.info(MessageFormat.format("stopped {0}", name));
 	}
-	
+
 	/**
 	 * Main execution method of the service
 	 */
@@ -314,10 +314,10 @@
 				}
 			}
 		}
-		disconnect();		
+		disconnect();
 		resetState();
 	}
-	
+
 	protected void resetState() {
 		// reset state data
 		connections.clear();
@@ -334,23 +334,23 @@
 
 	/**
 	 * Configure the client connection socket.
-	 * 
+	 *
 	 * @param socket
 	 * @throws SocketException
 	 */
 	protected void configureClientSocket(Socket socket) throws SocketException {
-		socket.setKeepAlive(true);				
+		socket.setKeepAlive(true);
 		socket.setSoLinger(true, 0); // immediately discard any remaining data
 	}
-	
+
 	/**
 	 * Add the connection to the connections map.
-	 * 
+	 *
 	 * @param connection
 	 * @return false if the connection was rejected due to too many concurrent
 	 *         connections
 	 */
-	protected boolean addConnection(FanoutServiceConnection connection) {		
+	protected boolean addConnection(FanoutServiceConnection connection) {
 		int limit = getConcurrentConnectionLimit();
 		if (limit > 0 && connections.size() > limit) {
 			logger.info(MessageFormat.format("hit {0,number,0} connection limit, rejecting fanout connection", concurrentConnectionLimit));
@@ -358,7 +358,7 @@
 			connection.busy();
 			return false;
 		}
-		
+
 		// add the connection to our map
 		connections.put(connection.id, connection);
 
@@ -371,10 +371,10 @@
 		connection.connected();
 		return true;
 	}
-	
+
 	/**
 	 * Remove the connection from the connections list and from subscriptions.
-	 * 
+	 *
 	 * @param connection
 	 */
 	protected void removeConnection(FanoutServiceConnection connection) {
@@ -393,46 +393,46 @@
 		}
 		logger.info(MessageFormat.format("fanout connection {0} removed", connection.id));
 	}
-	
+
 	/**
 	 * Tests to see if the connection is being monitored by the service.
-	 * 
+	 *
 	 * @param connection
 	 * @return true if the service is monitoring the connection
 	 */
 	protected boolean hasConnection(FanoutServiceConnection connection) {
 		return connections.containsKey(connection.id);
 	}
-	
+
 	/**
 	 * Reply to a connection on the specified channel.
-	 * 
+	 *
 	 * @param connection
 	 * @param channel
 	 * @param message
 	 * @return the reply
 	 */
-	protected String reply(FanoutServiceConnection connection, String channel, String message) {		
+	protected String reply(FanoutServiceConnection connection, String channel, String message) {
 		if (channel != null && channel.length() > 0) {
 			increment(totalMessages);
 		}
 		return connection.reply(channel, message);
 	}
-	
+
 	/**
 	 * Service method to broadcast a message to all connections.
-	 * 
+	 *
 	 * @param message
 	 */
 	public void broadcastAll(String message) {
 		broadcast(connections.values(), FanoutConstants.CH_ALL, message);
 		increment(totalAnnouncements);
 	}
-	
+
 	/**
 	 * Service method to broadcast a message to connections subscribed to the
 	 * channel.
-	 * 
+	 *
 	 * @param message
 	 */
 	public void broadcast(String channel, String message) {
@@ -440,10 +440,10 @@
 		broadcast(connections, channel, message);
 		increment(totalAnnouncements);
 	}
-	
+
 	/**
 	 * Broadcast a message to connections subscribed to the specified channel.
-	 * 
+	 *
 	 * @param connections
 	 * @param channel
 	 * @param message
@@ -453,10 +453,10 @@
 			reply(connection, channel, message);
 		}
 	}
-	
+
 	/**
 	 * Process an incoming Fanout request.
-	 * 
+	 *
 	 * @param connection
 	 * @param req
 	 * @return the reply to the request, may be null
@@ -476,10 +476,10 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Process the Fanout request.
-	 * 
+	 *
 	 * @param connection
 	 * @param action
 	 * @param channel
@@ -535,7 +535,7 @@
 		}
 		return null;
 	}
-	
+
 	private String asHexArray(String req) {
 		StringBuilder sb = new StringBuilder();
 		for (char c : req.toCharArray()) {
@@ -543,10 +543,10 @@
 		}
 		return "[ " + sb.toString().trim() + " ]";
 	}
-	
+
 	/**
 	 * Increment a long and prevent negative rollover.
-	 * 
+	 *
 	 * @param counter
 	 */
 	private void increment(AtomicLong counter) {
@@ -555,7 +555,7 @@
 			counter.set(0);
 		}
 	}
-	
+
 	@Override
 	public String toString() {
 		return name;
diff --git a/src/main/java/com/gitblit/fanout/FanoutServiceConnection.java b/src/main/java/com/gitblit/fanout/FanoutServiceConnection.java
index f7f2c95..2515ab1 100644
--- a/src/main/java/com/gitblit/fanout/FanoutServiceConnection.java
+++ b/src/main/java/com/gitblit/fanout/FanoutServiceConnection.java
@@ -24,14 +24,14 @@
 /**
  * FanoutServiceConnection handles reading/writing messages from a remote fanout
  * connection.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class FanoutServiceConnection implements Comparable<FanoutServiceConnection> {
-	
+
 	private static final Logger logger = LoggerFactory.getLogger(FanoutServiceConnection.class);
-	
+
 	public final String id;
 
 	protected FanoutServiceConnection(Socket socket) {
@@ -42,25 +42,25 @@
 
 	/**
 	 * Send the connection a debug channel connected message.
-	 * 
+	 *
 	 * @param message
 	 */
 	protected void connected() {
 		reply(FanoutConstants.CH_DEBUG, FanoutConstants.MSG_CONNECTED);
 	}
-	
+
 	/**
 	 * Send the connection a debug channel busy message.
-	 * 
+	 *
 	 * @param message
 	 */
 	protected void busy() {
 		reply(FanoutConstants.CH_DEBUG, FanoutConstants.MSG_BUSY);
 	}
-	
+
 	/**
 	 * Send the connection a message for the specified channel.
-	 * 
+	 *
 	 * @param channel
 	 * @param message
 	 * @return the reply
diff --git a/src/main/java/com/gitblit/fanout/FanoutSocketService.java b/src/main/java/com/gitblit/fanout/FanoutSocketService.java
index 07c18f9..342b277 100644
--- a/src/main/java/com/gitblit/fanout/FanoutSocketService.java
+++ b/src/main/java/com/gitblit/fanout/FanoutSocketService.java
@@ -34,7 +34,7 @@
  * This implementation creates a master acceptor thread which accepts incoming
  * fanout connections and then spawns a daemon thread for each accepted connection.
  * If there are 100 concurrent fanout connections, there are 101 threads.
- *   
+ *
  * @author James Moger
  *
  */
@@ -50,10 +50,10 @@
 		pubsub.setAllowAllChannelAnnouncements(false);
 		pubsub.start();
 	}
-	
+
 	/**
 	 * Create a multi-threaded fanout service.
-	 * 
+	 *
 	 * @param port
 	 *            the port for running the fanout PubSub service
 	 * @throws IOException
@@ -64,7 +64,7 @@
 
 	/**
 	 * Create a multi-threaded fanout service.
-	 * 
+	 *
 	 * @param bindInterface
 	 *            the ip address to bind for the service, may be null
 	 * @param port
@@ -74,12 +74,12 @@
 	public FanoutSocketService(String bindInterface, int port) {
 		super(bindInterface, port, "Fanout socket service");
 	}
-	
+
 	@Override
 	protected boolean isConnected() {
 		return serviceSocket != null;
 	}
-		
+
 	@Override
 	protected boolean connect() {
 		if (serviceSocket == null) {
@@ -88,7 +88,7 @@
 				serviceSocket.setReuseAddress(true);
 				serviceSocket.setSoTimeout(serviceTimeout);
 				serviceSocket.bind(host == null ? new InetSocketAddress(port) : new InetSocketAddress(host, port));
-				logger.info(MessageFormat.format("{0} is ready on {1}:{2,number,0}", 
+				logger.info(MessageFormat.format("{0} is ready on {1}:{2,number,0}",
 						name, host == null ? "0.0.0.0" : host, serviceSocket.getLocalPort()));
 			} catch (IOException e) {
 				logger.error(MessageFormat.format("failed to open {0} on {1}:{2,number,0}",
@@ -140,17 +140,17 @@
 			// ignore accept timeout exceptions
 		}
 	}
-	
+
 	/**
 	 * FanoutSocketConnection handles reading/writing messages from a remote fanout
 	 * connection.
-	 * 
+	 *
 	 * @author James Moger
 	 *
 	 */
 	class FanoutSocketConnection extends FanoutServiceConnection implements Runnable {
 		Socket socket;
-		
+
 		FanoutSocketConnection(Socket socket) {
 			super(socket);
 			this.socket = socket;
@@ -205,7 +205,7 @@
 
 			logger.info(MessageFormat.format("thread for fanout connection {0} is finished", id));
 		}
-				
+
 		@Override
 		protected void reply(String content) throws IOException {
 			// synchronously send reply
@@ -218,7 +218,7 @@
 			}
 			os.flush();
 		}
-		
+
 		protected void closeConnection() {
 			// close the connection socket
 			try {
@@ -226,7 +226,7 @@
 			} catch (IOException e) {
 			}
 			socket = null;
-			
+
 			// remove this connection from the service
 			removeConnection(this);
 		}
diff --git a/src/main/java/com/gitblit/fanout/FanoutStats.java b/src/main/java/com/gitblit/fanout/FanoutStats.java
index b06884d..3545472 100644
--- a/src/main/java/com/gitblit/fanout/FanoutStats.java
+++ b/src/main/java/com/gitblit/fanout/FanoutStats.java
@@ -21,18 +21,18 @@
 
 /**
  * Encapsulates the runtime stats of a fanout service.
- * 
+ *
  * @author James Moger
  *
  */
 public class FanoutStats implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public long concurrentConnectionLimit;
 	public boolean allowAllChannelAnnouncements;
 	public boolean strictRequestTermination;
-	
+
 	public Date bootDate;
 	public long rejectedConnectionCount;
 	public int peakConnectionCount;
@@ -45,7 +45,7 @@
 	public long totalSubscribes;
 	public long totalUnsubscribes;
 	public long totalPings;
-	
+
 	public String info() {
 		int i = 0;
 		StringBuilder sb = new StringBuilder();
@@ -67,14 +67,14 @@
 		sb.append(infoInt(i++, "total pings"));
 		String template = sb.toString();
 
-		String info = MessageFormat.format(template, 
+		String info = MessageFormat.format(template,
 				bootDate.toString(),
 				Boolean.toString(strictRequestTermination),
 				Boolean.toString(allowAllChannelAnnouncements),
 				concurrentConnectionLimit,
 				rejectedConnectionCount,
 				peakConnectionCount,
-				currentConnections, 
+				currentConnections,
 				currentChannels,
 				currentSubscriptions,
 				currentSubscriptions == 0 ? 0 : (currentSubscriptions - currentConnections),
@@ -86,11 +86,11 @@
 						totalPings);
 		return info;
 	}
-	
+
 	private String infoStr(int index, String label) {
 		return label + ": {" + index + "}\n";
 	}
-	
+
 	private String infoInt(int index, String label) {
 		return label + ": {" + index + ",number,0}\n";
 	}
diff --git a/src/main/java/com/gitblit/git/GitDaemon.java b/src/main/java/com/gitblit/git/GitDaemon.java
index b760fbc..bb578ef 100644
--- a/src/main/java/com/gitblit/git/GitDaemon.java
+++ b/src/main/java/com/gitblit/git/GitDaemon.java
@@ -73,9 +73,9 @@
 /**
  * Gitblit's Git Daemon ignores any and all per-repository daemon settings and
  * integrates into Gitblit's security model.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitDaemon {
 
@@ -113,7 +113,7 @@
 
 	/**
 	 * Construct the Gitblit Git daemon.
-	 * 
+	 *
 	 * @param bindInterface
 	 *            the ip address of the interface to bind
 	 * @param port
@@ -128,10 +128,10 @@
 		// set the repository resolver and pack factories
 		repositoryResolver = new RepositoryResolver<GitDaemonClient>(folder);
 	}
-	
+
 	/**
 	 * Configure a new daemon for the specified network address.
-	 * 
+	 *
 	 * @param addr
 	 *            address to listen for connections on. If null, any available
 	 *            port will be chosen on all network interfaces.
@@ -177,11 +177,11 @@
 					}
 				} };
 	}
-	
+
 	public int getPort() {
 		return myAddress.getPort();
 	}
-	
+
 	public String formatUrl(String servername, String repository) {
 		if (getPort() == 9418) {
 			// standard port
@@ -199,7 +199,7 @@
 
 	/**
 	 * Set the timeout before willing to abort an IO call.
-	 * 
+	 *
 	 * @param seconds
 	 *            number of seconds to wait (with no data transfer occurring)
 	 *            before aborting an IO read or write operation with the
@@ -211,7 +211,7 @@
 
 	/**
 	 * Start this daemon on a background thread.
-	 * 
+	 *
 	 * @throws IOException
 	 *             the server socket could not be opened.
 	 * @throws IllegalStateException
@@ -228,6 +228,7 @@
 		run.set(true);
 		acceptSocket = listenSock;
 		acceptThread = new Thread(processors, "Git-Daemon-Accept") {
+			@Override
 			public void run() {
 				while (isRunning()) {
 					try {
@@ -250,7 +251,7 @@
 			}
 		};
 		acceptThread.start();
-		
+
 		logger.info(MessageFormat.format("Git Daemon is listening on {0}:{1,number,0}", myAddress.getAddress().getHostAddress(), myAddress.getPort()));
 	}
 
@@ -290,6 +291,7 @@
 			dc.setRemoteAddress(((InetSocketAddress) peer).getAddress());
 
 		new Thread(processors, "Git-Daemon-Client " + peer.toString()) {
+			@Override
 			public void run() {
 				try {
 					dc.execute(s);
diff --git a/src/main/java/com/gitblit/git/GitDaemonClient.java b/src/main/java/com/gitblit/git/GitDaemonClient.java
index e7455e0..8d8cac6 100644
--- a/src/main/java/com/gitblit/git/GitDaemonClient.java
+++ b/src/main/java/com/gitblit/git/GitDaemonClient.java
@@ -65,7 +65,7 @@
 	private InputStream rawIn;
 
 	private OutputStream rawOut;
-	
+
 	private String repositoryName;
 
 	GitDaemonClient(final GitDaemon d) {
@@ -95,11 +95,11 @@
 	public OutputStream getOutputStream() {
 		return rawOut;
 	}
-	
+
 	public void setRepositoryName(String repositoryName) {
 		this.repositoryName = repositoryName;
 	}
-	
+
 	/** @return the name of the requested repository. */
 	public String getRepositoryName() {
 		return repositoryName;
diff --git a/src/main/java/com/gitblit/git/GitDaemonService.java b/src/main/java/com/gitblit/git/GitDaemonService.java
index 03c4e1c..8dee7d0 100644
--- a/src/main/java/com/gitblit/git/GitDaemonService.java
+++ b/src/main/java/com/gitblit/git/GitDaemonService.java
@@ -68,6 +68,7 @@
 	GitDaemonService(final String cmdName, final String cfgName) {
 		command = cmdName.startsWith("git-") ? cmdName : "git-" + cmdName; //$NON-NLS-1$ //$NON-NLS-2$
 		configKey = new SectionParser<ServiceConfig>() {
+			@Override
 			public ServiceConfig parse(final Config cfg) {
 				return new ServiceConfig(GitDaemonService.this, cfg, cfgName);
 			}
diff --git a/src/main/java/com/gitblit/git/GitServlet.java b/src/main/java/com/gitblit/git/GitServlet.java
index 5a40106..310d4da 100644
--- a/src/main/java/com/gitblit/git/GitServlet.java
+++ b/src/main/java/com/gitblit/git/GitServlet.java
@@ -24,9 +24,9 @@
 /**
  * The GitServlet provides http/https access to Git repositories.
  * Access to this servlet is protected by the GitFilter.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitServlet extends org.eclipse.jgit.http.server.GitServlet {
 
diff --git a/src/main/java/com/gitblit/git/GitblitReceivePack.java b/src/main/java/com/gitblit/git/GitblitReceivePack.java
index 2d648bd..090e541 100644
--- a/src/main/java/com/gitblit/git/GitblitReceivePack.java
+++ b/src/main/java/com/gitblit/git/GitblitReceivePack.java
@@ -106,7 +106,7 @@
 		setAllowCreates(user.canCreateRef(repository));
 		setAllowDeletes(user.canDeleteRef(repository));
 		setAllowNonFastForwards(user.canRewindRef(repository));
-		
+
 		// setup pre and post receive hook
 		setPreReceiveHook(this);
 		setPostReceiveHook(this);
diff --git a/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java b/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java
index 6c06fa3..01dfc08 100644
--- a/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java
+++ b/src/main/java/com/gitblit/git/GitblitUploadPackFactory.java
@@ -36,9 +36,9 @@
 /**
  * The upload pack factory creates an upload pack which controls what refs are
  * advertised to cloning/pulling clients.
- * 
+ *
  * @author James Moger
- * 
+ *
  * @param <X> the connection type
  */
 public class GitblitUploadPackFactory<X> implements UploadPackFactory<X> {
@@ -51,7 +51,7 @@
 		int timeout = 0;
 
 		if (req instanceof HttpServletRequest) {
-			// http/https request may or may not be authenticated 
+			// http/https request may or may not be authenticated
 			user = GitBlit.self().authenticate((HttpServletRequest) req);
 			if (user == null) {
 				user = UserModel.ANONYMOUS;
@@ -67,7 +67,7 @@
 		UploadPack up = new UploadPack(db);
 		up.setRefFilter(refFilter);
 		up.setTimeout(timeout);
-		
+
 		return up;
 	}
 
@@ -76,13 +76,13 @@
 	 * requesting user.
 	 */
 	public static class UserRefFilter implements RefFilter {
-		
+
 		final UserModel user;
-		
+
 		public UserRefFilter(UserModel user) {
 			this.user = user;
 		}
-		
+
 		@Override
 		public Map<String, Ref> filter(Map<String, Ref> refs) {
 			if (user.canAdmin()) {
diff --git a/src/main/java/com/gitblit/git/RepositoryResolver.java b/src/main/java/com/gitblit/git/RepositoryResolver.java
index 21a8376..e44b153 100644
--- a/src/main/java/com/gitblit/git/RepositoryResolver.java
+++ b/src/main/java/com/gitblit/git/RepositoryResolver.java
@@ -34,14 +34,14 @@
 
 /**
  * Resolves repositories and grants export access.
- * 
+ *
  * @author James Moger
  *
  */
 public class RepositoryResolver<X> extends FileResolver<X> {
 
 	private final Logger logger = LoggerFactory.getLogger(RepositoryResolver.class);
-	
+
 	public RepositoryResolver(File repositoriesFolder) {
 		super(repositoriesFolder, true);
 	}
@@ -53,7 +53,7 @@
 	public Repository open(final X req, final String name)
 			throws RepositoryNotFoundException, ServiceNotEnabledException {
 		Repository repo = super.open(req, name);
-		
+
 		// Set repository name for the pack factories
 		// We do this because the JGit API does not have a consistent way to
 		// retrieve the repository name from the pack factories or the hooks.
@@ -68,7 +68,7 @@
 		}
 		return repo;
 	}
-	
+
 	/**
 	 * Check if this repository can be served by the requested client connection.
 	 */
@@ -79,7 +79,7 @@
 		String scheme = null;
 		UserModel user = null;
 		String origin = null;
-		
+
 		if (req instanceof GitDaemonClient) {
 			// git daemon request
 			// this is an anonymous/unauthenticated protocol
@@ -90,7 +90,7 @@
 		} else if (req instanceof HttpServletRequest) {
 			// http/https request
 			HttpServletRequest httpRequest = (HttpServletRequest) req;
-			scheme = httpRequest.getScheme(); 
+			scheme = httpRequest.getScheme();
 			origin = httpRequest.getRemoteAddr();
 			user = GitBlit.self().authenticate(httpRequest);
 			if (user == null) {
@@ -104,7 +104,7 @@
 					scheme, repositoryName, user.username, origin));
 			return true;
 		}
-		
+
 		// user can not access this git repo
 		logger.warn(MessageFormat.format("{0}:// access of {1} by {2} from {3} DENIED",
 				scheme, repositoryName, user.username, origin));
diff --git a/src/main/java/com/gitblit/models/Activity.java b/src/main/java/com/gitblit/models/Activity.java
index 8af86d6..ff0920c 100644
--- a/src/main/java/com/gitblit/models/Activity.java
+++ b/src/main/java/com/gitblit/models/Activity.java
@@ -35,7 +35,7 @@
 /**
  * Model class to represent the commit activity across many repositories. This
  * class is used by the Activity page.
- * 
+ *
  * @author James Moger
  */
 public class Activity implements Serializable, Comparable<Activity> {
@@ -45,7 +45,7 @@
 	public final Date startDate;
 
 	public final Date endDate;
-	
+
 	private final Set<RepositoryCommit> commits;
 
 	private final Map<String, Metric> authorMetrics;
@@ -56,7 +56,7 @@
 
 	/**
 	 * Constructor for one day of activity.
-	 * 
+	 *
 	 * @param date
 	 */
 	public Activity(Date date) {
@@ -65,7 +65,7 @@
 
 	/**
 	 * Constructor for specified duration of activity from start date.
-	 * 
+	 *
 	 * @param date
 	 *            the start date of the activity
 	 * @param duration
@@ -79,10 +79,10 @@
 		repositoryMetrics = new HashMap<String, Metric>();
 		authorExclusions = new TreeSet<String>();
 	}
-	
+
 	/**
 	 * Exclude the specified authors from the metrics.
-	 * 
+	 *
 	 * @param authors
 	 */
 	public void excludeAuthors(Collection<String> authors) {
@@ -94,7 +94,7 @@
 	/**
 	 * Adds a commit to the activity object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param repository
 	 * @param branch
 	 * @param commit
@@ -109,7 +109,7 @@
 	/**
 	 * Adds a commit to the activity object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param repository
 	 * @param branch
 	 * @param commit
@@ -140,7 +140,7 @@
 	public int getCommitCount() {
 		return commits.size();
 	}
-	
+
 	public List<RepositoryCommit> getCommits() {
 		List<RepositoryCommit> list = new ArrayList<RepositoryCommit>(commits);
 		Collections.sort(list);
diff --git a/src/main/java/com/gitblit/models/AnnotatedLine.java b/src/main/java/com/gitblit/models/AnnotatedLine.java
index 439a322..a8b595e 100644
--- a/src/main/java/com/gitblit/models/AnnotatedLine.java
+++ b/src/main/java/com/gitblit/models/AnnotatedLine.java
@@ -24,9 +24,9 @@
 /**
  * AnnotatedLine is a serializable model class that represents a the most recent
  * author, date, and commit id of a line in a source file.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class AnnotatedLine implements Serializable {
 
diff --git a/src/main/java/com/gitblit/models/DailyLogEntry.java b/src/main/java/com/gitblit/models/DailyLogEntry.java
index 41f1381..a6bc6a4 100644
--- a/src/main/java/com/gitblit/models/DailyLogEntry.java
+++ b/src/main/java/com/gitblit/models/DailyLogEntry.java
@@ -25,7 +25,7 @@
  * Model class to simulate a push for presentation in the push log news feed
  * for a repository that does not have a Gitblit push log.  Commits are grouped
  * by date and may be additionally split by ref.
- * 
+ *
  * @author James Moger
  */
 public class DailyLogEntry extends RefLogEntry implements Serializable {
@@ -45,7 +45,7 @@
 		if (getAuthorCount() == 1) {
 			return getCommits().get(0).getCommitterIdent();
 		}
-		
+
 		return super.getCommitterIdent();
 	}
 
@@ -54,20 +54,21 @@
 		if (getAuthorCount() == 1) {
 			return getCommits().get(0).getAuthorIdent();
 		}
-		
+
 		return super.getAuthorIdent();
 	}
-	
+
 	/**
 	 * Tracks the change type for the specified ref.
-	 * 
+	 *
 	 * @param ref
 	 * @param type
 	 * @param oldId
 	 * @param newId
 	 */
+	@Override
 	public void updateRef(String ref, ReceiveCommand.Type type, String oldId, String newId) {
-		// daily digests are filled from most recent to oldest 
+		// daily digests are filled from most recent to oldest
 		String preservedNewId = getNewId(ref);
 		if (preservedNewId == null) {
 			// no preserved new id, this is newest commit
diff --git a/src/main/java/com/gitblit/models/FederationModel.java b/src/main/java/com/gitblit/models/FederationModel.java
index 1d211ce..2c07c50 100644
--- a/src/main/java/com/gitblit/models/FederationModel.java
+++ b/src/main/java/com/gitblit/models/FederationModel.java
@@ -30,7 +30,7 @@
  * Gitblit instance to pull the repositories and configuration from another
  * Gitblit instance. This is a backup operation and can be considered something
  * like svn-sync.
- * 
+ *
  */
 public class FederationModel implements Serializable, Comparable<FederationModel> {
 
@@ -45,7 +45,7 @@
 	public String frequency;
 
 	public String folder;
-	
+
 	public boolean bare;
 
     public boolean mirror;
@@ -68,7 +68,7 @@
 
 	/**
 	 * The constructor for a remote server configuration.
-	 * 
+	 *
 	 * @param serverName
 	 */
 	public FederationModel(String serverName) {
@@ -109,7 +109,7 @@
 	/**
 	 * Updates the pull status of a particular repository in this federation
 	 * registration.
-	 * 
+	 *
 	 * @param repository
 	 * @param status
 	 */
@@ -133,7 +133,7 @@
 	/**
 	 * Iterates over the current pull results and returns the lowest pull
 	 * status.
-	 * 
+	 *
 	 * @return the lowest pull status of the registration
 	 */
 	public FederationPullStatus getLowestStatus() {
@@ -152,7 +152,7 @@
 	/**
 	 * Returns true if this registration represents the result data sent by a
 	 * pulling Gitblit instance.
-	 * 
+	 *
 	 * @return true, if this is result data
 	 */
 	public boolean isResultData() {
@@ -181,7 +181,7 @@
 
 	/**
 	 * Class that encapsulates a point-in-time pull result.
-	 * 
+	 *
 	 */
 	public static class RepositoryStatus implements Serializable, Comparable<RepositoryStatus> {
 
diff --git a/src/main/java/com/gitblit/models/FederationProposal.java b/src/main/java/com/gitblit/models/FederationProposal.java
index 5cf9182..de1b8e6 100644
--- a/src/main/java/com/gitblit/models/FederationProposal.java
+++ b/src/main/java/com/gitblit/models/FederationProposal.java
@@ -37,14 +37,14 @@
 	public FederationToken tokenType;
 
 	public String token;
-	
+
 	public String message;
 
 	public Map<String, RepositoryModel> repositories;
 
 	/**
 	 * The constructor for a federation proposal.
-	 * 
+	 *
 	 * @param url
 	 *            the url of the source Gitblit instance
 	 * @param tokenType
diff --git a/src/main/java/com/gitblit/models/FederationSet.java b/src/main/java/com/gitblit/models/FederationSet.java
index 357689c..dede66b 100644
--- a/src/main/java/com/gitblit/models/FederationSet.java
+++ b/src/main/java/com/gitblit/models/FederationSet.java
@@ -37,7 +37,7 @@
 
 	/**
 	 * The constructor for a federation set.
-	 * 
+	 *
 	 * @param name
 	 *            the name of this federation set
 	 * @param tokenType
diff --git a/src/main/java/com/gitblit/models/FeedEntryModel.java b/src/main/java/com/gitblit/models/FeedEntryModel.java
index e1c00c3..c94f6e9 100644
--- a/src/main/java/com/gitblit/models/FeedEntryModel.java
+++ b/src/main/java/com/gitblit/models/FeedEntryModel.java
@@ -21,7 +21,7 @@
 
 /**
  * FeedEntryModel represents an entry in a syndication (RSS) feed.
- * 
+ *
  * @author James Moger
  */
 public class FeedEntryModel implements Serializable, Comparable<FeedEntryModel> {
diff --git a/src/main/java/com/gitblit/models/FeedModel.java b/src/main/java/com/gitblit/models/FeedModel.java
index 08f9e48..5fc6c1f 100644
--- a/src/main/java/com/gitblit/models/FeedModel.java
+++ b/src/main/java/com/gitblit/models/FeedModel.java
@@ -22,7 +22,7 @@
 
 /**
  * FeedModel represents a syndication (RSS) feed.
- * 
+ *
  * @author James Moger
  */
 public class FeedModel implements Serializable, Comparable<FeedModel> {
diff --git a/src/main/java/com/gitblit/models/ForkModel.java b/src/main/java/com/gitblit/models/ForkModel.java
index 849986c..5c9f037 100644
--- a/src/main/java/com/gitblit/models/ForkModel.java
+++ b/src/main/java/com/gitblit/models/ForkModel.java
@@ -24,44 +24,44 @@
 
 /**
  * A ForkModel represents a repository, its direct descendants, and its origin.
- * 
+ *
  * @author James Moger
  *
  */
 public class ForkModel implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public final RepositoryModel repository;
-	
+
 	public final List<ForkModel> forks;
-	
+
 	public ForkModel(RepositoryModel repository) {
 		this.repository = repository;
 		this.forks = new ArrayList<ForkModel>();
 	}
-	
+
 	public boolean isRoot() {
 		return StringUtils.isEmpty(repository.originRepository);
 	}
-	
+
 	public boolean isNode() {
 		return !ArrayUtils.isEmpty(forks);
 	}
-	
+
 	public boolean isLeaf() {
 		return ArrayUtils.isEmpty(forks);
 	}
-	
+
 	public boolean isPersonalRepository() {
 		return repository.isPersonalRepository();
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return repository.hashCode();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof ForkModel) {
@@ -69,7 +69,7 @@
 		}
 		return false;
 	}
-	
+
 	@Override
 	public String toString() {
 		return repository.toString();
diff --git a/src/main/java/com/gitblit/models/GitClientApplication.java b/src/main/java/com/gitblit/models/GitClientApplication.java
index eb47eb1..e5b2e6c 100644
--- a/src/main/java/com/gitblit/models/GitClientApplication.java
+++ b/src/main/java/com/gitblit/models/GitClientApplication.java
@@ -23,7 +23,7 @@
 
 /**
  * Model class to represent a git client application.
- * 
+ *
  * @author James Moger
  *
  */
@@ -60,18 +60,18 @@
 		}
 		return false;
 	}
-	
+
 	public boolean supportsTransport(String transportOrUrl) {
 		if (ArrayUtils.isEmpty(transports)) {
 			return true;
 		}
-		
+
 		String scheme = transportOrUrl;
 		if (transportOrUrl.indexOf(':') > -1) {
 			// strip scheme
 			scheme = transportOrUrl.substring(0, transportOrUrl.indexOf(':'));
 		}
-		
+
 		for (String transport : transports) {
 			if (transport.equalsIgnoreCase(scheme)) {
 				return true;
@@ -79,7 +79,7 @@
 		}
 		return false;
 	}
-	
+
 	@Override
 	public String toString() {
 		return StringUtils.isEmpty(title) ? name : title;
diff --git a/src/main/java/com/gitblit/models/GitNote.java b/src/main/java/com/gitblit/models/GitNote.java
index c333a88..90b9a81 100644
--- a/src/main/java/com/gitblit/models/GitNote.java
+++ b/src/main/java/com/gitblit/models/GitNote.java
@@ -21,9 +21,9 @@
  * GitNote is a serializable model class that represents a git note. This class
  * retains an instance of the RefModel which contains the commit in which this
  * git note was created.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitNote implements Serializable {
 
diff --git a/src/main/java/com/gitblit/models/GravatarProfile.java b/src/main/java/com/gitblit/models/GravatarProfile.java
index aa128ce..ec1aeea 100644
--- a/src/main/java/com/gitblit/models/GravatarProfile.java
+++ b/src/main/java/com/gitblit/models/GravatarProfile.java
@@ -20,9 +20,9 @@
 
 /**
  * Represents a Gravatar profile.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GravatarProfile implements Serializable {
 
@@ -35,7 +35,7 @@
 	public String preferredUsername;
 	public String currentLocation;
 	public String aboutMe;
-	
+
 	public String profileUrl;
 	public String thumbnailUrl;
 	public List<ProfileObject> photos;
diff --git a/src/main/java/com/gitblit/models/Metric.java b/src/main/java/com/gitblit/models/Metric.java
index 2845c52..2310a9a 100644
--- a/src/main/java/com/gitblit/models/Metric.java
+++ b/src/main/java/com/gitblit/models/Metric.java
@@ -20,9 +20,9 @@
 /**
  * Metric is a serializable model class that encapsulates metrics for some given
  * type.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class Metric implements Serializable, Comparable<Metric> {
 
diff --git a/src/main/java/com/gitblit/models/PathModel.java b/src/main/java/com/gitblit/models/PathModel.java
index 9093a44..bf58542 100644
--- a/src/main/java/com/gitblit/models/PathModel.java
+++ b/src/main/java/com/gitblit/models/PathModel.java
@@ -24,9 +24,9 @@
 /**
  * PathModel is a serializable model class that represents a file or a folder,
  * including all its metadata and associated commit id.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PathModel implements Serializable, Comparable<PathModel> {
 
@@ -56,7 +56,7 @@
 	public boolean isSubmodule() {
 		return FileMode.GITLINK.equals(mode);
 	}
-	
+
 	public boolean isTree() {
 		return FileMode.TREE.equals(mode);
 	}
@@ -105,26 +105,26 @@
 	/**
 	 * PathChangeModel is a serializable class that represents a file changed in
 	 * a commit.
-	 * 
+	 *
 	 * @author James Moger
-	 * 
+	 *
 	 */
 	public static class PathChangeModel extends PathModel {
 
 		private static final long serialVersionUID = 1L;
 
 		public ChangeType changeType;
-		
+
 		public int insertions;
-		
+
 		public int deletions;
-		
+
 		public PathChangeModel(String name, String path, long size, int mode, String objectId,
 				String commitId, ChangeType type) {
 			super(name, path, size, mode, objectId, commitId);
 			this.changeType = type;
 		}
-		
+
 		public void update(char op) {
 			switch (op) {
 			case '+':
diff --git a/src/main/java/com/gitblit/models/ProjectModel.java b/src/main/java/com/gitblit/models/ProjectModel.java
index cd912ae..3a082de 100644
--- a/src/main/java/com/gitblit/models/ProjectModel.java
+++ b/src/main/java/com/gitblit/models/ProjectModel.java
@@ -26,9 +26,9 @@
 
 /**
  * ProjectModel is a serializable model class.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ProjectModel implements Serializable, Comparable<ProjectModel> {
 
@@ -39,7 +39,7 @@
 	public String title;
 	public String description;
 	public final Set<String> repositories = new HashSet<String>();
-	
+
 	public String projectMarkdown;
 	public String repositoriesMarkdown;
 	public Date lastChange;
@@ -48,7 +48,7 @@
 	public ProjectModel(String name) {
 		this(name, false);
 	}
-	
+
 	public ProjectModel(String name, boolean isRoot) {
 		this.name = name;
 		this.isRoot = isRoot;
@@ -56,7 +56,7 @@
 		this.title = "";
 		this.description = "";
 	}
-	
+
 	public boolean isUserProject() {
 		return ModelUtils.isPersonalRepository(name);
 	}
@@ -80,16 +80,16 @@
 		for (String name:names) {
 			repositories.add(name.toLowerCase());
 		}
-	}	
+	}
 
 	public void removeRepository(String name) {
 		repositories.remove(name.toLowerCase());
 	}
-	
+
 	public String getDisplayName() {
 		return StringUtils.isEmpty(title) ? name : title;
 	}
-	
+
 	@Override
 	public String toString() {
 		return name;
diff --git a/src/main/java/com/gitblit/models/RefLogEntry.java b/src/main/java/com/gitblit/models/RefLogEntry.java
index abfc56b..07dc6f3 100644
--- a/src/main/java/com/gitblit/models/RefLogEntry.java
+++ b/src/main/java/com/gitblit/models/RefLogEntry.java
@@ -36,7 +36,7 @@
 
 /**
  * Model class to represent a push into a repository.
- * 
+ *
  * @author James Moger
  */
 public class RefLogEntry implements Serializable, Comparable<RefLogEntry> {
@@ -44,22 +44,22 @@
 	private static final long serialVersionUID = 1L;
 
 	public final String repository;
-	
+
 	public final Date date;
-	
+
 	public final UserModel user;
 
 	private final Set<RepositoryCommit> commits;
-	
+
 	protected final Map<String, ReceiveCommand.Type> refUpdates;
-	
+
 	protected final Map<String, String> refIdChanges;
-	
+
 	private int authorCount;
 
 	/**
 	 * Constructor for specified duration of push from start date.
-	 * 
+	 *
 	 * @param repository
 	 *            the repository that received the push
 	 * @param date
@@ -76,10 +76,10 @@
 		this.refIdChanges = new HashMap<String, String>();
 		this.authorCount = -1;
 	}
-	
+
 	/**
 	 * Tracks the change type for the specified ref.
-	 * 
+	 *
 	 * @param ref
 	 * @param type
 	 */
@@ -88,10 +88,10 @@
 			refUpdates.put(ref, type);
 		}
 	}
-	
+
 	/**
 	 * Tracks the change type for the specified ref.
-	 * 
+	 *
 	 * @param ref
 	 * @param type
 	 * @param oldId
@@ -103,10 +103,10 @@
 			refIdChanges.put(ref, oldId + "-" + newId);
 		}
 	}
-	
+
 	/**
 	 * Returns the old id of a ref.
-	 * 
+	 *
 	 * @param ref
 	 * @return the old id
 	 */
@@ -120,7 +120,7 @@
 
 	/**
 	 * Returns the new id of a ref
-	 * 
+	 *
 	 * @param ref
 	 * @return the new id
 	 */
@@ -131,10 +131,10 @@
 		}
 		return change.split("-")[1];
 	}
-	
+
 	/**
 	 * Returns the change type of the ref change.
-	 * 
+	 *
 	 * @param ref
 	 * @return the change type for the ref
 	 */
@@ -146,7 +146,7 @@
 	/**
 	 * Adds a commit to the push entry object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param branch
 	 * @param commit
 	 * @return a RepositoryCommit, if one was added. Null if this is duplicate
@@ -164,7 +164,7 @@
 	/**
 	 * Adds a commit to the push entry object as long as the commit is not a
 	 * duplicate.
-	 * 
+	 *
 	 * @param branch
 	 * @param commit
 	 * @return a RepositoryCommit, if one was added. Null if this is duplicate
@@ -181,17 +181,17 @@
 	/**
 	 * Adds a a list of repository commits.  This is used to construct discrete
 	 * ref push log entries
-	 * 
+	 *
 	 * @param commits
 	 */
 	public void addCommits(List<RepositoryCommit> list) {
 		commits.addAll(list);
 		authorCount = -1;
 	}
-	
+
 	/**
 	 * Returns true if this push contains a non-fastforward ref update.
-	 * 
+	 *
 	 * @return true if this is a non-fastforward push
 	 */
 	public boolean isNonFastForward() {
@@ -202,10 +202,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if this ref has been rewound.
-	 * 
+	 *
 	 * @param ref
 	 * @return true if this is a non-fastforward ref update
 	 */
@@ -219,7 +219,7 @@
 
 	/**
 	 * Returns true if this ref has been deleted.
-	 * 
+	 *
 	 * @param ref
 	 * @return true if this is a delete ref update
 	 */
@@ -230,28 +230,28 @@
 		}
 		return ReceiveCommand.Type.DELETE.equals(type);
 	}
-	
+
 	/**
 	 * Returns the list of refs changed by the push.
-	 * 
+	 *
 	 * @return a list of refs
 	 */
 	public List<String> getChangedRefs() {
 		return new ArrayList<String>(refUpdates.keySet());
 	}
-	
+
 	/**
 	 * Returns the list of branches changed by the push.
-	 * 
+	 *
 	 * @return a list of branches
 	 */
 	public List<String> getChangedBranches() {
 		return getChangedRefs(Constants.R_HEADS);
 	}
-	
+
 	/**
 	 * Returns the list of tags changed by the push.
-	 * 
+	 *
 	 * @return a list of tags
 	 */
 	public List<String> getChangedTags() {
@@ -260,7 +260,7 @@
 
 	/**
 	 * Gets the changed refs in the push.
-	 * 
+	 *
 	 * @param baseRef
 	 * @return the changed refs
 	 */
@@ -275,7 +275,7 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	public int getAuthorCount() {
 		if (authorCount == -1) {
 			Set<String> authors = new HashSet<String>();
@@ -287,19 +287,19 @@
 		}
 		return authorCount;
 	}
-	
+
 	/**
 	 * The total number of commits in the push.
-	 * 
+	 *
 	 * @return the number of commits in the push
 	 */
 	public int getCommitCount() {
 		return commits.size();
 	}
-	
+
 	/**
 	 * Returns all commits in the push.
-	 * 
+	 *
 	 * @return a list of commits
 	 */
 	public List<RepositoryCommit> getCommits() {
@@ -307,10 +307,10 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Returns all commits that belong to a particular ref
-	 * 
+	 *
 	 * @param ref
 	 * @return a list of commits
 	 */
@@ -324,7 +324,7 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	public PersonIdent getCommitterIdent() {
 		return new PersonIdent(user.getDisplayName(), user.emailAddress == null ? user.username : user.emailAddress);
 	}
@@ -341,7 +341,7 @@
 		// reverse chronological order
 		return o.date.compareTo(date);
 	}
-	
+
 	@Override
 	public String toString() {
 		StringBuilder sb = new StringBuilder();
diff --git a/src/main/java/com/gitblit/models/RefModel.java b/src/main/java/com/gitblit/models/RefModel.java
index 8489c81..6b031ed 100644
--- a/src/main/java/com/gitblit/models/RefModel.java
+++ b/src/main/java/com/gitblit/models/RefModel.java
@@ -28,9 +28,9 @@
 /**
  * RefModel is a serializable model class that represents a tag or branch and
  * includes the referenced object.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RefModel implements Serializable, Comparable<RefModel> {
 
diff --git a/src/main/java/com/gitblit/models/RegistrantAccessPermission.java b/src/main/java/com/gitblit/models/RegistrantAccessPermission.java
index 8f4049a..a7fcde4 100644
--- a/src/main/java/com/gitblit/models/RegistrantAccessPermission.java
+++ b/src/main/java/com/gitblit/models/RegistrantAccessPermission.java
@@ -24,7 +24,7 @@
 
 /**
  * Represents a Registrant-AccessPermission tuple.
- * 
+ *
  * @author James Moger
  */
 public class RegistrantAccessPermission implements Serializable, Comparable<RegistrantAccessPermission> {
@@ -37,7 +37,7 @@
 	public PermissionType permissionType;
 	public boolean mutable;
 	public String source;
-	
+
 	public RegistrantAccessPermission() {
 	}
 
@@ -46,7 +46,7 @@
 		this.permissionType = PermissionType.EXPLICIT;
 		this.mutable = true;
 	}
-	
+
 	public RegistrantAccessPermission(String registrant, AccessPermission permission, PermissionType permissionType, RegistrantType registrantType, String source, boolean mutable) {
 		this.registrant = registrant;
 		this.permission = permission;
@@ -55,7 +55,7 @@
 		this.source = source;
 		this.mutable = mutable;
 	}
-	
+
 	public boolean isAdmin() {
 		return PermissionType.ADMINISTRATOR.equals(permissionType);
 	}
@@ -63,7 +63,7 @@
 	public boolean isOwner() {
 		return PermissionType.OWNER.equals(permissionType);
 	}
-	
+
 	public boolean isExplicit() {
 		return PermissionType.EXPLICIT.equals(permissionType);
 	}
@@ -79,7 +79,7 @@
 	public boolean isMissing() {
 		return PermissionType.MISSING.equals(permissionType);
 	}
-	
+
 	public int getScore() {
 		switch (registrantType) {
 		case REPOSITORY:
@@ -102,7 +102,7 @@
 			return 0;
 		}
 	}
-	
+
 	@Override
 	public int compareTo(RegistrantAccessPermission p) {
 		switch (registrantType) {
@@ -113,7 +113,7 @@
 			int score2 = p.getScore();
 			if (score1 <= 2 && score2 <= 2) {
 				// group admin, owner, and explicit together
-				return StringUtils.compareRepositoryNames(registrant, p.registrant);	
+				return StringUtils.compareRepositoryNames(registrant, p.registrant);
 			}
 			if (score1 < score2) {
 				return -1;
@@ -126,22 +126,22 @@
 			return registrant.toLowerCase().compareTo(p.registrant.toLowerCase());
 		}
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return registrant.hashCode();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof RegistrantAccessPermission) {
 			RegistrantAccessPermission p = (RegistrantAccessPermission) o;
 			return registrant.equals(p.registrant);
 		}
-		
+
 		return false;
 	}
-	
+
 	@Override
 	public String toString() {
 		return permission.asRole(registrant);
diff --git a/src/main/java/com/gitblit/models/RepositoryCommit.java b/src/main/java/com/gitblit/models/RepositoryCommit.java
index dd58b42..765b489 100644
--- a/src/main/java/com/gitblit/models/RepositoryCommit.java
+++ b/src/main/java/com/gitblit/models/RepositoryCommit.java
@@ -27,7 +27,7 @@
 /**
  * Model class to represent a RevCommit, it's source repository, and the branch.
  * This class is used by the activity page.
- * 
+ *
  * @author James Moger
  */
 public class RepositoryCommit implements Serializable, Comparable<RepositoryCommit> {
@@ -71,7 +71,7 @@
 	public String getShortMessage() {
 		return commit.getShortMessage();
 	}
-	
+
 	public Date getCommitDate() {
 		return new Date(commit.getCommitTime() * 1000L);
 	}
@@ -79,7 +79,7 @@
 	public int getParentCount() {
 		return commit.getParentCount();
 	}
-	
+
 	public RevCommit [] getParents() {
 		return commit.getParents();
 	}
@@ -91,7 +91,7 @@
 	public PersonIdent getCommitterIdent() {
 		return commit.getCommitterIdent();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof RepositoryCommit) {
@@ -116,14 +116,14 @@
 		}
 		return 0;
 	}
-	
+
 	public RepositoryCommit clone(String withRef) {
 		return new RepositoryCommit(repository, withRef, commit);
 	}
-	
+
 	@Override
 	public String toString() {
-		return MessageFormat.format("{0} {1} {2,date,yyyy-MM-dd HH:mm} {3} {4}", 
+		return MessageFormat.format("{0} {1} {2,date,yyyy-MM-dd HH:mm} {3} {4}",
 				getShortName(), branch, getCommitterIdent().getWhen(), getAuthorIdent().getName(),
 				getShortMessage());
 	}
diff --git a/src/main/java/com/gitblit/models/RepositoryModel.java b/src/main/java/com/gitblit/models/RepositoryModel.java
index f0354b9..42331c4 100644
--- a/src/main/java/com/gitblit/models/RepositoryModel.java
+++ b/src/main/java/com/gitblit/models/RepositoryModel.java
@@ -35,9 +35,9 @@
 /**
  * RepositoryModel is a serializable model class that represents a Gitblit
  * repository including its configuration settings and access restriction.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RepositoryModel implements Serializable, Comparable<RepositoryModel> {
 
@@ -84,14 +84,14 @@
 	public boolean verifyCommitter;
 	public String gcThreshold;
 	public int gcPeriod;
-	public int maxActivityCommits;	
+	public int maxActivityCommits;
 	public List<String> metricAuthorExclusions;
 	public CommitMessageRenderer commitMessageRenderer;
-	
+
 	public transient boolean isCollectingGarbage;
 	public Date lastGC;
 	public String sparkleshareId;
-	
+
 	public RepositoryModel() {
 		this("", "", "", new Date(0));
 	}
@@ -103,14 +103,14 @@
 		this.accessRestriction = AccessRestrictionType.NONE;
 		this.authorizationControl = AuthorizationControl.NAMED;
 		this.federationSets = new ArrayList<String>();
-		this.federationStrategy = FederationStrategy.FEDERATE_THIS;	
+		this.federationStrategy = FederationStrategy.FEDERATE_THIS;
 		this.projectPath = StringUtils.getFirstPathElement(name);
 		this.owners = new ArrayList<String>();
 		this.isBare = true;
-		
+
 		addOwner(owner);
 	}
-	
+
 	public List<String> getLocalBranches() {
 		if (ArrayUtils.isEmpty(availableRefs)) {
 			return new ArrayList<String>();
@@ -123,30 +123,30 @@
 		}
 		return localBranches;
 	}
-	
+
 	public void addFork(String repository) {
 		if (forks == null) {
 			forks = new TreeSet<String>();
 		}
 		forks.add(repository);
 	}
-	
+
 	public void removeFork(String repository) {
 		if (forks == null) {
 			return;
 		}
 		forks.remove(repository);
 	}
-	
+
 	public void resetDisplayName() {
 		displayName = null;
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return name.hashCode();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof RepositoryModel) {
@@ -167,38 +167,38 @@
 	public int compareTo(RepositoryModel o) {
 		return StringUtils.compareRepositoryNames(name, o.name);
 	}
-	
+
 	public boolean isFork() {
 		return !StringUtils.isEmpty(originRepository);
 	}
-	
+
 	public boolean isOwner(String username) {
 		if (StringUtils.isEmpty(username) || ArrayUtils.isEmpty(owners)) {
 			return false;
 		}
 		return owners.contains(username.toLowerCase());
 	}
-	
+
 	public boolean isPersonalRepository() {
 		return !StringUtils.isEmpty(projectPath) && ModelUtils.isPersonalRepository(projectPath);
 	}
-	
+
 	public boolean isUsersPersonalRepository(String username) {
 		return !StringUtils.isEmpty(projectPath) && ModelUtils.isUsersPersonalRepository(username, projectPath);
 	}
-	
+
 	public boolean allowAnonymousView() {
 		return !accessRestriction.atLeast(AccessRestrictionType.VIEW);
 	}
-	
+
 	public boolean isShowActivity() {
 		return maxActivityCommits > -1;
 	}
-	
+
 	public boolean isSparkleshared() {
 		return !StringUtils.isEmpty(sparkleshareId);
 	}
-	
+
 	public RepositoryModel cloneAs(String cloneName) {
 		RepositoryModel clone = new RepositoryModel();
 		clone.originRepository = name;
@@ -216,7 +216,7 @@
 		clone.useTickets = useTickets;
 		clone.skipSizeCalculation = skipSizeCalculation;
 		clone.skipSummaryMetrics = skipSummaryMetrics;
-		clone.sparkleshareId = sparkleshareId; 
+		clone.sparkleshareId = sparkleshareId;
 		return clone;
 	}
 
diff --git a/src/main/java/com/gitblit/models/RepositoryUrl.java b/src/main/java/com/gitblit/models/RepositoryUrl.java
index d72959a..a24def5 100644
--- a/src/main/java/com/gitblit/models/RepositoryUrl.java
+++ b/src/main/java/com/gitblit/models/RepositoryUrl.java
@@ -22,7 +22,7 @@
 /**
  * Represents a git repository url and it's associated access permission for the
  * current user.
- *  
+ *
  * @author James Moger
  *
  */
@@ -37,7 +37,7 @@
 		this.url = url;
 		this.permission = permission;
 	}
-	
+
 	public boolean isExternal() {
 		return permission == null;
 	}
diff --git a/src/main/java/com/gitblit/models/SearchResult.java b/src/main/java/com/gitblit/models/SearchResult.java
index ee27a06..32edc2d 100644
--- a/src/main/java/com/gitblit/models/SearchResult.java
+++ b/src/main/java/com/gitblit/models/SearchResult.java
@@ -8,16 +8,16 @@
 
 /**
  * Model class that represents a search result.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SearchResult implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public int hitId;
-	
+
 	public int totalHits;
 
 	public float score;
@@ -29,24 +29,24 @@
 	public String committer;
 
 	public String summary;
-	
+
 	public String fragment;
-	
+
 	public String repository;
-	
+
 	public String branch;
 
 	public String commitId;
-	
+
 	public String path;
-	
+
 	public List<String> tags;
-	
+
 	public SearchObjectType type;
 
 	public SearchResult() {
 	}
-	
+
 	public String getId() {
 		switch (type) {
 		case blob:
diff --git a/src/main/java/com/gitblit/models/ServerSettings.java b/src/main/java/com/gitblit/models/ServerSettings.java
index 27199b4..92d5c31 100644
--- a/src/main/java/com/gitblit/models/ServerSettings.java
+++ b/src/main/java/com/gitblit/models/ServerSettings.java
@@ -26,7 +26,7 @@
  * setting metadata such as name, current value, default value, description, and
  * directives. It is a model class for serialization and presentation, but not
  * for persistence.
- * 
+ *
  * @author James Moger
  */
 public class ServerSettings implements Serializable {
@@ -36,13 +36,13 @@
 	private static final long serialVersionUID = 1L;
 
 	public List<String> pushScripts;
-	
+
 	public boolean supportsCredentialChanges;
-	
+
 	public boolean supportsDisplayNameChanges;
-	
+
 	public boolean supportsEmailAddressChanges;
-	
+
 	public boolean supportsTeamMembershipChanges;
 
 	public ServerSettings() {
@@ -62,7 +62,7 @@
 	public SettingModel get(String key) {
 		return settings.get(key);
 	}
-	
+
 	public boolean hasKey(String key) {
 		return settings.containsKey(key);
 	}
diff --git a/src/main/java/com/gitblit/models/ServerStatus.java b/src/main/java/com/gitblit/models/ServerStatus.java
index 3a1e030..f8afd00 100644
--- a/src/main/java/com/gitblit/models/ServerStatus.java
+++ b/src/main/java/com/gitblit/models/ServerStatus.java
@@ -25,9 +25,9 @@
 /**
  * ServerStatus encapsulates runtime status information about the server
  * including some information about the system environment.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ServerStatus implements Serializable {
 
diff --git a/src/main/java/com/gitblit/models/SettingModel.java b/src/main/java/com/gitblit/models/SettingModel.java
index a04126e..ef77e15 100644
--- a/src/main/java/com/gitblit/models/SettingModel.java
+++ b/src/main/java/com/gitblit/models/SettingModel.java
@@ -26,7 +26,7 @@
 /**
  * SettingModel represents a setting and all its metadata: name, current value,
  * default value, description, and directives.
- * 
+ *
  * @author James Moger
  */
 public class SettingModel implements Serializable {
@@ -55,7 +55,7 @@
 
 	/**
 	 * Returns true if the current value is the default value.
-	 * 
+	 *
 	 * @return true if current value is the default value
 	 */
 	public boolean isDefaultValue() {
@@ -66,7 +66,7 @@
 	/**
 	 * Returns the boolean value for the currentValue. If the currentValue can
 	 * not be interpreted as a boolean, the defaultValue is returned.
-	 * 
+	 *
 	 * @param defaultValue
 	 * @return key value or defaultValue
 	 */
@@ -80,7 +80,7 @@
 	/**
 	 * Returns the integer value for the currentValue. If the currentValue can
 	 * not be interpreted as an integer, the defaultValue is returned.
-	 * 
+	 *
 	 * @param defaultValue
 	 * @return key value or defaultValue
 	 */
@@ -97,7 +97,7 @@
 	/**
 	 * Returns the char value for currentValue. If the currentValue can not be
 	 * interpreted as a char, the defaultValue is returned.
-	 * 
+	 *
 	 * @param defaultValue
 	 * @return key value or defaultValue
 	 */
@@ -111,7 +111,7 @@
 	/**
 	 * Returns the string value for currentValue. If the currentValue is null,
 	 * the defaultValue is returned.
-	 * 
+	 *
 	 * @param defaultValue
 	 * @return key value or defaultValue
 	 */
@@ -124,7 +124,7 @@
 
 	/**
 	 * Returns a list of space-separated strings from the specified key.
-	 * 
+	 *
 	 * @return list of strings
 	 */
 	public List<String> getStrings() {
@@ -134,7 +134,7 @@
 	/**
 	 * Returns a list of strings from the currentValue using the specified
 	 * string separator.
-	 * 
+	 *
 	 * @param separator
 	 * @return list of strings
 	 */
@@ -143,10 +143,10 @@
 		strings = StringUtils.getStringsFromValue(currentValue, separator);
 		return strings;
 	}
-	
+
 	/**
 	 * Returns a map of strings from the current value.
-	 * 
+	 *
 	 * @return map of string, string
 	 */
 	public Map<String, String> getMap() {
@@ -154,7 +154,7 @@
 		for (String string : getStrings()) {
 			String[] kvp = string.split("=", 2);
 			String key = kvp[0];
-			String value = kvp[1];				
+			String value = kvp[1];
 			map.put(key,  value);
 		}
 		return map;
diff --git a/src/main/java/com/gitblit/models/SubmoduleModel.java b/src/main/java/com/gitblit/models/SubmoduleModel.java
index 47f84b9..15b69d7 100644
--- a/src/main/java/com/gitblit/models/SubmoduleModel.java
+++ b/src/main/java/com/gitblit/models/SubmoduleModel.java
@@ -20,9 +20,9 @@
 /**
  * SubmoduleModel is a serializable model class that represents a git submodule
  * definition.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SubmoduleModel implements Serializable {
 
@@ -40,7 +40,8 @@
 		this.path = path;
 		this.url = url;
 	}
-	
+
+	@Override
 	public String toString() {
 		return path + "=" + url;
 	}
diff --git a/src/main/java/com/gitblit/models/TeamModel.java b/src/main/java/com/gitblit/models/TeamModel.java
index dfbd45d..54f194b 100644
--- a/src/main/java/com/gitblit/models/TeamModel.java
+++ b/src/main/java/com/gitblit/models/TeamModel.java
@@ -35,9 +35,9 @@
 /**
  * TeamModel is a serializable model class that represents a group of users and
  * a list of accessible repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class TeamModel implements Serializable, Comparable<TeamModel> {
 
@@ -77,7 +77,7 @@
 	public void addRepository(String name) {
 		addRepositoryPermission(name);
 	}
-	
+
 	@Deprecated
 	@Unused
 	public void addRepositories(Collection<String> names) {
@@ -90,10 +90,10 @@
 		removeRepositoryPermission(name);
 	}
 
-	
+
 	/**
 	 * Returns a list of repository permissions for this team.
-	 * 
+	 *
 	 * @return the team's list of permissions
 	 */
 	public List<RegistrantAccessPermission> getRepositoryPermissions() {
@@ -117,11 +117,11 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Returns true if the team has any type of specified access permission for
 	 * this repository.
-	 * 
+	 *
 	 * @param name
 	 * @return true if team has a specified access permission for the repository
 	 */
@@ -143,11 +143,11 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if the team has an explicitly specified access permission for
 	 * this repository.
-	 * 
+	 *
 	 * @param name
 	 * @return if the team has an explicitly specified access permission
 	 */
@@ -155,7 +155,7 @@
 		String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
 		return permissions.containsKey(repository);
 	}
-	
+
 	/**
 	 * Adds a repository permission to the team.
 	 * <p>
@@ -178,13 +178,13 @@
 			addRepositoryPermission(role);
 		}
 	}
-	
+
 	public AccessPermission removeRepositoryPermission(String name) {
 		String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
 		repositories.remove(repository);
 		return permissions.remove(repository);
 	}
-	
+
 	public void setRepositoryPermission(String repository, AccessPermission permission) {
 		if (permission == null) {
 			// remove the permission
@@ -196,16 +196,16 @@
 			repositories.add(repository.toLowerCase());
 		}
 	}
-	
+
 	public RegistrantAccessPermission getRepositoryPermission(RepositoryModel repository) {
 		RegistrantAccessPermission ap = new RegistrantAccessPermission();
 		ap.registrant = name;
 		ap.registrantType = RegistrantType.TEAM;
 		ap.permission = AccessPermission.NONE;
 		ap.mutable = false;
-		
+
 		// determine maximum permission for the repository
-		final AccessPermission maxPermission = 
+		final AccessPermission maxPermission =
 				(repository.isFrozen || !repository.isBare) ?
 						AccessPermission.CLONE : AccessPermission.REWIND;
 
@@ -219,7 +219,7 @@
 			}
 			return ap;
 		}
-		
+
 		if (canAdmin) {
 			ap.permissionType = PermissionType.ADMINISTRATOR;
 			if (AccessPermission.REWIND.atMost(maxPermission)) {
@@ -229,7 +229,7 @@
 			}
 			return ap;
 		}
-		
+
 		if (permissions.containsKey(repository.name.toLowerCase())) {
 			// exact repository permission specified
 			AccessPermission p = permissions.get(repository.name.toLowerCase());
@@ -262,7 +262,7 @@
 				}
 			}
 		}
-		
+
 		// still no explicit or regex, check for implicit permissions
 		if (AccessPermission.NONE == ap.permission) {
 			switch (repository.accessRestriction) {
@@ -289,7 +289,7 @@
 
 		return ap;
 	}
-	
+
 	protected boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) {
 		if (repository.accessRestriction.atLeast(ifRestriction)) {
 			RegistrantAccessPermission ap = getRepositoryPermission(repository);
@@ -297,7 +297,7 @@
 		}
 		return true;
 	}
-	
+
 	public boolean canView(RepositoryModel repository) {
 		return canAccess(repository, AccessRestrictionType.VIEW, AccessPermission.VIEW);
 	}
diff --git a/src/main/java/com/gitblit/models/UserModel.java b/src/main/java/com/gitblit/models/UserModel.java
index d785ae9..b4fdb66 100644
--- a/src/main/java/com/gitblit/models/UserModel.java
+++ b/src/main/java/com/gitblit/models/UserModel.java
@@ -42,16 +42,16 @@
  * UserModel is a serializable model class that represents a user and the user's
  * restricted repository memberships. Instances of UserModels are also used as
  * servlet user principals.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class UserModel implements Principal, Serializable, Comparable<UserModel> {
 
 	private static final long serialVersionUID = 1L;
 
 	public static final UserModel ANONYMOUS = new UserModel();
-	
+
 	// field names are reflectively mapped in EditUser page
 	public String username;
 	public String password;
@@ -78,7 +78,7 @@
 	public AccountType accountType;
 
 	public UserPreferences userPreferences;
-	
+
 	public UserModel(String username) {
 		this.username = username;
 		this.isAuthenticated = true;
@@ -92,7 +92,7 @@
 		this.accountType = AccountType.LOCAL;
 		this.userPreferences = new UserPreferences(this.username);
 	}
-	
+
 	public boolean isLocalAccount() {
 		return accountType.isLocal();
 	}
@@ -100,7 +100,7 @@
 	/**
 	 * This method does not take into consideration Ownership where the
 	 * administrator has not explicitly granted access to the owner.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @return
 	 */
@@ -129,7 +129,7 @@
 		}
 		return false;
 	}
-	
+
 	@Deprecated
 	@Unused
 	public boolean hasRepository(String name) {
@@ -147,11 +147,11 @@
 	public void removeRepository(String name) {
 		removeRepositoryPermission(name);
 	}
-	
+
 	/**
 	 * Returns a list of repository permissions for this user exclusive of
 	 * permissions inherited from team memberships.
-	 * 
+	 *
 	 * @return the user's list of permissions
 	 */
 	public List<RegistrantAccessPermission> getRepositoryPermissions() {
@@ -178,7 +178,7 @@
 			list.add(new RegistrantAccessPermission(registrant, ap, pType, RegistrantType.REPOSITORY, source, mutable));
 		}
 		Collections.sort(list);
-		
+
 		// include immutable team permissions, being careful to preserve order
 		Set<RegistrantAccessPermission> set = new LinkedHashSet<RegistrantAccessPermission>(list);
 		for (TeamModel team : teams) {
@@ -193,11 +193,11 @@
 		}
 		return new ArrayList<RegistrantAccessPermission>(set);
 	}
-	
+
 	/**
 	 * Returns true if the user has any type of specified access permission for
 	 * this repository.
-	 * 
+	 *
 	 * @param name
 	 * @return true if user has a specified access permission for the repository
 	 */
@@ -219,11 +219,11 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if the user has an explicitly specified access permission for
 	 * this repository.
-	 * 
+	 *
 	 * @param name
 	 * @return if the user has an explicitly specified access permission
 	 */
@@ -231,11 +231,11 @@
 		String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
 		return permissions.containsKey(repository);
 	}
-	
+
 	/**
 	 * Returns true if the user's team memberships specify an access permission for
 	 * this repository.
-	 * 
+	 *
 	 * @param name
 	 * @return if the user's team memberships specifi an access permission
 	 */
@@ -249,7 +249,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Adds a repository permission to the team.
 	 * <p>
@@ -266,13 +266,13 @@
 		repositories.add(repository);
 		permissions.put(repository, permission);
 	}
-	
+
 	public AccessPermission removeRepositoryPermission(String name) {
 		String repository = AccessPermission.repositoryFromRole(name).toLowerCase();
 		repositories.remove(repository);
 		return permissions.remove(repository);
 	}
-		
+
 	public void setRepositoryPermission(String repository, AccessPermission permission) {
 		if (permission == null) {
 			// remove the permission
@@ -289,9 +289,9 @@
 		ap.registrantType = RegistrantType.USER;
 		ap.permission = AccessPermission.NONE;
 		ap.mutable = false;
-		
+
 		// determine maximum permission for the repository
-		final AccessPermission maxPermission = 
+		final AccessPermission maxPermission =
 				(repository.isFrozen || !repository.isBare) ?
 						AccessPermission.CLONE : AccessPermission.REWIND;
 
@@ -325,7 +325,7 @@
 			}
 			return ap;
 		}
-		
+
 		// repository owner - either specified owner or personal repository
 		if (repository.isOwner(username) || repository.isUsersPersonalRepository(username)) {
 			ap.permissionType = PermissionType.OWNER;
@@ -336,7 +336,7 @@
 			}
 			return ap;
 		}
-		
+
 		if (AuthorizationControl.AUTHENTICATED.equals(repository.authorizationControl) && isAuthenticated) {
 			// AUTHENTICATED is a shortcut for authorizing all logged-in users RW+ access
 			if (AccessPermission.REWIND.atMost(maxPermission)) {
@@ -346,7 +346,7 @@
 			}
 			return ap;
 		}
-		
+
 		// explicit user permission OR user regex match is used
 		// if that fails, then the best team permission is used
 		if (permissions.containsKey(repository.name.toLowerCase())) {
@@ -381,7 +381,7 @@
 				}
 			}
 		}
-		
+
 		// try to find a team match
 		for (TeamModel team : teams) {
 			RegistrantAccessPermission p = team.getRepositoryPermission(repository);
@@ -392,7 +392,7 @@
 				ap.permissionType = PermissionType.TEAM;
 			}
 		}
-		
+
 		// still no explicit, regex, or team match, check for implicit permissions
 		if (AccessPermission.NONE == ap.permission) {
 			switch (repository.accessRestriction) {
@@ -416,10 +416,10 @@
 				break;
 			}
 		}
-		
+
 		return ap;
 	}
-	
+
 	protected boolean canAccess(RepositoryModel repository, AccessRestrictionType ifRestriction, AccessPermission requirePermission) {
 		if (repository.accessRestriction.atLeast(ifRestriction)) {
 			RegistrantAccessPermission ap = getRepositoryPermission(repository);
@@ -427,11 +427,11 @@
 		}
 		return true;
 	}
-	
+
 	public boolean canView(RepositoryModel repository) {
 		return canAccess(repository, AccessRestrictionType.VIEW, AccessPermission.VIEW);
 	}
-	
+
 	public boolean canView(RepositoryModel repository, String ref) {
 		// Default UserModel doesn't implement ref-level security.
 		// Other Realms (i.e. Gerrit) may override this method.
@@ -486,19 +486,19 @@
 		}
 		return canClone(repository);
 	}
-	
+
 	public boolean canDelete(RepositoryModel model) {
 		return canAdmin() || model.isUsersPersonalRepository(username);
 	}
-	
+
 	public boolean canEdit(RepositoryModel model) {
 		return canAdmin() || model.isUsersPersonalRepository(username) || model.isOwner(username);
 	}
-	
+
 	/**
 	 * This returns true if the user has fork privileges or the user has fork
 	 * privileges because of a team membership.
-	 * 
+	 *
 	 * @return true if the user can fork
 	 */
 	public boolean canFork() {
@@ -518,7 +518,7 @@
 	/**
 	 * This returns true if the user has admin privileges or the user has admin
 	 * privileges because of a team membership.
-	 * 
+	 *
 	 * @return true if the user can admin
 	 */
 	public boolean canAdmin() {
@@ -538,7 +538,7 @@
 	/**
 	 * This returns true if the user has create privileges or the user has create
 	 * privileges because of a team membership.
-	 * 
+	 *
 	 * @return true if the user can admin
 	 */
 	public boolean canCreate() {
@@ -554,10 +554,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if the user is allowed to create the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @return true if the user can create the repository
 	 */
@@ -601,27 +601,27 @@
 	public String getName() {
 		return username;
 	}
-	
+
 	public String getDisplayName() {
 		if (StringUtils.isEmpty(displayName)) {
 			return username;
 		}
 		return displayName;
 	}
-	
+
 	public String getPersonalPath() {
 		return ModelUtils.getPersonalPath(username);
 	}
-	
+
 	public UserPreferences getPreferences() {
 		return userPreferences;
 	}
-	
+
 	@Override
 	public int hashCode() {
 		return username.hashCode();
 	}
-	
+
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof UserModel) {
@@ -639,10 +639,10 @@
 	public int compareTo(UserModel o) {
 		return username.compareTo(o.username);
 	}
-	
+
 	/**
 	 * Returns true if the name/email pair match this user account.
-	 * 
+	 *
 	 * @param name
 	 * @param email
 	 * @return true, if the name and email address match this account
@@ -667,13 +667,13 @@
 		}
 		return nameVerified && emailVerified;
 	}
-	
+
 	@Deprecated
 	public boolean hasBranchPermission(String repositoryName, String branch) {
 		// Default UserModel doesn't implement branch-level security. Other Realms (i.e. Gerrit) may override this method.
 		return hasRepositoryPermission(repositoryName) || hasTeamRepositoryPermission(repositoryName);
 	}
-	
+
 	public boolean isMyPersonalRepository(String repository) {
 		String projectPath = StringUtils.getFirstPathElement(repository);
 		return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase(getPersonalPath());
diff --git a/src/main/java/com/gitblit/models/UserPreferences.java b/src/main/java/com/gitblit/models/UserPreferences.java
index e6baa28..baab071 100644
--- a/src/main/java/com/gitblit/models/UserPreferences.java
+++ b/src/main/java/com/gitblit/models/UserPreferences.java
@@ -27,7 +27,7 @@
 
 /**
  * User preferences.
- * 
+ *
  * @author James Moger
  *
  */
@@ -38,20 +38,20 @@
 	public final String username;
 
 	public String locale;
-	
+
 	private final Map<String, UserRepositoryPreferences> repositoryPreferences = new TreeMap<String, UserRepositoryPreferences>();
 
 	public UserPreferences(String username) {
 		this.username = username;
 	}
-	
+
 	public Locale getLocale() {
 		if (StringUtils.isEmpty(locale)) {
 			return null;
 		}
 		return new Locale(locale);
 	}
-	
+
 	public UserRepositoryPreferences getRepositoryPreferences(String repositoryName) {
 		String key = repositoryName.toLowerCase();
 		if (!repositoryPreferences.containsKey(key)) {
@@ -63,11 +63,11 @@
 		}
 		return repositoryPreferences.get(key);
 	}
-	
+
 	public void setRepositoryPreferences(UserRepositoryPreferences pref) {
 		repositoryPreferences.put(pref.repositoryName.toLowerCase(), pref);
 	}
-	
+
 	public boolean isStarredRepository(String repository) {
 		if (repositoryPreferences == null) {
 			return false;
@@ -79,7 +79,7 @@
 		}
 		return false;
 	}
-	
+
 	public List<String> getStarredRepositories() {
 		List<String> list = new ArrayList<String>();
 		for (UserRepositoryPreferences prefs : repositoryPreferences.values()) {
diff --git a/src/main/java/com/gitblit/models/UserRepositoryPreferences.java b/src/main/java/com/gitblit/models/UserRepositoryPreferences.java
index bc3a184..80b71f3 100644
--- a/src/main/java/com/gitblit/models/UserRepositoryPreferences.java
+++ b/src/main/java/com/gitblit/models/UserRepositoryPreferences.java
@@ -19,7 +19,7 @@
 
 /**
  * User repository preferences.
- * 
+ *
  * @author James Moger
  *
  */
@@ -28,11 +28,11 @@
 	private static final long serialVersionUID = 1L;
 
 	public String username;
-	
+
 	public String repositoryName;
-	
+
 	public boolean starred;
-	
+
 	@Override
 	public String toString() {
 		return username + ":" + repositoryName;
diff --git a/src/main/java/com/gitblit/utils/ActivityUtils.java b/src/main/java/com/gitblit/utils/ActivityUtils.java
index c4e9587..ddd7e37 100644
--- a/src/main/java/com/gitblit/utils/ActivityUtils.java
+++ b/src/main/java/com/gitblit/utils/ActivityUtils.java
@@ -45,16 +45,16 @@
 
 /**
  * Utility class for building activity information from repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ActivityUtils {
 
 	/**
 	 * Gets the recent activity from the repositories for the last daysBack days
 	 * on the specified branch.
-	 * 
+	 *
 	 * @param models
 	 *            the list of repositories to query
 	 * @param daysBack
@@ -79,7 +79,7 @@
 		df.setTimeZone(timezone);
 		Calendar cal = Calendar.getInstance();
 		cal.setTimeZone(timezone);
-		
+
 		// aggregate author exclusions
 		Set<String> authorExclusions = new TreeSet<String>();
 		authorExclusions.addAll(GitBlit.getStrings(Keys.web.metricAuthorExclusions));
@@ -125,7 +125,7 @@
 						// trim commits to maximum count
 						commits = commits.subList(0,  model.maxActivityCommits);
 					}
-					for (RepositoryCommit commit : commits) {						
+					for (RepositoryCommit commit : commits) {
 						Date date = commit.getCommitDate();
 						String dateStr = df.format(date);
 						if (!activity.containsKey(dateStr)) {
@@ -142,7 +142,7 @@
 						activity.get(dateStr).addCommit(commit);
 					}
 				}
-				
+
 				// close the repository
 				repository.close();
 			}
@@ -155,7 +155,7 @@
 	/**
 	 * Returns the Gravatar profile, if available, for the specified email
 	 * address.
-	 * 
+	 *
 	 * @param emailaddress
 	 * @return a Gravatar Profile
 	 * @throws IOException
@@ -167,7 +167,7 @@
 
 	/**
 	 * Creates a Gravatar thumbnail url from the specified email address.
-	 * 
+	 *
 	 * @param email
 	 *            address to query Gravatar
 	 * @param width
@@ -183,10 +183,10 @@
 				"https://www.gravatar.com/avatar/{0}?s={1,number,0}&d=identicon", emailHash, width);
 		return url;
 	}
-	
+
 	/**
 	 * Creates a Gravatar thumbnail url from the specified email address.
-	 * 
+	 *
 	 * @param email
 	 *            address to query Gravatar
 	 * @param width
@@ -206,7 +206,7 @@
 	/**
 	 * Returns the Gravatar profile, if available, for the specified hashcode.
 	 * address.
-	 * 
+	 *
 	 * @param hash
 	 *            the hash of the email address
 	 * @return a Gravatar Profile
diff --git a/src/main/java/com/gitblit/utils/ArrayUtils.java b/src/main/java/com/gitblit/utils/ArrayUtils.java
index 6583467..8387ef7 100644
--- a/src/main/java/com/gitblit/utils/ArrayUtils.java
+++ b/src/main/java/com/gitblit/utils/ArrayUtils.java
@@ -22,9 +22,9 @@
 
 /**
  * Utility class for arrays and collections.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ArrayUtils {
 
@@ -39,11 +39,11 @@
 	public static boolean isEmpty(Object [] array) {
 		return array == null || array.length == 0;
 	}
-	
+
 	public static boolean isEmpty(Collection<?> collection) {
 		return collection == null || collection.size() == 0;
 	}
-	
+
 	public static String toString(Collection<?> collection) {
 		if (isEmpty(collection)) {
 			return "";
@@ -56,7 +56,7 @@
 		sb.setLength(sb.length() - 2);
 		return sb.toString();
 	}
-	
+
 	public static Collection<String> fromString(String value) {
 		if (StringUtils.isEmpty(value)) {
 			value = "";
diff --git a/src/main/java/com/gitblit/utils/Base64.java b/src/main/java/com/gitblit/utils/Base64.java
index 6fd2daf..735cbc2 100644
--- a/src/main/java/com/gitblit/utils/Base64.java
+++ b/src/main/java/com/gitblit/utils/Base64.java
@@ -19,7 +19,7 @@
  * href="http://iharder.net/base64">http://iharder.net/base64</a> periodically
  * to check for updates or to contribute improvements.
  * </p>
- * 
+ *
  * @author Robert Harder
  * @author rob@iharder.net
  * @version 2.1, stripped to minimum feature set used by JGit.
@@ -89,7 +89,7 @@
 	 * <var>destOffset</var> + 4 for the <var>destination</var> array. The
 	 * actual number of significant bytes in your array is given by
 	 * <var>numSigBytes</var>.
-	 * 
+	 *
 	 * @param source
 	 *            the array to convert
 	 * @param srcOffset
@@ -146,7 +146,7 @@
 
 	/**
 	 * Encodes a byte array into Base64 notation.
-	 * 
+	 *
 	 * @param source
 	 *            The data to convert
 	 * @return encoded base64 representation of source.
@@ -157,7 +157,7 @@
 
 	/**
 	 * Encodes a byte array into Base64 notation.
-	 * 
+	 *
 	 * @param source
 	 *            The data to convert
 	 * @param off
@@ -199,7 +199,7 @@
 	 * <var>destOffset</var> + 3 for the <var>destination</var> array. This
 	 * method returns the actual number of bytes that were converted from the
 	 * Base64 encoding.
-	 * 
+	 *
 	 * @param source
 	 *            the array to convert
 	 * @param srcOffset
@@ -246,7 +246,7 @@
 
 	/**
 	 * Low-level decoding ASCII characters from a byte array.
-	 * 
+	 *
 	 * @param source
 	 *            The Base64 encoded data
 	 * @param off
@@ -294,7 +294,7 @@
 
 	/**
 	 * Decodes data from Base64 notation.
-	 * 
+	 *
 	 * @param s
 	 *            the string to decode
 	 * @return the decoded data
diff --git a/src/main/java/com/gitblit/utils/ByteFormat.java b/src/main/java/com/gitblit/utils/ByteFormat.java
index cb7da88..d11ce9d 100644
--- a/src/main/java/com/gitblit/utils/ByteFormat.java
+++ b/src/main/java/com/gitblit/utils/ByteFormat.java
@@ -23,9 +23,9 @@
 /**
  * ByteFormat is a formatter which takes numbers and returns filesizes in bytes,
  * kilobytes, megabytes, or gigabytes.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ByteFormat extends Format {
 
@@ -38,6 +38,7 @@
 		return format(Long.valueOf(value));
 	}
 
+	@Override
 	public StringBuffer format(Object obj, StringBuffer buf, FieldPosition pos) {
 		if (obj instanceof Number) {
 			long numBytes = ((Number) obj).longValue();
@@ -46,19 +47,20 @@
 				buf.append(formatter.format((double) numBytes)).append(" b");
 			} else if (numBytes < 1024 * 1024) {
 				DecimalFormat formatter = new DecimalFormat("#,##0");
-				buf.append(formatter.format((double) numBytes / 1024.0)).append(" KB");
+				buf.append(formatter.format(numBytes / 1024.0)).append(" KB");
 			} else if (numBytes < 1024 * 1024 * 1024) {
 				DecimalFormat formatter = new DecimalFormat("#,##0.0");
-				buf.append(formatter.format((double) numBytes / (1024.0 * 1024.0))).append(" MB");
+				buf.append(formatter.format(numBytes / (1024.0 * 1024.0))).append(" MB");
 			} else {
 				DecimalFormat formatter = new DecimalFormat("#,##0.0");
-				buf.append(formatter.format((double) numBytes / (1024.0 * 1024.0 * 1024.0)))
+				buf.append(formatter.format(numBytes / (1024.0 * 1024.0 * 1024.0)))
 						.append(" GB");
 			}
 		}
 		return buf;
 	}
 
+	@Override
 	public Object parseObject(String source, ParsePosition pos) {
 		return null;
 	}
diff --git a/src/main/java/com/gitblit/utils/ClientLogger.java b/src/main/java/com/gitblit/utils/ClientLogger.java
index 7d18f3d..3570cbe 100644
--- a/src/main/java/com/gitblit/utils/ClientLogger.java
+++ b/src/main/java/com/gitblit/utils/ClientLogger.java
@@ -26,9 +26,9 @@
 /**
  * Class to log messages to the pushing Git client. Intended to be used by the
  * Groovy Hooks.
- * 
+ *
  * @author John Crygier
- * 
+ *
  */
 public class ClientLogger {
 
@@ -41,7 +41,7 @@
 
 	/**
 	 * Sends an info/warning message to the git client.
-	 * 
+	 *
 	 * @param message
 	 */
 	public void info(String message) {
@@ -50,7 +50,7 @@
 
 	/**
 	 * Sends an error message to the git client.
-	 * 
+	 *
 	 * @param message
 	 */
 	public void error(String message) {
@@ -59,7 +59,7 @@
 
 	/**
 	 * Sends an error message to the git client with an exception.
-	 * 
+	 *
 	 * @param message
 	 * @param t
 	 *            an exception
diff --git a/src/main/java/com/gitblit/utils/CommitCache.java b/src/main/java/com/gitblit/utils/CommitCache.java
index e84506e..fd3a659 100644
--- a/src/main/java/com/gitblit/utils/CommitCache.java
+++ b/src/main/java/com/gitblit/utils/CommitCache.java
@@ -35,36 +35,36 @@
 
 /**
  * Caches repository commits for re-use in the dashboard and activity pages.
- * 
+ *
  * @author James Moger
  *
  */
 public class CommitCache {
-	
+
 	private static final CommitCache instance;
-	
+
 	protected final Logger logger = LoggerFactory.getLogger(getClass());
-	
+
 	protected final Map<String, ObjectCache<List<RepositoryCommit>>> cache;
-	
+
 	protected int cacheDays = -1;
-	
+
 	public static CommitCache instance() {
 		return instance;
 	}
-	
+
 	static {
 		instance = new CommitCache();
 	}
-	
+
 	protected CommitCache() {
 		cache = new ConcurrentHashMap<String, ObjectCache<List<RepositoryCommit>>>();
 	}
-	
+
 	/**
 	 * Returns the cutoff date for the cache.  Commits after this date are cached.
 	 * Commits before this date are not cached.
-	 * 
+	 *
 	 * @return
 	 */
 	public Date getCutoffDate() {
@@ -77,28 +77,28 @@
 		cal.add(Calendar.DATE, -1*cacheDays);
 		return cal.getTime();
 	}
-	
+
 	/**
 	 * Sets the number of days to cache.
-	 * 
+	 *
 	 * @param days
 	 */
 	public synchronized void setCacheDays(int days) {
 		this.cacheDays = days;
 		clear();
 	}
-	
+
 	/**
 	 * Clears the entire commit cache.
-	 * 
+	 *
 	 */
 	public void clear() {
 		cache.clear();
 	}
-	
+
 	/**
 	 * Clears the commit cache for a specific repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 */
 	public void clear(String repositoryName) {
@@ -108,10 +108,10 @@
 			logger.info(MessageFormat.format("{0} commit cache cleared", repositoryName));
 		}
 	}
-	
+
 	/**
 	 * Clears the commit cache for a specific branch of a specific repository.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param branch
 	 */
@@ -125,10 +125,10 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Get all commits for the specified repository:branch that are in the cache.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param branch
@@ -137,12 +137,12 @@
 	public List<RepositoryCommit> getCommits(String repositoryName, Repository repository, String branch) {
 		return getCommits(repositoryName, repository, branch, getCutoffDate());
 	}
-	
+
 	/**
 	 * Get all commits for the specified repository:branch since a specific date.
 	 * These commits may be retrieved from the cache if the sinceDate is after
 	 * the cacheCutoffDate.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param branch
@@ -159,13 +159,13 @@
 			if (!cache.containsKey(repoKey)) {
 				cache.put(repoKey, new ObjectCache<List<RepositoryCommit>>());
 			}
-			
+
 			ObjectCache<List<RepositoryCommit>> repoCache = cache.get(repoKey);
 			String branchKey = branch.toLowerCase();
-			
+
 			RevCommit tip = JGitUtils.getCommit(repository, branch);
 			Date tipDate = JGitUtils.getCommitDate(tip);
-			
+
 			List<RepositoryCommit> commits;
 			if (!repoCache.hasCurrent(branchKey, tipDate)) {
 				commits = repoCache.getObject(branchKey);
@@ -193,7 +193,7 @@
 				// update cache
 				repoCache.updateObject(branchKey, tipDate, commits);
 			}
-			
+
 			if (sinceDate.equals(cacheCutoffDate)) {
 				list = commits;
 			} else {
@@ -210,10 +210,10 @@
 		}
 		return list;
 	}
-	
+
 	/**
-	 * Returns a list of commits for the specified repository branch. 
-	 * 
+	 * Returns a list of commits for the specified repository branch.
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param branch
@@ -230,10 +230,10 @@
 		}
 		return commits;
 	}
-	
+
 	/**
-	 * Returns a list of commits for the specified repository branch since the specified commit. 
-	 * 
+	 * Returns a list of commits for the specified repository branch since the specified commit.
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param branch
@@ -250,10 +250,10 @@
 		}
 		return commits;
 	}
-	
+
 	/**
 	 * Reduces the list of commits to those since the specified date.
-	 * 
+	 *
 	 * @param commits
 	 * @param sinceDate
 	 * @return  a list of commits
diff --git a/src/main/java/com/gitblit/utils/CompressionUtils.java b/src/main/java/com/gitblit/utils/CompressionUtils.java
index a8dcdd8..2bf1f13 100644
--- a/src/main/java/com/gitblit/utils/CompressionUtils.java
+++ b/src/main/java/com/gitblit/utils/CompressionUtils.java
@@ -43,9 +43,9 @@
 
 /**
  * Collection of static methods for retrieving information from a repository.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class CompressionUtils {
 
@@ -53,7 +53,7 @@
 
 	/**
 	 * Log an error message and exception.
-	 * 
+	 *
 	 * @param t
 	 * @param repository
 	 *            if repository is not null it MUST be the {0} parameter in the
@@ -77,7 +77,7 @@
 	/**
 	 * Zips the contents of the tree at the (optionally) specified revision and
 	 * the (optionally) specified basepath to the supplied outputstream.
-	 * 
+	 *
 	 * @param repository
 	 * @param basePath
 	 *            if unspecified, entire repository is assumed.
@@ -137,11 +137,11 @@
 		}
 		return success;
 	}
-	
+
 	/**
 	 * tar the contents of the tree at the (optionally) specified revision and
 	 * the (optionally) specified basepath to the supplied outputstream.
-	 * 
+	 *
 	 * @param repository
 	 * @param basePath
 	 *            if unspecified, entire repository is assumed.
@@ -155,11 +155,11 @@
 			OutputStream os) {
 		return tar(null, repository, basePath, objectId, os);
 	}
-	
+
 	/**
 	 * tar.gz the contents of the tree at the (optionally) specified revision and
 	 * the (optionally) specified basepath to the supplied outputstream.
-	 * 
+	 *
 	 * @param repository
 	 * @param basePath
 	 *            if unspecified, entire repository is assumed.
@@ -173,11 +173,11 @@
 			OutputStream os) {
 		return tar(CompressorStreamFactory.GZIP, repository, basePath, objectId, os);
 	}
-	
+
 	/**
 	 * tar.xz the contents of the tree at the (optionally) specified revision and
 	 * the (optionally) specified basepath to the supplied outputstream.
-	 * 
+	 *
 	 * @param repository
 	 * @param basePath
 	 *            if unspecified, entire repository is assumed.
@@ -191,11 +191,11 @@
 			OutputStream os) {
 		return tar(CompressorStreamFactory.XZ, repository, basePath, objectId, os);
 	}
-	
+
 	/**
 	 * tar.bzip2 the contents of the tree at the (optionally) specified revision and
 	 * the (optionally) specified basepath to the supplied outputstream.
-	 * 
+	 *
 	 * @param repository
 	 * @param basePath
 	 *            if unspecified, entire repository is assumed.
@@ -207,15 +207,15 @@
 	 */
 	public static boolean bzip2(Repository repository, String basePath, String objectId,
 			OutputStream os) {
-		
+
 		return tar(CompressorStreamFactory.BZIP2, repository, basePath, objectId, os);
 	}
-	
+
 	/**
 	 * Compresses/archives the contents of the tree at the (optionally)
 	 * specified revision and the (optionally) specified basepath to the
 	 * supplied outputstream.
-	 * 
+	 *
 	 * @param algorithm
 	 *            compression algorithm for tar (optional)
 	 * @param repository
@@ -233,7 +233,7 @@
 		if (commit == null) {
 			return false;
 		}
-		
+
 		OutputStream cos = os;
 		if (!StringUtils.isEmpty(algorithm)) {
 			try {
@@ -264,7 +264,7 @@
 					continue;
 				}
 				tw.getObjectId(id, 0);
-				
+
 				ObjectLoader loader = repository.open(id);
 				if (FileMode.SYMLINK == mode) {
 					TarArchiveEntry entry = new TarArchiveEntry(tw.getPathString(),TarArchiveEntry.LF_SYMLINK);
@@ -279,7 +279,7 @@
 					entry.setMode(mode.getBits());
 					entry.setModTime(modified);
 					entry.setSize(loader.getSize());
-					tos.putArchiveEntry(entry);					
+					tos.putArchiveEntry(entry);
 					loader.copyTo(tos);
 					tos.closeArchiveEntry();
 				}
diff --git a/src/main/java/com/gitblit/utils/ConnectionUtils.java b/src/main/java/com/gitblit/utils/ConnectionUtils.java
index feeedd2..b2bd060 100644
--- a/src/main/java/com/gitblit/utils/ConnectionUtils.java
+++ b/src/main/java/com/gitblit/utils/ConnectionUtils.java
@@ -38,9 +38,9 @@
 
 /**
  * Utility class for establishing HTTP/HTTPS connections.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ConnectionUtils {
 
@@ -61,7 +61,7 @@
 		SSL_CONTEXT = context;
 		HOSTNAME_VERIFIER = new DummyHostnameVerifier();
 		CHARSET = "UTF-8";
-		
+
 		// Disable Java 7 SNI checks
 		// http://stackoverflow.com/questions/7615645/ssl-handshake-alert-unrecognized-name-error-since-upgrade-to-java-1-7-0
 		System.setProperty("jsse.enableSNIExtension", "false");
@@ -97,7 +97,7 @@
 		}
 		return conn;
 	}
-		
+
 	// Copyright (C) 2009 The Android Open Source Project
 	//
 	// Licensed under the Apache License, Version 2.0 (the "License");
@@ -183,7 +183,7 @@
 
 	/**
 	 * DummyTrustManager trusts all certificates.
-	 * 
+	 *
 	 * @author James Moger
 	 */
 	private static class DummyTrustManager implements X509TrustManager {
@@ -206,7 +206,7 @@
 
 	/**
 	 * Trusts all hostnames from a certificate, including self-signed certs.
-	 * 
+	 *
 	 * @author James Moger
 	 */
 	private static class DummyHostnameVerifier implements HostnameVerifier {
diff --git a/src/main/java/com/gitblit/utils/ContainerUtils.java b/src/main/java/com/gitblit/utils/ContainerUtils.java
index 919f99d..613bf97 100644
--- a/src/main/java/com/gitblit/utils/ContainerUtils.java
+++ b/src/main/java/com/gitblit/utils/ContainerUtils.java
@@ -27,7 +27,7 @@
 
 /**
  * This is the support class for all container specific code.
- * 
+ *
  * @author jpyeron
  */
 public class ContainerUtils
@@ -37,7 +37,7 @@
     /**
      * The support class for managing and evaluating the environment with
      * regards to CVE-2007-0405.
-     * 
+     *
      * @see http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450
      * @author jpyeron
      */
@@ -80,7 +80,7 @@
          * blocked from use in certain URL s. It will emit a warning to the
          * logger if the configuration of Tomcat causes the URL processing to
          * fail on %2F.
-         * 
+         *
          * @return true if it recognizes Tomcat, false if it does not recognize
          *         Tomcat
          */
@@ -96,7 +96,7 @@
 
                 // mb.setBytes(test, 0, test.length);
                 Method mByteChunck_setBytes = cByteChunk.getMethod("setBytes", byte[].class, int.class, int.class);
-                mByteChunck_setBytes.invoke(mb, test, (int) 0, test.length);
+                mByteChunck_setBytes.invoke(mb, test, 0, test.length);
 
                 // UDecoder ud=new UDecoder();
                 Class<?> cUDecoder = Class.forName("org.apache.tomcat.util.buf.UDecoder");
diff --git a/src/main/java/com/gitblit/utils/DeepCopier.java b/src/main/java/com/gitblit/utils/DeepCopier.java
index 5df3062..5d89606 100644
--- a/src/main/java/com/gitblit/utils/DeepCopier.java
+++ b/src/main/java/com/gitblit/utils/DeepCopier.java
@@ -57,7 +57,7 @@
 	 * very large objects. The current thread is used for serializing the
 	 * original object in order to respect any synchronization the caller may
 	 * have around it, and a new thread is used for deserializing the copy.
-	 * 
+	 *
 	 */
 	public static <T> T copyParallel(T original) {
 		try {
@@ -88,6 +88,7 @@
 			start();
 		}
 
+		@Override
 		@SuppressWarnings("unchecked")
 		public void run() {
 
diff --git a/src/main/java/com/gitblit/utils/DiffUtils.java b/src/main/java/com/gitblit/utils/DiffUtils.java
index 3c52cb0..107f6ab 100644
--- a/src/main/java/com/gitblit/utils/DiffUtils.java
+++ b/src/main/java/com/gitblit/utils/DiffUtils.java
@@ -66,23 +66,23 @@
 			return null;
 		}
 	}
-	
+
 	/**
-	 * Encapsulates the output of a diff. 
+	 * Encapsulates the output of a diff.
 	 */
 	public static class DiffOutput implements Serializable {
 		private static final long serialVersionUID = 1L;
-		
+
 		public final DiffOutputType type;
 		public final String content;
 		public final DiffStat stat;
-		
+
 		DiffOutput(DiffOutputType type, String content, DiffStat stat) {
 			this.type = type;
 			this.content = content;
 			this.stat = stat;
 		}
-		
+
 		public PathChangeModel getPath(String path) {
 			if (stat == null) {
 				return null;
@@ -98,15 +98,15 @@
 	public static class DiffStat implements Serializable {
 
 		private static final long serialVersionUID = 1L;
-		
+
 		public final List<PathChangeModel> paths = new ArrayList<PathChangeModel>();
-		
+
 		private final String commitId;
-		
+
 		public DiffStat(String commitId) {
 			this.commitId = commitId;
 		}
-		
+
 		public PathChangeModel addPath(DiffEntry entry) {
 			PathChangeModel pcm = PathChangeModel.from(entry, commitId);
 			paths.add(pcm);
@@ -128,7 +128,7 @@
 			}
 			return val;
 		}
-		
+
 		public PathChangeModel getPath(String path) {
 			PathChangeModel stat = null;
 			for (PathChangeModel p : paths) {
@@ -138,7 +138,7 @@
 				}
 			}
 			return stat;
-		}		
+		}
 
 		@Override
 		public String toString() {
@@ -150,15 +150,15 @@
 			return sb.toString();
 		}
 	}
-	
+
 	public static class NormalizedDiffStat implements Serializable {
-		
+
 		private static final long serialVersionUID = 1L;
-		
+
 		public final int insertions;
 		public final int deletions;
 		public final int blanks;
-		
+
 		NormalizedDiffStat(int insertions, int deletions, int blanks) {
 			this.insertions = insertions;
 			this.deletions = deletions;
@@ -282,7 +282,7 @@
 		} catch (Throwable t) {
 			LOGGER.error("failed to generate commit diff!", t);
 		}
-		
+
 		return new DiffOutput(outputType, diff, stat);
 	}
 
@@ -442,10 +442,10 @@
 		}
 		return lines;
 	}
-	
+
 	/**
 	 * Normalizes a diffstat to an N-segment display.
-	 * 
+	 *
 	 * @params segments
 	 * @param insertions
 	 * @param deletions
@@ -482,7 +482,7 @@
 			sd = segments - si;
 			sb = 0;
 		}
-		
+
 		return new NormalizedDiffStat(si, sd, sb);
 	}
 }
diff --git a/src/main/java/com/gitblit/utils/FederationUtils.java b/src/main/java/com/gitblit/utils/FederationUtils.java
index 4d6060d..e1a3d00 100644
--- a/src/main/java/com/gitblit/utils/FederationUtils.java
+++ b/src/main/java/com/gitblit/utils/FederationUtils.java
@@ -44,9 +44,9 @@
 
 /**
  * Utility methods for federation functions.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FederationUtils {
 
@@ -66,7 +66,7 @@
 
 	/**
 	 * Returns an url to this servlet for the specified parameters.
-	 * 
+	 *
 	 * @param sourceURL
 	 *            the url of the source gitblit instance
 	 * @param token
@@ -79,7 +79,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param remoteURL
 	 *            the url of the remote gitblit instance
 	 * @param tokenType
@@ -109,7 +109,7 @@
 	/**
 	 * Returns the list of federated gitblit instances that this instance will
 	 * try to pull.
-	 * 
+	 *
 	 * @return list of registered gitblit instances
 	 */
 	public static List<FederationModel> getFederationRegistrations(IStoredSettings settings) {
@@ -194,7 +194,7 @@
 	 * sent by an pulling Gitblit instance to an origin Gitblit instance as part
 	 * of the proposal process. This is to ensure that the pulling Gitblit
 	 * instance has an IP route to the origin instance.
-	 * 
+	 *
 	 * @param remoteUrl
 	 *            the remote Gitblit instance to send a federation proposal to
 	 * @param proposal
@@ -210,7 +210,7 @@
 
 	/**
 	 * Sends a federation proposal to the Gitblit instance at remoteUrl
-	 * 
+	 *
 	 * @param remoteUrl
 	 *            the remote Gitblit instance to send a federation proposal to
 	 * @param proposal
@@ -246,7 +246,7 @@
 	/**
 	 * Retrieves a map of the repositories at the remote gitblit instance keyed
 	 * by the repository clone url.
-	 * 
+	 *
 	 * @param registration
 	 * @param checkExclusions
 	 *            should returned repositories remove registration exclusions
@@ -272,7 +272,7 @@
 
 	/**
 	 * Tries to pull the gitblit user accounts from the remote gitblit instance.
-	 * 
+	 *
 	 * @param registration
 	 * @return a collection of UserModel objects
 	 * @throws Exception
@@ -287,7 +287,7 @@
 	/**
 	 * Tries to pull the gitblit team definitions from the remote gitblit
 	 * instance.
-	 * 
+	 *
 	 * @param registration
 	 * @return a collection of TeamModel objects
 	 * @throws Exception
@@ -302,7 +302,7 @@
 	/**
 	 * Tries to pull the gitblit server settings from the remote gitblit
 	 * instance.
-	 * 
+	 *
 	 * @param registration
 	 * @return a map of the remote gitblit settings
 	 * @throws Exception
@@ -315,7 +315,7 @@
 
 	/**
 	 * Tries to pull the referenced scripts from the remote gitblit instance.
-	 * 
+	 *
 	 * @param registration
 	 * @return a map of the remote gitblit scripts by script name
 	 * @throws Exception
@@ -328,7 +328,7 @@
 
 	/**
 	 * Send an status acknowledgment to the remote Gitblit server.
-	 * 
+	 *
 	 * @param identification
 	 *            identification of this pulling instance
 	 * @param registration
diff --git a/src/main/java/com/gitblit/utils/FileUtils.java b/src/main/java/com/gitblit/utils/FileUtils.java
index f3a2598..a1eb5bb 100644
--- a/src/main/java/com/gitblit/utils/FileUtils.java
+++ b/src/main/java/com/gitblit/utils/FileUtils.java
@@ -29,12 +29,12 @@
 
 /**
  * Common file utilities.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FileUtils {
-	
+
 	/** 1024 (number of bytes in one kilobyte) */
 	public static final int KB = 1024;
 
@@ -47,7 +47,7 @@
 	/**
 	 * Returns an int from a string representation of a file size.
 	 * e.g. 50m = 50 megabytes
-	 * 
+	 *
 	 * @param aString
 	 * @param defaultValue
 	 * @return an int value or the defaultValue if aString can not be parsed
@@ -55,24 +55,24 @@
 	public static int convertSizeToInt(String aString, int defaultValue) {
 		return (int) convertSizeToLong(aString, defaultValue);
 	}
-	
+
 	/**
 	 * Returns a long from a string representation of a file size.
 	 * e.g. 50m = 50 megabytes
-	 * 
+	 *
 	 * @param aString
 	 * @param defaultValue
 	 * @return a long value or the defaultValue if aString can not be parsed
 	 */
 	public static long convertSizeToLong(String aString, long defaultValue) {
-		// trim string and remove all spaces 
+		// trim string and remove all spaces
 		aString = aString.toLowerCase().trim();
 		StringBuilder sb = new StringBuilder();
 		for (String a : aString.split(" ")) {
 			sb.append(a);
 		}
 		aString = sb.toString();
-		
+
 		// identify value and unit
 		int idx = 0;
 		int len = aString.length();
@@ -99,10 +99,10 @@
 		}
 		return defaultValue;
 	}
-	
+
 	/**
 	 * Returns the byte [] content of the specified file.
-	 * 
+	 *
 	 * @param file
 	 * @return the byte content of the file
 	 */
@@ -130,7 +130,7 @@
 
 	/**
 	 * Returns the string content of the specified file.
-	 * 
+	 *
 	 * @param file
 	 * @param lineEnding
 	 * @return the string content of the file
@@ -166,7 +166,7 @@
 
 	/**
 	 * Writes the string content to the file.
-	 * 
+	 *
 	 * @param file
 	 * @param content
 	 */
@@ -195,14 +195,14 @@
 	/**
 	 * Recursively traverses a folder and its subfolders to calculate the total
 	 * size in bytes.
-	 * 
+	 *
 	 * @param directory
 	 * @return folder size in bytes
 	 */
 	public static long folderSize(File directory) {
 		if (directory == null || !directory.exists()) {
 			return -1;
-		}		
+		}
 		if (directory.isDirectory()) {
 			long length = 0;
 			for (File file : directory.listFiles()) {
@@ -241,7 +241,7 @@
 
 	/**
 	 * Copies a file or folder (recursively) to a destination folder.
-	 * 
+	 *
 	 * @param destinationFolder
 	 * @param filesOrFolders
 	 * @return
@@ -281,11 +281,11 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Determine the relative path between two files.  Takes into account
 	 * canonical paths, if possible.
-	 * 
+	 *
 	 * @param basePath
 	 * @param path
 	 * @return a relative path from basePath to path
@@ -309,11 +309,11 @@
 		// no relative relationship
 		return null;
 	}
-	
+
 	/**
 	 * Returns the exact path for a file. This path will be the canonical path
 	 * unless an exception is thrown in which case it will be the absolute path.
-	 * 
+	 *
 	 * @param path
 	 * @return the exact file
 	 */
@@ -327,7 +327,7 @@
 
 	public static File resolveParameter(String parameter, File aFolder, String path) {
 		if (aFolder == null) {
-			// strip any parameter reference		
+			// strip any parameter reference
 			path = path.replace(parameter, "").trim();
 			if (path.length() > 0 && path.charAt(0) == '/') {
 				// strip leading /
diff --git a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
index 8ca4285..47ff143 100644
--- a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
+++ b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
@@ -34,9 +34,9 @@
 /**
  * Generates an html snippet of a diff in Gitblit's style, tracks changed paths,
  * and calculates diff stats.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitBlitDiffFormatter extends DiffFormatter {
 
@@ -47,22 +47,22 @@
 	private PathChangeModel currentPath;
 
 	private int left, right;
-	
+
 	public GitBlitDiffFormatter(OutputStream os, String commitId) {
 		super(os);
 		this.os = os;
 		this.diffStat = new DiffStat(commitId);
 	}
-	
+
 	@Override
 	public void format(DiffEntry ent) throws IOException {
 		currentPath = diffStat.addPath(ent);
 		super.format(ent);
 	}
-	
+
 	/**
 	 * Output a hunk header
-	 * 
+	 *
 	 * @param aStartLine
 	 *            within first source
 	 * @param aEndLine
@@ -88,7 +88,7 @@
 		left = aStartLine + 1;
 		right = bStartLine + 1;
 	}
-	
+
 	protected void writeRange(final char prefix, final int begin, final int cnt) throws IOException {
 		os.write(' ');
 		os.write(prefix);
@@ -127,7 +127,7 @@
 			throws IOException {
 		// update entry diffstat
 		currentPath.update(prefix);
-		
+
 		// output diff
 		os.write("<tr>".getBytes());
 		switch (prefix) {
@@ -162,7 +162,7 @@
 	/**
 	 * Workaround function for complex private methods in DiffFormatter. This
 	 * sets the html for the diff headers.
-	 * 
+	 *
 	 * @return
 	 */
 	public String getHtml() {
@@ -191,10 +191,10 @@
 				} else {
 					// use a
 					line = line.substring("diff --git ".length()).trim();
-					line = line.substring(line.startsWith("\"a/") ? 3 : 2);					
+					line = line.substring(line.startsWith("\"a/") ? 3 : 2);
 					line = line.substring(0, line.indexOf(" b/") > -1 ? line.indexOf(" b/") : line.indexOf("\"b/")).trim();
 				}
-				
+
 				if (line.charAt(0) == '"') {
 					line = line.substring(1);
 				}
@@ -205,7 +205,7 @@
 					sb.append("</tbody></table></div>\n");
 					inFile = false;
 				}
-				
+
 				sb.append(MessageFormat.format("<div class='header'><div class=\"diffHeader\" id=\"{0}\"><i class=\"icon-file\"></i> ", line)).append(line).append("</div></div>");
 				sb.append("<div class=\"diff\">");
 				sb.append("<table><tbody>");
@@ -229,7 +229,7 @@
 		sb.append("</table></div>");
 		return sb.toString();
 	}
-	
+
 	public DiffStat getDiffStat() {
 		return diffStat;
 	}
diff --git a/src/main/java/com/gitblit/utils/HttpUtils.java b/src/main/java/com/gitblit/utils/HttpUtils.java
index 86f53cf..ffea81c 100644
--- a/src/main/java/com/gitblit/utils/HttpUtils.java
+++ b/src/main/java/com/gitblit/utils/HttpUtils.java
@@ -30,15 +30,15 @@
 
 /**
  * Collection of utility methods for http requests.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class HttpUtils {
 
 	/**
 	 * Returns the Gitblit URL based on the request.
-	 * 
+	 *
 	 * @param request
 	 * @return the host url
 	 */
@@ -59,7 +59,7 @@
         	} catch (Throwable t) {
         	}
         }
-        
+
 		// try to use reverse-proxy server's scheme
         String forwardedScheme = request.getHeader("X-Forwarded-Proto");
         if (StringUtils.isEmpty(forwardedScheme)) {
@@ -68,7 +68,7 @@
         if (!StringUtils.isEmpty(forwardedScheme)) {
         	// reverse-proxy server has supplied the original scheme
         	scheme = forwardedScheme;
-        	
+
         	if ("https".equals(scheme) && port == 80) {
         		// proxy server is https, inside server is 80
         		// this is likely because the proxy server has not supplied
@@ -77,7 +77,7 @@
         		port = 443;
         	}
         }
-        
+
         String context = request.getContextPath();
         String forwardedContext = request.getHeader("X-Forwarded-Context");
         if (forwardedContext != null) {
@@ -86,12 +86,12 @@
         if (!StringUtils.isEmpty(forwardedContext)) {
         	context = forwardedContext;
         }
-        
+
         // trim any trailing slash
         if (context.length() > 0 && context.charAt(context.length() - 1) == '/') {
         	context = context.substring(1);
         }
-        
+
 		StringBuilder sb = new StringBuilder();
 		sb.append(scheme);
 		sb.append("://");
@@ -103,11 +103,11 @@
 		sb.append(context);
 		return sb.toString();
 	}
-	
+
 	/**
 	 * Returns a user model object built from attributes in the SSL certificate.
 	 * This model is not retrieved from the user service.
-	 *  
+	 *
 	 * @param httpRequest
 	 * @param checkValidity ensure certificate can be used now
 	 * @param usernameOIDs if unspecified, CN is used as the username
@@ -136,7 +136,7 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Creates a UserModel from a certificate
 	 * @param cert
@@ -145,16 +145,16 @@
 	 */
 	public static UserModel getUserModelFromCertificate(X509Certificate cert, String... usernameOIDs) {
 		X509Metadata metadata = X509Utils.getMetadata(cert);
-		
+
 		UserModel user = new UserModel(metadata.commonName);
 		user.emailAddress = metadata.emailAddress;
 		user.isAuthenticated = false;
-		
+
 		if (usernameOIDs == null || usernameOIDs.length == 0) {
 			// use default usename<->CN mapping
 			usernameOIDs = new String [] { "CN" };
 		}
-		
+
 		// determine username from OID fingerprint
 		StringBuilder an = new StringBuilder();
 		for (String oid : usernameOIDs) {
@@ -163,10 +163,10 @@
 				an.append(val).append(' ');
 			}
 		}
-		user.username = an.toString().trim();		
+		user.username = an.toString().trim();
 		return user;
 	}
-	
+
 	public static X509Metadata getCertificateMetadata(HttpServletRequest httpRequest) {
 		if (httpRequest.getAttribute("javax.servlet.request.X509Certificate") != null) {
 			X509Certificate[] certChain = (X509Certificate[]) httpRequest
@@ -178,7 +178,7 @@
 		}
 		return null;
 	}
-	
+
 	public static boolean isIpAddress(String address) {
 		if (StringUtils.isEmpty(address)) {
 			return false;
diff --git a/src/main/java/com/gitblit/utils/JGitUtils.java b/src/main/java/com/gitblit/utils/JGitUtils.java
index c494ccc..75a4405 100644
--- a/src/main/java/com/gitblit/utils/JGitUtils.java
+++ b/src/main/java/com/gitblit/utils/JGitUtils.java
@@ -92,9 +92,9 @@
 
 /**
  * Collection of static methods for retrieving information from a repository.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class JGitUtils {
 
@@ -102,7 +102,7 @@
 
 	/**
 	 * Log an error message and exception.
-	 * 
+	 *
 	 * @param t
 	 * @param repository
 	 *            if repository is not null it MUST be the {0} parameter in the
@@ -126,7 +126,7 @@
 	/**
 	 * Returns the displayable name of the person in the form "Real Name <email
 	 * address>".  If the email address is empty, just "Real Name" is returned.
-	 * 
+	 *
 	 * @param person
 	 * @return "Real Name <email address>" or "Real Name"
 	 */
@@ -155,7 +155,7 @@
 	 * Clone or Fetch a repository. If the local repository does not exist,
 	 * clone is called. If the repository does exist, fetch is called. By
 	 * default the clone/fetch retrieves the remote heads, tags, and notes.
-	 * 
+	 *
 	 * @param repositoriesFolder
 	 * @param name
 	 * @param fromUrl
@@ -171,7 +171,7 @@
 	 * Clone or Fetch a repository. If the local repository does not exist,
 	 * clone is called. If the repository does exist, fetch is called. By
 	 * default the clone/fetch retrieves the remote heads, tags, and notes.
-	 * 
+	 *
 	 * @param repositoriesFolder
 	 * @param name
 	 * @param fromUrl
@@ -212,7 +212,7 @@
 				clone.setCredentialsProvider(credentialsProvider);
 			}
 			Repository repository = clone.call().getRepository();
-			
+
 			// Now we have to fetch because CloneCommand doesn't fetch
 			// refs/notes nor does it allow manual RefSpec.
 			result.createdRepository = true;
@@ -225,7 +225,7 @@
 	/**
 	 * Fetch updates from the remote repository. If refSpecs is unspecifed,
 	 * remote heads, tags, and notes are retrieved.
-	 * 
+	 *
 	 * @param credentialsProvider
 	 * @param repository
 	 * @param refSpecs
@@ -254,7 +254,7 @@
 
 	/**
 	 * Creates a bare repository.
-	 * 
+	 *
 	 * @param repositoriesFolder
 	 * @param name
 	 * @return Repository
@@ -444,7 +444,7 @@
 
 	/**
 	 * Returns a list of repository names in the specified folder.
-	 * 
+	 *
 	 * @param repositoriesFolder
 	 * @param onlyBare
 	 *            if true, only bare repositories repositories are listed. If
@@ -478,7 +478,7 @@
 
 	/**
 	 * Recursive function to find git repositories.
-	 * 
+	 *
 	 * @param basePath
 	 *            basePath is stripped from the repository name as repositories
 	 *            are relative to this path
@@ -501,7 +501,7 @@
 		if (depth == 0) {
 			return list;
 		}
-		
+
 		int nextDepth = (depth == -1) ? -1 : depth - 1;
 		for (File file : searchFolder.listFiles()) {
 			if (file.isDirectory()) {
@@ -546,7 +546,7 @@
 	/**
 	 * Returns the first commit on a branch. If the repository does not exist or
 	 * is empty, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param branch
 	 *            if unspecified, HEAD is assumed.
@@ -582,7 +582,7 @@
 	 * Returns the date of the first commit on a branch. If the repository does
 	 * not exist, Date(0) is returned. If the repository does exist bit is
 	 * empty, the last modified date of the repository folder is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param branch
 	 *            if unspecified, HEAD is assumed.
@@ -603,7 +603,7 @@
 	/**
 	 * Determine if a repository has any commits. This is determined by checking
 	 * the for loose and packed objects.
-	 * 
+	 *
 	 * @param repository
 	 * @return true if the repository has commits
 	 */
@@ -614,18 +614,18 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Encapsulates the result of cloning or pulling from a repository.
 	 */
 	public static class LastChange {
 		public Date when;
 		public String who;
-		
+
 		LastChange() {
-			when = new Date(0);			
+			when = new Date(0);
 		}
-		
+
 		LastChange(long lastModified) {
 			this.when = new Date(lastModified);
 		}
@@ -635,7 +635,7 @@
 	 * Returns the date and author of the most recent commit on a branch. If the
 	 * repository does not exist Date(0) is returned. If it does exist but is
 	 * empty, the last modified date of the repository folder is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @return a LastChange object
 	 */
@@ -652,7 +652,7 @@
 		List<RefModel> branchModels = getLocalBranches(repository, true, -1);
 		if (branchModels.size() > 0) {
 			// find most recent branch update
-			LastChange lastChange = new LastChange();			
+			LastChange lastChange = new LastChange();
 			for (RefModel branchModel : branchModels) {
 				if (branchModel.getDate().after(lastChange.when)) {
 					lastChange.when = branchModel.getDate();
@@ -661,14 +661,14 @@
 			}
 			return lastChange;
 		}
-		
+
 		// default to the repository folder modification date
 		return new LastChange(repository.getDirectory().lastModified());
 	}
 
 	/**
 	 * Retrieves a Java Date from a Git commit.
-	 * 
+	 *
 	 * @param commit
 	 * @return date of the commit or Date(0) if the commit is null
 	 */
@@ -681,7 +681,7 @@
 
 	/**
 	 * Retrieves a Java Date from a Git commit.
-	 * 
+	 *
 	 * @param commit
 	 * @return date of the commit or Date(0) if the commit is null
 	 */
@@ -695,7 +695,7 @@
 	/**
 	 * Returns the specified commit from the repository. If the repository does
 	 * not exist or is empty, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if unspecified, HEAD is assumed.
@@ -726,7 +726,7 @@
 
 	/**
 	 * Retrieves the raw byte content of a file in the specified tree.
-	 * 
+	 *
 	 * @param repository
 	 * @param tree
 	 *            if null, the RevTree from HEAD is assumed.
@@ -782,7 +782,7 @@
 
 	/**
 	 * Returns the UTF-8 string content of a file in the specified tree.
-	 * 
+	 *
 	 * @param repository
 	 * @param tree
 	 *            if null, the RevTree from HEAD is assumed.
@@ -800,7 +800,7 @@
 
 	/**
 	 * Gets the raw byte content of the specified blob object.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 * @return byte [] blob content
@@ -831,7 +831,7 @@
 
 	/**
 	 * Gets the UTF-8 string content of the blob specified by objectId.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 * @param charsets optional
@@ -849,7 +849,7 @@
 	 * Returns the list of files in the specified folder at the specified
 	 * commit. If the repository does not exist or is empty, an empty list is
 	 * returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param path
 	 *            if unspecified, root folder is assumed.
@@ -900,11 +900,11 @@
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
 	 * Returns the list of files changed in a specified commit. If the
 	 * repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 *            if null, HEAD is assumed.
@@ -917,7 +917,7 @@
 	/**
 	 * Returns the list of files changed in a specified commit. If the
 	 * repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 *            if null, HEAD is assumed.
@@ -958,7 +958,7 @@
 				for (DiffEntry diff : diffs) {
 					// create the path change model
 					PathChangeModel pcm = PathChangeModel.from(diff, commit.getName());
-					
+
 					if (calculateDiffStat) {
 						// update file diffstats
 						df.format(diff);
@@ -982,7 +982,7 @@
 	/**
 	 * Returns the list of files changed in a specified commit. If the
 	 * repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param startCommit
 	 *            earliest commit
@@ -1005,7 +1005,7 @@
 			for (DiffEntry diff : diffEntries) {
 				PathChangeModel pcm = PathChangeModel.from(diff,  null);
 				list.add(pcm);
-			}			
+			}
 			Collections.sort(list);
 		} catch (Throwable t) {
 			error(t, repository, "{0} failed to determine files in range {1}..{2}!", startCommit, endCommit);
@@ -1016,7 +1016,7 @@
 	 * Returns the list of files in the repository on the default branch that
 	 * match one of the specified extensions. This is a CASE-SENSITIVE search.
 	 * If the repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param extensions
 	 * @return list of files in repository with a matching extension
@@ -1029,7 +1029,7 @@
 	 * Returns the list of files in the repository in the specified commit that
 	 * match one of the specified extensions. This is a CASE-SENSITIVE search.
 	 * If the repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param extensions
 	 * @param objectId
@@ -1078,7 +1078,7 @@
 
 	/**
 	 * Returns a path model of the current file in the treewalk.
-	 * 
+	 *
 	 * @param tw
 	 * @param basePath
 	 * @param commit
@@ -1106,7 +1106,7 @@
 
 	/**
 	 * Returns a permissions representation of the mode bits.
-	 * 
+	 *
 	 * @param mode
 	 * @return string representation of the mode bits
 	 */
@@ -1128,7 +1128,7 @@
 	/**
 	 * Returns a list of commits since the minimum date starting from the
 	 * specified object id.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if unspecified, HEAD is assumed.
@@ -1166,7 +1166,7 @@
 
 	/**
 	 * Returns a list of commits starting from HEAD and working backwards.
-	 * 
+	 *
 	 * @param repository
 	 * @param maxCount
 	 *            if < 0, all commits for the repository are returned.
@@ -1181,7 +1181,7 @@
 	 * offset and maxCount for paging. This is similar to LIMIT n OFFSET p in
 	 * SQL. If the repository does not exist or is empty, an empty list is
 	 * returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if unspecified, HEAD is assumed.
@@ -1200,7 +1200,7 @@
 	 * repository. Caller may specify ending revision with objectId. Caller may
 	 * specify offset and maxCount to achieve pagination of results. If the
 	 * repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if unspecified, HEAD is assumed.
@@ -1245,7 +1245,7 @@
 			RevWalk rw = new RevWalk(repository);
 			rw.markStart(rw.parseCommit(endRange));
 			if (startRange != null) {
-				rw.markUninteresting(rw.parseCommit(startRange));	
+				rw.markUninteresting(rw.parseCommit(startRange));
 			}
 			if (!StringUtils.isEmpty(path)) {
 				TreeFilter filter = AndTreeFilter.create(
@@ -1284,7 +1284,7 @@
 	 * Returns a list of commits for the repository within the range specified
 	 * by startRangeId and endRangeId. If the repository does not exist or is
 	 * empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param startRangeId
 	 *            the first commit (not included in results)
@@ -1329,7 +1329,7 @@
 	 * Search results require a specified SearchType of AUTHOR, COMMITTER, or
 	 * COMMIT. Results may be paginated using offset and maxCount. If the
 	 * repository does not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if unspecified, HEAD is assumed.
@@ -1429,7 +1429,7 @@
 	 * Returns the default branch to use for a repository. Normally returns
 	 * whatever branch HEAD points to, but if HEAD points to nothing it returns
 	 * the most recently updated branch.
-	 * 
+	 *
 	 * @param repository
 	 * @return the objectid of a branch
 	 * @throws Exception
@@ -1492,7 +1492,7 @@
 		}
 		return target;
 	}
-	
+
 	/**
 	 * Sets the symbolic ref HEAD to the specified target ref. The
 	 * HEAD will be detached if the target ref is not a branch.
@@ -1519,7 +1519,7 @@
 			case FORCED:
 			case NO_CHANGE:
 			case FAST_FORWARD:
-				return true;				
+				return true;
 			default:
 				LOGGER.error(MessageFormat.format("{0} HEAD update to {1} returned result {2}",
 						repository.getDirectory().getAbsolutePath(), targetRef, result));
@@ -1529,7 +1529,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Sets the local branch ref to point to the specified commit id.
 	 *
@@ -1554,7 +1554,7 @@
 			case FORCED:
 			case NO_CHANGE:
 			case FAST_FORWARD:
-				return true;				
+				return true;
 			default:
 				LOGGER.error(MessageFormat.format("{0} {1} update to {2} returned result {3}",
 						repository.getDirectory().getAbsolutePath(), branchName, commitId, result));
@@ -1564,10 +1564,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Deletes the specified branch ref.
-	 *  
+	 *
 	 * @param repository
 	 * @param branch
 	 * @return true if successful
@@ -1587,7 +1587,7 @@
 			case FORCED:
 			case NO_CHANGE:
 			case FAST_FORWARD:
-				return true;				
+				return true;
 			default:
 				LOGGER.error(MessageFormat.format("{0} failed to delete to {1} returned result {2}",
 						repository.getDirectory().getAbsolutePath(), branchName, result));
@@ -1597,7 +1597,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Get the full branch and tag ref names for any potential HEAD targets.
 	 *
@@ -1618,17 +1618,17 @@
 
 	/**
 	 * Returns all refs grouped by their associated object id.
-	 * 
+	 *
 	 * @param repository
 	 * @return all refs grouped by their referenced object id
 	 */
 	public static Map<ObjectId, List<RefModel>> getAllRefs(Repository repository) {
 		return getAllRefs(repository, true);
 	}
-	
+
 	/**
 	 * Returns all refs grouped by their associated object id.
-	 * 
+	 *
 	 * @param repository
 	 * @param includeRemoteRefs
 	 * @return all refs grouped by their referenced object id
@@ -1652,7 +1652,7 @@
 	/**
 	 * Returns the list of tags in the repository. If repository does not exist
 	 * or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param fullName
 	 *            if true, /refs/tags/yadayadayada is returned. If false,
@@ -1668,7 +1668,7 @@
 	/**
 	 * Returns the list of local branches in the repository. If repository does
 	 * not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param fullName
 	 *            if true, /refs/heads/yadayadayada is returned. If false,
@@ -1685,7 +1685,7 @@
 	/**
 	 * Returns the list of remote branches in the repository. If repository does
 	 * not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param fullName
 	 *            if true, /refs/remotes/yadayadayada is returned. If false,
@@ -1702,7 +1702,7 @@
 	/**
 	 * Returns the list of note branches. If repository does not exist or is
 	 * empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param fullName
 	 *            if true, /refs/notes/yadayadayada is returned. If false,
@@ -1715,11 +1715,11 @@
 			int maxCount) {
 		return getRefs(repository, Constants.R_NOTES, fullName, maxCount);
 	}
-	
+
 	/**
-	 * Returns the list of refs in the specified base ref. If repository does 
+	 * Returns the list of refs in the specified base ref. If repository does
 	 * not exist or is empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param fullName
 	 *            if true, /refs/yadayadayada is returned. If false,
@@ -1733,7 +1733,7 @@
 	/**
 	 * Returns a list of references in the repository matching "refs". If the
 	 * repository is null or empty, an empty list is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param refs
 	 *            if unspecified, all refs are returned
@@ -1780,7 +1780,7 @@
 	/**
 	 * Returns a RefModel for the gh-pages branch in the repository. If the
 	 * branch can not be found, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @return a refmodel for the gh-pages branch or null
 	 */
@@ -1791,7 +1791,7 @@
 	/**
 	 * Returns a RefModel for a specific branch name in the repository. If the
 	 * branch can not be found, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @return a refmodel for the branch or null
 	 */
@@ -1820,10 +1820,10 @@
 		}
 		return branch;
 	}
-		
+
 	/**
 	 * Returns the list of submodules for this repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 * @return list of submodules
@@ -1832,10 +1832,10 @@
 		RevCommit commit = getCommit(repository, commitId);
 		return getSubmodules(repository, commit.getTree());
 	}
-	
+
 	/**
 	 * Returns the list of submodules for this repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 * @return list of submodules
@@ -1858,11 +1858,11 @@
 		}
 		return list;
 	}
-	
+
 	/**
 	 * Returns the submodule definition for the specified path at the specified
 	 * commit.  If no module is defined for the path, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 * @param path
@@ -1876,7 +1876,7 @@
 		}
 		return null;
 	}
-	
+
 	public static String getSubmoduleCommitId(Repository repository, String path, RevCommit commit) {
 		String commitId = null;
 		RevWalk rw = new RevWalk(repository);
@@ -1907,7 +1907,7 @@
 	 * Returns the list of notes entered about the commit from the refs/notes
 	 * namespace. If the repository does not exist or is empty, an empty list is
 	 * returned.
-	 * 
+	 *
 	 * @param repository
 	 * @param commit
 	 * @return list of notes
@@ -1931,7 +1931,7 @@
 				list.add(gitNote);
 				continue;
 			}
-			
+
 			// folder structure
 			StringBuilder sb = new StringBuilder(commit.getName());
 			sb.insert(2, '/');
@@ -1951,7 +1951,7 @@
 	/**
 	 * this method creates an incremental revision number as a tag according to
 	 * the amount of already existing tags, which start with a defined prefix.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 * @param tagger
@@ -1985,7 +1985,7 @@
 
 	/**
 	 * creates a tag in a repository
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId, the ref the tag points towards
 	 * @param tagger, the person tagging the object
@@ -1994,7 +1994,7 @@
 	 * @return boolean, true if operation was successful, otherwise false
 	 */
 	public static boolean createTag(Repository repository, String objectId, PersonIdent tagger, String tag, String message) {
-		try {			
+		try {
 			Git gitClient = Git.open(repository.getDirectory());
 			TagCommand tagCommand = gitClient.tag();
 			tagCommand.setTagger(tagger);
@@ -2004,17 +2004,17 @@
 				tagCommand.setObjectId(revObj);
 			}
 			tagCommand.setName(tag);
-			Ref call = tagCommand.call();			
+			Ref call = tagCommand.call();
 			return call != null ? true : false;
 		} catch (Exception e) {
 			error(e, repository, "Failed to create tag {1} in repository {0}", objectId, tag);
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Create an orphaned branch in a repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param branchName
 	 * @param author
@@ -2082,10 +2082,10 @@
 		}
 		return success;
 	}
-	
+
 	/**
 	 * Reads the sparkleshare id, if present, from the repository.
-	 * 
+	 *
 	 * @param repository
 	 * @return an id or null
 	 */
diff --git a/src/main/java/com/gitblit/utils/JnaUtils.java b/src/main/java/com/gitblit/utils/JnaUtils.java
index 4009342..2b80719 100644
--- a/src/main/java/com/gitblit/utils/JnaUtils.java
+++ b/src/main/java/com/gitblit/utils/JnaUtils.java
@@ -15,9 +15,6 @@
  */
 package com.gitblit.utils;
 
-import com.sun.jna.Library;
-import com.sun.jna.Native;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -28,6 +25,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+
 /**
  * Collection of static methods to access native OS library functionality.
  *
diff --git a/src/main/java/com/gitblit/utils/JsonUtils.java b/src/main/java/com/gitblit/utils/JsonUtils.java
index e924182..fdf68e5 100644
--- a/src/main/java/com/gitblit/utils/JsonUtils.java
+++ b/src/main/java/com/gitblit/utils/JsonUtils.java
@@ -54,9 +54,9 @@
 
 /**
  * Utility methods for json calls to a Gitblit server.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class JsonUtils {
 
@@ -68,7 +68,7 @@
 
 	/**
 	 * Creates JSON from the specified object.
-	 * 
+	 *
 	 * @param o
 	 * @return json
 	 */
@@ -79,7 +79,7 @@
 
 	/**
 	 * Convert a json string to an object of the specified type.
-	 * 
+	 *
 	 * @param json
 	 * @param clazz
 	 * @return an object
@@ -90,7 +90,7 @@
 
 	/**
 	 * Convert a json string to an object of the specified type.
-	 * 
+	 *
 	 * @param json
 	 * @param clazz
 	 * @return an object
@@ -101,7 +101,7 @@
 
 	/**
 	 * Reads a gson object from the specified url.
-	 * 
+	 *
 	 * @param url
 	 * @param type
 	 * @return the deserialized object
@@ -114,7 +114,7 @@
 
 	/**
 	 * Reads a gson object from the specified url.
-	 * 
+	 *
 	 * @param url
 	 * @param type
 	 * @return the deserialized object
@@ -127,7 +127,7 @@
 
 	/**
 	 * Reads a gson object from the specified url.
-	 * 
+	 *
 	 * @param url
 	 * @param type
 	 * @param username
@@ -146,7 +146,7 @@
 
 	/**
 	 * Reads a gson object from the specified url.
-	 * 
+	 *
 	 * @param url
 	 * @param clazz
 	 * @param username
@@ -165,7 +165,7 @@
 
 	/**
 	 * Retrieves a JSON message.
-	 * 
+	 *
 	 * @param url
 	 * @return the JSON message as a string
 	 * @throws {@link IOException}
@@ -205,7 +205,7 @@
 
 	/**
 	 * Sends a JSON message.
-	 * 
+	 *
 	 * @param url
 	 *            the url to write to
 	 * @param json
@@ -219,7 +219,7 @@
 
 	/**
 	 * Sends a JSON message.
-	 * 
+	 *
 	 * @param url
 	 *            the url to write to
 	 * @param json
@@ -296,7 +296,7 @@
 				JsonDeserializationContext jsonDeserializationContext) {
 			try {
 				synchronized (dateFormat) {
-					Date date = dateFormat.parse(jsonElement.getAsString());					
+					Date date = dateFormat.parse(jsonElement.getAsString());
 					return new Date((date.getTime() / 1000) * 1000);
 				}
 			} catch (ParseException e) {
@@ -304,7 +304,7 @@
 			}
 		}
 	}
-	
+
 	private static class AccessPermissionTypeAdapter implements JsonSerializer<AccessPermission>, JsonDeserializer<AccessPermission> {
 
 		private AccessPermissionTypeAdapter() {
@@ -319,7 +319,7 @@
 		@Override
 		public synchronized AccessPermission deserialize(JsonElement jsonElement, Type type,
 				JsonDeserializationContext jsonDeserializationContext) {
-			return AccessPermission.fromCode(jsonElement.getAsString());					
+			return AccessPermission.fromCode(jsonElement.getAsString());
 		}
 	}
 
@@ -334,10 +334,12 @@
 			this.fieldName = fqfn.substring(fqfn.lastIndexOf(".") + 1);
 		}
 
+		@Override
 		public boolean shouldSkipClass(Class<?> arg0) {
 			return false;
 		}
 
+		@Override
 		public boolean shouldSkipField(FieldAttributes f) {
 			return (f.getDeclaringClass() == c && f.getName().equals(fieldName));
 		}
diff --git a/src/main/java/com/gitblit/utils/MarkdownUtils.java b/src/main/java/com/gitblit/utils/MarkdownUtils.java
index 0b8c9c5..1524236 100644
--- a/src/main/java/com/gitblit/utils/MarkdownUtils.java
+++ b/src/main/java/com/gitblit/utils/MarkdownUtils.java
@@ -26,15 +26,15 @@
 
 /**
  * Utility methods for transforming raw markdown text to html.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class MarkdownUtils {
 
 	/**
 	 * Returns the html version of the markdown source text.
-	 * 
+	 *
 	 * @param markdown
 	 * @return html version of markdown text
 	 * @throws java.text.ParseException
@@ -55,7 +55,7 @@
 	/**
 	 * Returns the html version of the markdown source reader. The reader is
 	 * closed regardless of success or failure.
-	 * 
+	 *
 	 * @param markdownReader
 	 * @return html version of the markdown text
 	 * @throws java.text.ParseException
diff --git a/src/main/java/com/gitblit/utils/MetricUtils.java b/src/main/java/com/gitblit/utils/MetricUtils.java
index 26e4581..4703102 100644
--- a/src/main/java/com/gitblit/utils/MetricUtils.java
+++ b/src/main/java/com/gitblit/utils/MetricUtils.java
@@ -39,9 +39,9 @@
 /**
  * Utility class for collecting metrics on a branch, tag, or other ref within
  * the repository.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class MetricUtils {
 
@@ -49,7 +49,7 @@
 
 	/**
 	 * Log an error message and exception.
-	 * 
+	 *
 	 * @param t
 	 * @param repository
 	 *            if repository is not null it MUST be the {0} parameter in the
@@ -74,12 +74,12 @@
 	 * Returns the list of metrics for the specified commit reference, branch,
 	 * or tag within the repository. If includeTotal is true, the total of all
 	 * the metrics will be included as the first element in the returned list.
-	 * 
+	 *
 	 * If the dateformat is unspecified an attempt is made to determine an
 	 * appropriate date format by determining the time difference between the
 	 * first commit on the branch and the most recent commit. This assumes that
 	 * the commits are linear.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if null or empty, HEAD is assumed.
@@ -172,7 +172,7 @@
 
 	/**
 	 * Returns a list of author metrics for the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param objectId
 	 *            if null or empty, HEAD is assumed.
diff --git a/src/main/java/com/gitblit/utils/ModelUtils.java b/src/main/java/com/gitblit/utils/ModelUtils.java
index d053db6..6fb4c0a 100644
--- a/src/main/java/com/gitblit/utils/ModelUtils.java
+++ b/src/main/java/com/gitblit/utils/ModelUtils.java
@@ -38,7 +38,7 @@
 			userRepoPrefix = Constants.DEFAULT_USER_REPOSITORY_PREFIX;
 			return;
 		}
-		
+
 		String newPrefix = prefix.replace('\\', '/');
 		if (prefix.charAt(0) == '/') {
 			newPrefix = prefix.substring(1);
diff --git a/src/main/java/com/gitblit/utils/ObjectCache.java b/src/main/java/com/gitblit/utils/ObjectCache.java
index 692669f..48a9668 100644
--- a/src/main/java/com/gitblit/utils/ObjectCache.java
+++ b/src/main/java/com/gitblit/utils/ObjectCache.java
@@ -25,9 +25,9 @@
  * milliseconds and in fast, concurrent systems this cache is too simplistic.
  * However, for the cases where its being used in Gitblit this cache technique
  * is just fine.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ObjectCache<X> implements Serializable {
 
@@ -91,7 +91,7 @@
 		}
 		return null;
 	}
-	
+
 	public int size() {
 		return cache.size();
 	}
diff --git a/src/main/java/com/gitblit/utils/PatchFormatter.java b/src/main/java/com/gitblit/utils/PatchFormatter.java
index 90b3fb1..c7d2cef 100644
--- a/src/main/java/com/gitblit/utils/PatchFormatter.java
+++ b/src/main/java/com/gitblit/utils/PatchFormatter.java
@@ -32,9 +32,9 @@
 
 /**
  * A diff formatter that outputs standard patch content.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PatchFormatter extends DiffFormatter {
 
@@ -49,6 +49,7 @@
 		this.os = os;
 	}
 
+	@Override
 	public void format(DiffEntry entry) throws IOException {
 		currentTouple = new PatchTouple();
 		changes.put(entry.getNewPath(), currentTouple);
diff --git a/src/main/java/com/gitblit/utils/RefLogUtils.java b/src/main/java/com/gitblit/utils/RefLogUtils.java
index df09a76..af24773 100644
--- a/src/main/java/com/gitblit/utils/RefLogUtils.java
+++ b/src/main/java/com/gitblit/utils/RefLogUtils.java
@@ -66,19 +66,19 @@
 /**
  * Utility class for maintaining a reflog within a git repository on an
  * orphan branch.
- * 
+ *
  * @author James Moger
  *
  */
 public class RefLogUtils {
-	
+
 	private static final String GB_REFLOG = "refs/gitblit/reflog";
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(RefLogUtils.class);
 
 	/**
 	 * Log an error message and exception.
-	 * 
+	 *
 	 * @param t
 	 * @param repository
 	 *            if repository is not null it MUST be the {0} parameter in the
@@ -98,10 +98,10 @@
 		}
 		LOGGER.error(MessageFormat.format(pattern, parameters.toArray()), t);
 	}
-	
+
 	/**
 	 * Returns true if the repository has a reflog branch.
-	 * 
+	 *
 	 * @param repository
 	 * @return true if the repository has a reflog branch
 	 */
@@ -117,7 +117,7 @@
 	/**
 	 * Returns a RefModel for the reflog branch in the repository. If the
 	 * branch can not be found, null is returned.
-	 * 
+	 *
 	 * @param repository
 	 * @return a refmodel for the reflog branch or null
 	 */
@@ -152,7 +152,7 @@
 		}
 		return null;
 	}
-	
+
 	private static UserModel newUserModelFrom(PersonIdent ident) {
 		String name = ident.getName();
 		String username;
@@ -165,16 +165,16 @@
 			displayname = name;
 			username = ident.getEmailAddress();
 		}
-		
+
 		UserModel user = new UserModel(username);
 		user.displayName = displayname;
 		user.emailAddress = ident.getEmailAddress();
 		return user;
 	}
-	
+
 	/**
 	 * Logs a ref deletion.
-	 * 
+	 *
 	 * @param user
 	 * @param repository
 	 * @param ref
@@ -189,7 +189,7 @@
 			if (reflogBranch == null) {
 				return false;
 			}
-			
+
 			List<RevCommit> log = JGitUtils.getRevLog(repository, reflogBranch.getName(), ref.getName(), 0, 1);
 			if (log.isEmpty()) {
 				// this ref is not in the reflog branch
@@ -202,10 +202,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Updates the reflog with the received commands.
-	 * 
+	 *
 	 * @param user
 	 * @param repository
 	 * @param commands
@@ -217,10 +217,10 @@
 		if (reflogBranch == null) {
 			JGitUtils.createOrphanBranch(repository, GB_REFLOG, null);
 		}
-		
+
 		boolean success = false;
 		String message = "push";
-		
+
 		try {
 			ObjectId headId = repository.resolve(GB_REFLOG + "^{commit}");
 			ObjectInserter odi = repository.newObjectInserter();
@@ -286,17 +286,17 @@
 		}
 		return success;
 	}
-	
+
 	/**
 	 * Creates an in-memory index of the push log entry.
-	 * 
+	 *
 	 * @param repo
 	 * @param headId
 	 * @param commands
 	 * @return an in-memory index
 	 * @throws IOException
 	 */
-	private static DirCache createIndex(Repository repo, ObjectId headId, 
+	private static DirCache createIndex(Repository repo, ObjectId headId,
 			Collection<ReceiveCommand> commands) throws IOException {
 
 		DirCache inCoreIndex = DirCache.newInCore();
@@ -335,7 +335,7 @@
 					continue;
 				}
 				String content = change.toString();
-				
+
 				// create an index entry for this attachment
 				final DirCacheEntry dcEntry = new DirCacheEntry(path);
 				dcEntry.setLength(content.length());
@@ -386,7 +386,7 @@
 		}
 		return inCoreIndex;
 	}
-	
+
 	public static List<RefLogEntry> getRefLog(String repositoryName, Repository repository) {
 		return getRefLog(repositoryName, repository, null, 0, -1);
 	}
@@ -402,11 +402,11 @@
 	public static List<RefLogEntry> getRefLog(String repositoryName, Repository repository, Date minimumDate) {
 		return getRefLog(repositoryName, repository, minimumDate, 0, -1);
 	}
-	
+
 	/**
 	 * Returns the list of reflog entries as they were recorded by Gitblit.
 	 * Each RefLogEntry may represent multiple ref updates.
-	 * 
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param minimumDate
@@ -425,7 +425,7 @@
 		if (maxCount == 0) {
 			return list;
 		}
-		
+
 		Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(repository);
 		List<RevCommit> pushes;
 		if (minimumDate == null) {
@@ -441,8 +441,8 @@
 
 			UserModel user = newUserModelFrom(push.getAuthorIdent());
 			Date date = push.getAuthorIdent().getWhen();
-			
-			RefLogEntry log = new RefLogEntry(repositoryName, date, user);			
+
+			RefLogEntry log = new RefLogEntry(repositoryName, date, user);
 			List<PathChangeModel> changedRefs = JGitUtils.getFilesInCommit(repository, push);
 			if (changedRefs.isEmpty()) {
 				// skip empty commits
@@ -483,7 +483,7 @@
 	/**
 	 * Returns the list of pushes separated by ref (e.g. each ref has it's own
 	 * PushLogEntry object).
-	 *  
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param maxCount
@@ -492,11 +492,11 @@
 	public static List<RefLogEntry> getLogByRef(String repositoryName, Repository repository, int maxCount) {
 		return getLogByRef(repositoryName, repository, 0, maxCount);
 	}
-	
+
 	/**
 	 * Returns the list of pushes separated by ref (e.g. each ref has it's own
 	 * PushLogEntry object).
-	 *  
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param offset
@@ -513,7 +513,7 @@
 				if (!refMap.containsKey(ref)) {
 					refMap.put(ref, new ArrayList<RefLogEntry>());
 				}
-				
+
 				// construct new ref-specific ref change entry
 				RefLogEntry refChange;
 				if (entry instanceof DailyLogEntry) {
@@ -528,23 +528,23 @@
 				refMap.get(ref).add(refChange);
 			}
 		}
-		
+
 		// merge individual ref changes into master list
 		List<RefLogEntry> mergedRefLog = new ArrayList<RefLogEntry>();
 		for (List<RefLogEntry> refPush : refMap.values()) {
 			mergedRefLog.addAll(refPush);
 		}
-		
+
 		// sort ref log
 		Collections.sort(mergedRefLog);
-		
+
 		return mergedRefLog;
 	}
-	
+
 	/**
 	 * Returns the list of ref changes separated by ref (e.g. each ref has it's own
 	 * RefLogEntry object).
-	 *  
+	 *
 	 * @param repositoryName
 	 * @param repository
 	 * @param minimumDate
@@ -567,16 +567,16 @@
 				refMap.get(ref).add(refPush);
 			}
 		}
-		
+
 		// merge individual ref pushes into master list
 		List<RefLogEntry> refPushLog = new ArrayList<RefLogEntry>();
 		for (List<RefLogEntry> refPush : refMap.values()) {
 			refPushLog.addAll(refPush);
 		}
-		
+
 		// sort ref push log
 		Collections.sort(refPushLog);
-		
+
 		return refPushLog;
 	}
 
@@ -631,12 +631,12 @@
                 	linearParent = commit.getParents()[0].getId().getName();
                 	digest.updateRef(branch, ReceiveCommand.Type.UPDATE, linearParent, commit.getName());
                 }
-                
+
                 RepositoryCommit repoCommit = digest.addCommit(commit);
                 if (repoCommit != null) {
                 	List<RefModel> matchedRefs = allRefs.get(commit.getId());
                     repoCommit.setRefs(matchedRefs);
-                    
+
                     if (!ArrayUtils.isEmpty(matchedRefs)) {
                         for (RefModel ref : matchedRefs) {
                             if (ref.getName().startsWith(Constants.R_TAGS)) {
diff --git a/src/main/java/com/gitblit/utils/RpcUtils.java b/src/main/java/com/gitblit/utils/RpcUtils.java
index 290be49..24e07dc 100644
--- a/src/main/java/com/gitblit/utils/RpcUtils.java
+++ b/src/main/java/com/gitblit/utils/RpcUtils.java
@@ -39,9 +39,9 @@
 
 /**
  * Utility methods for rpc calls.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class RpcUtils {
 
@@ -76,7 +76,7 @@
 	}.getType();
 
 	/**
-	 * 
+	 *
 	 * @param remoteURL
 	 *            the url of the remote gitblit instance
 	 * @param req
@@ -88,7 +88,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param remoteURL
 	 *            the url of the remote gitblit instance
 	 * @param req
@@ -110,7 +110,7 @@
 
 	/**
 	 * Returns the version of the RPC protocol on the server.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -124,7 +124,7 @@
 		try {
 			protocol = JsonUtils.retrieveJson(url, Integer.class, account, password);
 		} catch (UnknownRequestException e) {
-			// v0.7.0 (protocol 1) did not have this request type 
+			// v0.7.0 (protocol 1) did not have this request type
 		}
 		return protocol;
 	}
@@ -132,7 +132,7 @@
 	/**
 	 * Retrieves a map of the repositories at the remote gitblit instance keyed
 	 * by the repository clone url.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -149,7 +149,7 @@
 
 	/**
 	 * Tries to pull the gitblit user accounts from the remote gitblit instance.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -167,7 +167,7 @@
 	/**
 	 * Tries to pull the gitblit team definitions from the remote gitblit
 	 * instance.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -184,7 +184,7 @@
 
 	/**
 	 * Create a repository on the Gitblit server.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -205,7 +205,7 @@
 
 	/**
 	 * Send a revised version of the repository model to the Gitblit server.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -221,7 +221,7 @@
 
 	/**
 	 * Delete a repository from the Gitblit server.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -235,17 +235,17 @@
 				password);
 
 	}
-	
+
 	/**
 	 * Clears the repository cache on the Gitblit server.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
 	 * @return true if the action succeeded
 	 * @throws IOException
 	 */
-	public static boolean clearRepositoryCache(String serverUrl, String account, 
+	public static boolean clearRepositoryCache(String serverUrl, String account,
 			char[] password) throws IOException {
 		return doAction(RpcRequest.CLEAR_REPOSITORY_CACHE, null, null, serverUrl, account,
 				password);
@@ -253,7 +253,7 @@
 
 	/**
 	 * Create a user on the Gitblit server.
-	 * 
+	 *
 	 * @param user
 	 * @param serverUrl
 	 * @param account
@@ -269,7 +269,7 @@
 
 	/**
 	 * Send a revised version of the user model to the Gitblit server.
-	 * 
+	 *
 	 * @param user
 	 * @param serverUrl
 	 * @param account
@@ -285,7 +285,7 @@
 
 	/**
 	 * Deletes a user from the Gitblit server.
-	 * 
+	 *
 	 * @param user
 	 * @param serverUrl
 	 * @param account
@@ -297,11 +297,11 @@
 			char[] password) throws IOException {
 		return doAction(RpcRequest.DELETE_USER, null, user, serverUrl, account, password);
 	}
-	
+
 	/**
 	 * Tries to get the specified gitblit user account from the remote gitblit instance.
 	 * If the username is null or empty, the current user is returned.
-	 * 
+	 *
 	 * @param username
 	 * @param serverUrl
 	 * @param account
@@ -318,7 +318,7 @@
 
 	/**
 	 * Create a team on the Gitblit server.
-	 * 
+	 *
 	 * @param team
 	 * @param serverUrl
 	 * @param account
@@ -334,7 +334,7 @@
 
 	/**
 	 * Send a revised version of the team model to the Gitblit server.
-	 * 
+	 *
 	 * @param team
 	 * @param serverUrl
 	 * @param account
@@ -350,7 +350,7 @@
 
 	/**
 	 * Deletes a team from the Gitblit server.
-	 * 
+	 *
 	 * @param team
 	 * @param serverUrl
 	 * @param account
@@ -365,7 +365,7 @@
 
 	/**
 	 * Retrieves the list of users that can access the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -379,10 +379,10 @@
 		Collection<String> list = JsonUtils.retrieveJson(url, NAMES_TYPE, account, password);
 		return new ArrayList<String>(list);
 	}
-	
+
 	/**
 	 * Retrieves the list of user access permissions for the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -390,7 +390,7 @@
 	 * @return list of User-AccessPermission tuples
 	 * @throws IOException
 	 */
-	public static List<RegistrantAccessPermission> getRepositoryMemberPermissions(RepositoryModel repository, 
+	public static List<RegistrantAccessPermission> getRepositoryMemberPermissions(RepositoryModel repository,
 			String serverUrl, String account, char [] password) throws IOException {
 		String url = asLink(serverUrl, RpcRequest.LIST_REPOSITORY_MEMBER_PERMISSIONS, repository.name);
 		Collection<RegistrantAccessPermission> list = JsonUtils.retrieveJson(url, REGISTRANT_PERMISSIONS_TYPE, account, password);
@@ -399,7 +399,7 @@
 
 	/**
 	 * Sets the repository user access permissions
-	 * 
+	 *
 	 * @param repository
 	 * @param permissions
 	 * @param serverUrl
@@ -414,10 +414,10 @@
 		return doAction(RpcRequest.SET_REPOSITORY_MEMBER_PERMISSIONS, repository.name, permissions, serverUrl,
 				account, password);
 	}
-	
+
 	/**
 	 * Retrieves the list of teams that can access the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -431,10 +431,10 @@
 		Collection<String> list = JsonUtils.retrieveJson(url, NAMES_TYPE, account, password);
 		return new ArrayList<String>(list);
 	}
-	
+
 	/**
 	 * Retrieves the list of team access permissions for the specified repository.
-	 * 
+	 *
 	 * @param repository
 	 * @param serverUrl
 	 * @param account
@@ -442,7 +442,7 @@
 	 * @return list of Team-AccessPermission tuples
 	 * @throws IOException
 	 */
-	public static List<RegistrantAccessPermission> getRepositoryTeamPermissions(RepositoryModel repository, 
+	public static List<RegistrantAccessPermission> getRepositoryTeamPermissions(RepositoryModel repository,
 			String serverUrl, String account, char [] password) throws IOException {
 		String url = asLink(serverUrl, RpcRequest.LIST_REPOSITORY_TEAM_PERMISSIONS, repository.name);
 		Collection<RegistrantAccessPermission> list = JsonUtils.retrieveJson(url, REGISTRANT_PERMISSIONS_TYPE, account, password);
@@ -451,7 +451,7 @@
 
 	/**
 	 * Sets the repository team access permissions
-	 * 
+	 *
 	 * @param repository
 	 * @param permissions
 	 * @param serverUrl
@@ -466,11 +466,11 @@
 		return doAction(RpcRequest.SET_REPOSITORY_TEAM_PERMISSIONS, repository.name, permissions, serverUrl,
 				account, password);
 	}
-	
+
 	/**
 	 * Retrieves the list of federation registrations. These are the list of
 	 * registrations that this Gitblit instance is pulling from.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -489,7 +489,7 @@
 	/**
 	 * Retrieves the list of federation result registrations. These are the
 	 * results reported back to this Gitblit instance from a federation client.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -507,7 +507,7 @@
 
 	/**
 	 * Retrieves the list of federation proposals.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -525,7 +525,7 @@
 
 	/**
 	 * Retrieves the list of federation repository sets.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -542,7 +542,7 @@
 
 	/**
 	 * Retrieves the settings of the Gitblit server.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -559,7 +559,7 @@
 
 	/**
 	 * Update the settings on the Gitblit server.
-	 * 
+	 *
 	 * @param settings
 	 *            the settings to update
 	 * @param serverUrl
@@ -576,7 +576,7 @@
 
 	/**
 	 * Retrieves the server status object.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -593,7 +593,7 @@
 	/**
 	 * Retrieves a map of local branches in the Gitblit server keyed by
 	 * repository.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -610,7 +610,7 @@
 
 	/**
 	 * Retrieves a list of available branch feeds in the Gitblit server.
-	 * 
+	 *
 	 * @param serverUrl
 	 * @param account
 	 * @param password
@@ -634,7 +634,7 @@
 
 	/**
 	 * Do the specified administrative action on the Gitblit server.
-	 * 
+	 *
 	 * @param request
 	 * @param name
 	 *            the name of the object (may be null)
diff --git a/src/main/java/com/gitblit/utils/StringUtils.java b/src/main/java/com/gitblit/utils/StringUtils.java
index cff3577..5e62778 100644
--- a/src/main/java/com/gitblit/utils/StringUtils.java
+++ b/src/main/java/com/gitblit/utils/StringUtils.java
@@ -40,9 +40,9 @@
 
 /**
  * Utility class of string functions.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class StringUtils {
 
@@ -52,7 +52,7 @@
 
 	/**
 	 * Returns true if the string is null or empty.
-	 * 
+	 *
 	 * @param value
 	 * @return true if string is null or empty
 	 */
@@ -62,7 +62,7 @@
 
 	/**
 	 * Replaces carriage returns and line feeds with html line breaks.
-	 * 
+	 *
 	 * @param string
 	 * @return plain text with html line breaks
 	 */
@@ -73,7 +73,7 @@
 	/**
 	 * Prepare text for html presentation. Replace sensitive characters with
 	 * html entities.
-	 * 
+	 *
 	 * @param inStr
 	 * @param changeSpace
 	 * @return plain text escaped for html
@@ -104,7 +104,7 @@
 
 	/**
 	 * Decode html entities back into plain text characters.
-	 * 
+	 *
 	 * @param inStr
 	 * @return returns plain text from html
 	 */
@@ -115,7 +115,7 @@
 
 	/**
 	 * Encodes a url parameter by escaping troublesome characters.
-	 * 
+	 *
 	 * @param inStr
 	 * @return properly escaped url
 	 */
@@ -137,7 +137,7 @@
 
 	/**
 	 * Flatten the list of strings into a single string with a space separator.
-	 * 
+	 *
 	 * @param values
 	 * @return flattened list
 	 */
@@ -148,7 +148,7 @@
 	/**
 	 * Flatten the list of strings into a single string with the specified
 	 * separator.
-	 * 
+	 *
 	 * @param values
 	 * @param separator
 	 * @return flattened list
@@ -169,7 +169,7 @@
 	 * Returns a string trimmed to a maximum length with trailing ellipses. If
 	 * the string length is shorter than the max, the original string is
 	 * returned.
-	 * 
+	 *
 	 * @param value
 	 * @param max
 	 * @return trimmed string
@@ -184,7 +184,7 @@
 	/**
 	 * Left pad a string with the specified character, if the string length is
 	 * less than the specified length.
-	 * 
+	 *
 	 * @param input
 	 * @param length
 	 * @param pad
@@ -205,7 +205,7 @@
 	/**
 	 * Right pad a string with the specified character, if the string length is
 	 * less then the specified length.
-	 * 
+	 *
 	 * @param input
 	 * @param length
 	 * @param pad
@@ -225,7 +225,7 @@
 
 	/**
 	 * Calculates the SHA1 of the string.
-	 * 
+	 *
 	 * @param text
 	 * @return sha1 of the string
 	 */
@@ -240,7 +240,7 @@
 
 	/**
 	 * Calculates the SHA1 of the byte array.
-	 * 
+	 *
 	 * @param bytes
 	 * @return sha1 of the byte array
 	 */
@@ -257,7 +257,7 @@
 
 	/**
 	 * Calculates the MD5 of the string.
-	 * 
+	 *
 	 * @param string
 	 * @return md5 of the string
 	 */
@@ -268,10 +268,10 @@
 			throw new RuntimeException(u);
 		}
 	}
-	
+
 	/**
 	 * Calculates the MD5 of the string.
-	 * 
+	 *
 	 * @param string
 	 * @return md5 of the string
 	 */
@@ -289,17 +289,17 @@
 
 	/**
 	 * Returns the hex representation of the byte array.
-	 * 
+	 *
 	 * @param bytes
 	 * @return byte array as hex string
 	 */
 	private static String toHex(byte[] bytes) {
 		StringBuilder sb = new StringBuilder(bytes.length * 2);
 		for (int i = 0; i < bytes.length; i++) {
-			if (((int) bytes[i] & 0xff) < 0x10) {
+			if ((bytes[i] & 0xff) < 0x10) {
 				sb.append('0');
 			}
-			sb.append(Long.toString((int) bytes[i] & 0xff, 16));
+			sb.append(Long.toString(bytes[i] & 0xff, 16));
 		}
 		return sb.toString();
 	}
@@ -307,7 +307,7 @@
 	/**
 	 * Returns the root path of the specified path. Returns a blank string if
 	 * there is no root path.
-	 * 
+	 *
 	 * @param path
 	 * @return root path or blank
 	 */
@@ -321,7 +321,7 @@
 	/**
 	 * Returns the path remainder after subtracting the basePath from the
 	 * fullPath.
-	 * 
+	 *
 	 * @param basePath
 	 * @param fullPath
 	 * @return the relative path
@@ -341,7 +341,7 @@
 
 	/**
 	 * Splits the space-separated string into a list of strings.
-	 * 
+	 *
 	 * @param value
 	 * @return list of strings
 	 */
@@ -351,7 +351,7 @@
 
 	/**
 	 * Splits the string into a list of string by the specified separator.
-	 * 
+	 *
 	 * @param value
 	 * @param separator
 	 * @return list of strings
@@ -359,7 +359,7 @@
 	public static List<String> getStringsFromValue(String value, String separator) {
         List<String> strings = new ArrayList<String>();
         try {
-            String[] chunks = value.split(separator + "(?=([^\"]*\"[^\"]*\")*[^\"]*$)");            
+            String[] chunks = value.split(separator + "(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
             for (String chunk : chunks) {
                 chunk = chunk.trim();
                 if (chunk.length() > 0) {
@@ -379,7 +379,7 @@
 	/**
 	 * Validates that a name is composed of letters, digits, or limited other
 	 * characters.
-	 * 
+	 *
 	 * @param name
 	 * @return the first invalid character found or null if string is acceptable
 	 */
@@ -402,7 +402,7 @@
 	/**
 	 * Simple fuzzy string comparison. This is a case-insensitive check. A
 	 * single wildcard * value is supported.
-	 * 
+	 *
 	 * @param value
 	 * @param pattern
 	 * @return true if the value matches the pattern
@@ -431,7 +431,7 @@
 
 	/**
 	 * Compare two repository names for proper group sorting.
-	 * 
+	 *
 	 * @param r1
 	 * @param r2
 	 * @return
@@ -459,7 +459,7 @@
 
 	/**
 	 * Sort grouped repository names.
-	 * 
+	 *
 	 * @param list
 	 */
 	public static void sortRepositorynames(List<String> list) {
@@ -476,7 +476,7 @@
 		for (char c : getMD5(value.toLowerCase()).toCharArray()) {
 			cs += c;
 		}
-		int n = (cs % 360);		
+		int n = (cs % 360);
 		float hue = ((float) n) / 360;
 		return hsvToRgb(hue, 0.90f, 0.65f);
 	}
@@ -514,10 +514,10 @@
 		String bs = Integer.toHexString((int) (b * 256));
 		return "#" + rs + gs + bs;
 	}
-	
+
 	/**
 	 * Strips a trailing ".git" from the value.
-	 * 
+	 *
 	 * @param value
 	 * @return a stripped value or the original value if .git is not found
 	 */
@@ -527,10 +527,10 @@
 		}
 		return value;
 	}
-	
+
 	/**
 	 * Count the number of lines in a string.
-	 * 
+	 *
 	 * @param value
 	 * @return the line count
 	 */
@@ -540,10 +540,10 @@
 		}
 		return value.split("\n").length;
 	}
-	
+
 	/**
 	 * Returns the file extension of a path.
-	 * 
+	 *
 	 * @param path
 	 * @return a blank string or a file extension
 	 */
@@ -554,13 +554,13 @@
 		}
 		return "";
 	}
-	
+
 	/**
 	 * Replace all occurences of a substring within a string with
 	 * another string.
-	 * 
+	 *
 	 * From Spring StringUtils.
-	 * 
+	 *
 	 * @param inString String to examine
 	 * @param oldPattern String to replace
 	 * @param newPattern String to insert
@@ -582,12 +582,12 @@
 		// remember to append any characters to the right of a match
 		return sb.toString();
 	}
-	
+
 	/**
 	 * Decodes a string by trying several charsets until one does not throw a
 	 * coding exception.  Last resort is to interpret as UTF-8 with illegal
 	 * character substitution.
-	 * 
+	 *
 	 * @param content
 	 * @param charsets optional
 	 * @return a string
@@ -620,12 +620,12 @@
         }
 		return value;
 	}
-	
+
 	/**
 	 * Attempt to extract a repository name from a given url using regular
 	 * expressions.  If no match is made, then return whatever trails after
 	 * the final / character.
-	 * 
+	 *
 	 * @param regexUrls
 	 * @return a repository path
 	 */
@@ -644,7 +644,7 @@
 		}
 		return url;
 	}
-	
+
 	/**
 	 * Converts a string with \nnn sequences into a UTF-8 encoded string.
 	 * @param input
@@ -662,7 +662,7 @@
 				// strip leading \ character
 				String oct = m.group().substring(1);
 				bytes.write(Integer.parseInt(oct, 8));
-				i = m.end();			
+				i = m.end();
 			}
 			if (bytes.size() == 0) {
 				// no octal matches
@@ -679,11 +679,11 @@
 		}
 		return input;
 	}
-	
+
 	/**
 	 * Returns the first path element of a path string.  If no path separator is
-	 * found in the path, an empty string is returned. 
-	 * 
+	 * found in the path, an empty string is returned.
+	 *
 	 * @param path
 	 * @return the first element in the path
 	 */
@@ -693,10 +693,10 @@
 		}
 		return "";
 	}
-	
+
 	/**
 	 * Returns the last path element of a path string
-	 * 
+	 *
 	 * @param path
 	 * @return the last element in the path
 	 */
@@ -706,10 +706,10 @@
 		}
 		return path;
 	}
-	
+
 	/**
 	 * Variation of String.matches() which disregards case issues.
-	 * 
+	 *
 	 * @param regex
 	 * @param input
 	 * @return true if the pattern matches
@@ -719,11 +719,11 @@
 		Matcher m = p.matcher(input);
 		return m.matches();
 	}
-	
+
 	/**
 	 * Removes new line and carriage return chars from a string.
 	 * If input value is null an empty string is returned.
-	 *  
+	 *
 	 * @param input
 	 * @return a sanitized or empty string
 	 */
diff --git a/src/main/java/com/gitblit/utils/SyndicationUtils.java b/src/main/java/com/gitblit/utils/SyndicationUtils.java
index d01d469..2ee1cf6 100644
--- a/src/main/java/com/gitblit/utils/SyndicationUtils.java
+++ b/src/main/java/com/gitblit/utils/SyndicationUtils.java
@@ -43,15 +43,15 @@
 
 /**
  * Utility class for RSS feeds.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class SyndicationUtils {
 
 	/**
 	 * Outputs an RSS feed of the list of entries to the outputstream.
-	 * 
+	 *
 	 * @param hostUrl
 	 * @param feedLink
 	 * @param title
@@ -118,7 +118,7 @@
 
 	/**
 	 * Reads a Gitblit RSS feed.
-	 * 
+	 *
 	 * @param url
 	 *            the url of the Gitblit server
 	 * @param repository
@@ -153,7 +153,7 @@
 
 	/**
 	 * Reads a Gitblit RSS search feed.
-	 * 
+	 *
 	 * @param url
 	 *            the url of the Gitblit server
 	 * @param repository
@@ -195,7 +195,7 @@
 
 	/**
 	 * Reads a Gitblit RSS feed.
-	 * 
+	 *
 	 * @param url
 	 *            the url of the Gitblit server
 	 * @param parameters
diff --git a/src/main/java/com/gitblit/utils/TimeUtils.java b/src/main/java/com/gitblit/utils/TimeUtils.java
index 9b5927c..4b113be 100644
--- a/src/main/java/com/gitblit/utils/TimeUtils.java
+++ b/src/main/java/com/gitblit/utils/TimeUtils.java
@@ -24,9 +24,9 @@
 
 /**
  * Utility class of time functions.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class TimeUtils {
 	public static final long MIN = 1000 * 60L;
@@ -38,15 +38,15 @@
 	public static final long ONEDAY = ONEHOUR * 24L;
 
 	public static final long ONEYEAR = ONEDAY * 365L;
-	
+
 	private final ResourceBundle translation;
-	
+
 	private final TimeZone timezone;
-	
+
 	public TimeUtils() {
 		this(null, null);
 	}
-	
+
 	public TimeUtils(ResourceBundle translation, TimeZone timezone) {
 		this.translation = translation;
 		this.timezone = timezone;
@@ -54,7 +54,7 @@
 
 	/**
 	 * Returns true if date is today.
-	 * 
+	 *
 	 * @param date
 	 * @return true if date is today
 	 */
@@ -69,7 +69,7 @@
 
 	/**
 	 * Returns true if date is yesterday.
-	 * 
+	 *
 	 * @param date
 	 * @return true if date is yesterday
 	 */
@@ -87,7 +87,7 @@
 	/**
 	 * Returns the string representation of the duration as days, months and/or
 	 * years.
-	 * 
+	 *
 	 * @param days
 	 * @return duration as string in days, months, and/or years
 	 */
@@ -123,7 +123,7 @@
 	/**
 	 * Returns the number of minutes ago between the start time and the end
 	 * time.
-	 * 
+	 *
 	 * @param date
 	 * @param endTime
 	 * @param roundup
@@ -140,7 +140,7 @@
 
 	/**
 	 * Return the difference in minutes between now and the date.
-	 * 
+	 *
 	 * @param date
 	 * @param roundup
 	 * @return minutes ago
@@ -151,7 +151,7 @@
 
 	/**
 	 * Return the difference in hours between now and the date.
-	 * 
+	 *
 	 * @param date
 	 * @param roundup
 	 * @return hours ago
@@ -167,7 +167,7 @@
 
 	/**
 	 * Return the difference in days between now and the date.
-	 * 
+	 *
 	 * @param date
 	 * @return days ago
 	 */
@@ -190,7 +190,7 @@
 	/**
 	 * Returns the string representation of the duration between now and the
 	 * date.
-	 * 
+	 *
 	 * @param date
 	 * @return duration as a string
 	 */
@@ -200,7 +200,7 @@
 
 	/**
 	 * Returns the CSS class for the date based on its age from Now.
-	 * 
+	 *
 	 * @param date
 	 * @return the css class
 	 */
@@ -211,7 +211,7 @@
 	/**
 	 * Returns the string representation of the duration OR the css class for
 	 * the duration.
-	 * 
+	 *
 	 * @param date
 	 * @param css
 	 * @return the string representation of the duration OR the css class
@@ -279,7 +279,7 @@
 			}
 		}
 	}
-	
+
 	public String inFuture(Date date) {
 		long diff = date.getTime() - System.currentTimeMillis();
 		if (diff > ONEDAY) {
@@ -295,7 +295,7 @@
 			}
 		}
 	}
-	
+
 	private String translate(String key, String defaultValue) {
 		String value = defaultValue;
 		if (translation != null && translation.containsKey(key)) {
@@ -306,7 +306,7 @@
 		}
 		return value;
 	}
-	
+
 	private String translate(int val, String key, String defaultPattern) {
 		String pattern = defaultPattern;
 		if (translation != null && translation.containsKey(key)) {
@@ -320,7 +320,7 @@
 
 	/**
 	 * Convert a frequency string into minutes.
-	 * 
+	 *
 	 * @param frequency
 	 * @return minutes
 	 */
diff --git a/src/main/java/com/gitblit/utils/X509Utils.java b/src/main/java/com/gitblit/utils/X509Utils.java
index 237c8da..d3d5b46 100644
--- a/src/main/java/com/gitblit/utils/X509Utils.java
+++ b/src/main/java/com/gitblit/utils/X509Utils.java
@@ -89,43 +89,43 @@
 
 /**
  * Utility class to generate X509 certificates, keystores, and truststores.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class X509Utils {
-	
+
 	public static final String SERVER_KEY_STORE = "serverKeyStore.jks";
-	
+
 	public static final String SERVER_TRUST_STORE = "serverTrustStore.jks";
 
 	public static final String CERTS = "certs";
-	
+
 	public static final String CA_KEY_STORE = "certs/caKeyStore.p12";
 
 	public static final String CA_REVOCATION_LIST = "certs/caRevocationList.crl";
-	
+
 	public static final String CA_CONFIG = "certs/authority.conf";
 
 	public static final String CA_CN = "Gitblit Certificate Authority";
-	
+
 	public static final String CA_ALIAS = CA_CN;
 
 	private static final String BC = org.bouncycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME;
-	
+
 	private static final int KEY_LENGTH = 2048;
-	
+
 	private static final String KEY_ALGORITHM = "RSA";
-	
+
 	private static final String SIGNING_ALGORITHM = "SHA512withRSA";
-	
+
 	public static final boolean unlimitedStrength;
-	
+
 	private static final Logger logger = LoggerFactory.getLogger(X509Utils.class);
-	
+
 	static {
 		Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
-		
+
 		// check for JCE Unlimited Strength
 		int maxKeyLen = 0;
 		try {
@@ -140,28 +140,28 @@
 			logger.info("Using JCE Standard Encryption Policy files, encryption key lengths will be limited");
 		}
 	}
-	
+
 	public static enum RevocationReason {
 		// https://en.wikipedia.org/wiki/Revocation_list
 		 unspecified, keyCompromise, caCompromise, affiliationChanged, superseded,
 		 cessationOfOperation, certificateHold, unused, removeFromCRL, privilegeWithdrawn,
 		 ACompromise;
-		 
+
 		 public static RevocationReason [] reasons = {
-			 	unspecified, keyCompromise, caCompromise, 
-				 affiliationChanged, superseded, cessationOfOperation, 
+			 	unspecified, keyCompromise, caCompromise,
+				 affiliationChanged, superseded, cessationOfOperation,
 				 privilegeWithdrawn };
-		 
+
 		 @Override
 		 public String toString() {
 			 return name() +  " (" + ordinal() + ")";
 		 }
 	}
-	
+
 	public interface X509Log {
 		void log(String message);
 	}
-	
+
 	public static class X509Metadata {
 
 		// map for distinguished name OIDs
@@ -169,10 +169,10 @@
 
 		// CN in distingiushed name
 		public final String commonName;
-		
+
 		// password for store
 		public final String password;
-		
+
 		// password hint for README in bundle
 		public String passwordHint;
 
@@ -181,13 +181,13 @@
 
 		// start date of generated certificate
 		public Date notBefore;
-		
+
 		// expiraiton date of generated certificate
 		public Date notAfter;
-		
+
 		// hostname of server for which certificate is generated
 		public String serverHostname;
-		
+
 		// displayname of user for README in bundle
 		public String userDisplayname;
 
@@ -213,7 +213,7 @@
 			notAfter = c.getTime();
 			oids = new HashMap<String, String>();
 		}
-		
+
 		public X509Metadata clone(String commonName, String password) {
 			X509Metadata clone = new X509Metadata(commonName, password);
 			clone.emailAddress = emailAddress;
@@ -225,14 +225,14 @@
 			clone.userDisplayname = userDisplayname;
 			return clone;
 		}
-		
+
 		public String getOID(String oid, String defaultValue) {
 			if (oids.containsKey(oid)) {
 				return oids.get(oid);
 			}
 			return defaultValue;
 		}
-		
+
 		public void setOID(String oid, String value) {
 			if (StringUtils.isEmpty(value)) {
 				oids.remove(oid);
@@ -241,10 +241,10 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Prepare all the certificates and stores necessary for a Gitblit GO server.
-	 * 
+	 *
 	 * @param metadata
 	 * @param folder
 	 * @param x509log
@@ -252,9 +252,9 @@
 	public static void prepareX509Infrastructure(X509Metadata metadata, File folder, X509Log x509log) {
 		// make the specified folder, if necessary
 		folder.mkdirs();
-		
+
 		// Gitblit CA certificate
-		File caKeyStore = new File(folder, CA_KEY_STORE);			
+		File caKeyStore = new File(folder, CA_KEY_STORE);
 		if (!caKeyStore.exists()) {
 			logger.info(MessageFormat.format("Generating {0} ({1})", CA_CN, caKeyStore.getAbsolutePath()));
 			X509Certificate caCert = newCertificateAuthority(metadata, caKeyStore, x509log);
@@ -262,7 +262,7 @@
 		}
 
 		// Gitblit CRL
-		File caRevocationList = new File(folder, CA_REVOCATION_LIST);			
+		File caRevocationList = new File(folder, CA_REVOCATION_LIST);
 		if (!caRevocationList.exists()) {
 			logger.info(MessageFormat.format("Generating {0} CRL ({1})", CA_CN, caRevocationList.getAbsolutePath()));
 			newCertificateRevocationList(caRevocationList, caKeyStore, metadata.password);
@@ -273,7 +273,7 @@
 		File oldKeyStore = new File(folder, "keystore");
 		if (oldKeyStore.exists()) {
 			oldKeyStore.renameTo(new File(folder, SERVER_KEY_STORE));
-			logger.info(MessageFormat.format("Renaming {0} to {1}", oldKeyStore.getName(), SERVER_KEY_STORE));				
+			logger.info(MessageFormat.format("Renaming {0} to {1}", oldKeyStore.getName(), SERVER_KEY_STORE));
 		}
 
 		// create web SSL certificate signed by CA
@@ -282,7 +282,7 @@
 			logger.info(MessageFormat.format("Generating SSL certificate for {0} signed by {1} ({2})", metadata.commonName, CA_CN, serverKeyStore.getAbsolutePath()));
 			PrivateKey caPrivateKey = getPrivateKey(CA_ALIAS, caKeyStore, metadata.password);
 			X509Certificate caCert = getCertificate(CA_ALIAS, caKeyStore, metadata.password);
-			newSSLCertificate(metadata, caPrivateKey, caCert, serverKeyStore, x509log);			
+			newSSLCertificate(metadata, caPrivateKey, caCert, serverKeyStore, x509log);
 		}
 
 		// server certificate trust store holds trusted public certificates
@@ -293,11 +293,11 @@
 			addTrustedCertificate(CA_ALIAS, caCert, serverTrustStore, metadata.password);
 		}
 	}
-	
+
 	/**
 	 * Open a keystore.  Store type is determined by file extension of name. If
 	 * undetermined, JKS is assumed.  The keystore does not need to exist.
-	 *  
+	 *
 	 * @param storeFile
 	 * @param storePassword
 	 * @return a KeyStore
@@ -336,10 +336,10 @@
 			throw new RuntimeException("Could not open keystore " + storeFile, e);
 		}
 	}
-	
+
 	/**
 	 * Saves the keystore to the specified file.
-	 * 
+	 *
 	 * @param targetStoreFile
 	 * @param store
 	 * @param password
@@ -376,17 +376,17 @@
 				} catch (IOException e) {
 				}
 			}
-			
+
 			if (tmpFile.exists()) {
 				tmpFile.delete();
 			}
 		}
-	}	
+	}
 
 	/**
 	 * Retrieves the X509 certificate with the specified alias from the certificate
 	 * store.
-	 * 
+	 *
 	 * @param alias
 	 * @param storeFile
 	 * @param storePassword
@@ -401,11 +401,11 @@
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	/**
 	 * Retrieves the private key for the specified alias from the certificate
 	 * store.
-	 * 
+	 *
 	 * @param alias
 	 * @param storeFile
 	 * @param storePassword
@@ -425,7 +425,7 @@
 	 * Saves the certificate to the file system.  If the destination filename
 	 * ends with the pem extension, the certificate is written in the PEM format,
 	 * otherwise the certificate is written in the DER format.
-	 * 
+	 *
 	 * @param cert
 	 * @param targetFile
 	 */
@@ -443,7 +443,7 @@
 				try {
 					pemWriter = new PEMWriter(new FileWriter(tmpFile));
 					pemWriter.writeObject(cert);
-					pemWriter.flush();					
+					pemWriter.flush();
 				} finally {
 					if (pemWriter != null) {
 						pemWriter.close();
@@ -462,9 +462,9 @@
 					}
 				}
 			}
-			
+
 			// rename tmp file to target
-			if (targetFile.exists()) { 
+			if (targetFile.exists()) {
 				targetFile.delete();
 			}
 			tmpFile.renameTo(targetFile);
@@ -475,10 +475,10 @@
 			throw new RuntimeException("Failed to save certificate " + cert.getSubjectX500Principal().getName(), e);
 		}
 	}
-	
+
 	/**
 	 * Generate a new keypair.
-	 * 
+	 *
 	 * @return a keypair
 	 * @throws Exception
 	 */
@@ -487,10 +487,10 @@
 		kpGen.initialize(KEY_LENGTH, new SecureRandom());
 		return kpGen.generateKeyPair();
 	}
-	
+
 	/**
 	 * Builds a distinguished name from the X509Metadata.
-	 * 
+	 *
 	 * @return a DN
 	 */
 	private static X500Name buildDistinguishedName(X509Metadata metadata) {
@@ -501,14 +501,14 @@
 		setOID(dnBuilder, metadata, "O", Constants.NAME);
 		setOID(dnBuilder, metadata, "OU", Constants.NAME);
 		setOID(dnBuilder, metadata, "E", metadata.emailAddress);
-		setOID(dnBuilder, metadata, "CN", metadata.commonName);		
+		setOID(dnBuilder, metadata, "CN", metadata.commonName);
 		X500Name dn = dnBuilder.build();
 		return dn;
 	}
-	
+
 	private static void setOID(X500NameBuilder dnBuilder, X509Metadata metadata,
 			String oid, String defaultValue) {
-		
+
 		String value = null;
 		if (metadata.oids != null && metadata.oids.containsKey(oid)) {
 			value = metadata.oids.get(oid);
@@ -516,7 +516,7 @@
 		if (StringUtils.isEmpty(value)) {
 			value = defaultValue;
 		}
-		
+
 		if (!StringUtils.isEmpty(value)) {
 			try {
 				Field field = BCStyle.class.getField(oid);
@@ -531,7 +531,7 @@
 	/**
 	 * Creates a new SSL certificate signed by the CA private key and stored in
 	 * keyStore.
-	 * 
+	 *
 	 * @param sslMetadata
 	 * @param caPrivateKey
 	 * @param caCert
@@ -544,15 +544,15 @@
 
 			X500Name webDN = buildDistinguishedName(sslMetadata);
 			X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName());
-			
+
 			X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(
 					issuerDN,
-					BigInteger.valueOf(System.currentTimeMillis()), 
+					BigInteger.valueOf(System.currentTimeMillis()),
 					sslMetadata.notBefore,
 					sslMetadata.notAfter,
 					webDN,
 					pair.getPublic());
-			
+
 			JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
 			certBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(pair.getPublic()));
 			certBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(false));
@@ -561,7 +561,7 @@
 			// support alternateSubjectNames for SSL certificates
 			List<GeneralName> altNames = new ArrayList<GeneralName>();
 			if (HttpUtils.isIpAddress(sslMetadata.commonName)) {
-				altNames.add(new GeneralName(GeneralName.iPAddress, sslMetadata.commonName));				
+				altNames.add(new GeneralName(GeneralName.iPAddress, sslMetadata.commonName));
 			}
 			if (altNames.size() > 0) {
 				GeneralNames subjectAltName = new GeneralNames(altNames.toArray(new GeneralName [altNames.size()]));
@@ -572,7 +572,7 @@
 					.setProvider(BC).build(caPrivateKey);
 			X509Certificate cert = new JcaX509CertificateConverter().setProvider(BC)
 					.getCertificate(certBuilder.build(caSigner));
-			
+
 			cert.checkValidity(new Date());
 			cert.verify(caCert.getPublicKey());
 
@@ -581,9 +581,9 @@
 			serverStore.setKeyEntry(sslMetadata.commonName, pair.getPrivate(), sslMetadata.password.toCharArray(),
 					new Certificate[] { cert, caCert });
 			saveKeyStore(targetStoreFile, serverStore, sslMetadata.password);
-			
+
 	        x509log.log(MessageFormat.format("New SSL certificate {0,number,0} [{1}]", cert.getSerialNumber(), cert.getSubjectDN().getName()));
-	        
+
 	        // update serial number in metadata object
 	        sslMetadata.serialNumber = cert.getSerialNumber().toString();
 
@@ -596,7 +596,7 @@
 	/**
 	 * Creates a new certificate authority PKCS#12 store.  This function will
 	 * destroy any existing CA store.
-	 * 
+	 *
 	 * @param metadata
 	 * @param storeFile
 	 * @param keystorePassword
@@ -606,13 +606,13 @@
 	public static X509Certificate newCertificateAuthority(X509Metadata metadata, File storeFile, X509Log x509log) {
 		try {
 			KeyPair caPair = newKeyPair();
-			
+
 			ContentSigner caSigner = new JcaContentSignerBuilder(SIGNING_ALGORITHM).setProvider(BC).build(caPair.getPrivate());
-			
+
 			// clone metadata
 			X509Metadata caMetadata = metadata.clone(CA_CN, metadata.password);
 			X500Name issuerDN = buildDistinguishedName(caMetadata);
-			
+
 			// Generate self-signed certificate
 			X509v3CertificateBuilder caBuilder = new JcaX509v3CertificateBuilder(
 					issuerDN,
@@ -621,16 +621,16 @@
 					caMetadata.notAfter,
 					issuerDN,
 					caPair.getPublic());
-			
+
 			JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
 			caBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(caPair.getPublic()));
 			caBuilder.addExtension(X509Extension.authorityKeyIdentifier, false, extUtils.createAuthorityKeyIdentifier(caPair.getPublic()));
 			caBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(true));
 			caBuilder.addExtension(X509Extension.keyUsage, true, new KeyUsage(KeyUsage.digitalSignature | KeyUsage.keyCertSign | KeyUsage.cRLSign));
-						
+
 			JcaX509CertificateConverter converter = new JcaX509CertificateConverter().setProvider(BC);
 			X509Certificate cert = converter.getCertificate(caBuilder.build(caSigner));
-			
+
 			// confirm the validity of the CA certificate
 			cert.checkValidity(new Date());
 			cert.verify(cert.getPublicKey());
@@ -639,13 +639,13 @@
 			if (storeFile.exists()) {
 				storeFile.delete();
 			}
-			
+
 			// Save private key and certificate to new keystore
 			KeyStore store = openKeyStore(storeFile, caMetadata.password);
 			store.setKeyEntry(CA_ALIAS, caPair.getPrivate(), caMetadata.password.toCharArray(),
 					new Certificate[] { cert });
 			saveKeyStore(storeFile, store, caMetadata.password);
-			
+
 			x509log.log(MessageFormat.format("New CA certificate {0,number,0} [{1}]", cert.getSerialNumber(), cert.getIssuerDN().getName()));
 
 	        // update serial number in metadata object
@@ -656,11 +656,11 @@
 			throw new RuntimeException("Failed to generate Gitblit CA certificate!", t);
 		}
 	}
-	
+
 	/**
 	 * Creates a new certificate revocation list (CRL).  This function will
 	 * destroy any existing CRL file.
-	 * 
+	 *
 	 * @param caRevocationList
 	 * @param storeFile
 	 * @param keystorePassword
@@ -675,7 +675,7 @@
 
 			X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName());
 			X509v2CRLBuilder crlBuilder = new X509v2CRLBuilder(issuerDN, new Date());
-			
+
 			// build and sign CRL with CA private key
 			ContentSigner signer = new JcaContentSignerBuilder(SIGNING_ALGORITHM).setProvider(BC).build(caPrivateKey);
 			X509CRLHolder crl = crlBuilder.build(signer);
@@ -703,10 +703,10 @@
 			throw new RuntimeException("Failed to create new certificate revocation list " + caRevocationList, e);
 		}
 	}
-	
+
 	/**
 	 * Imports a certificate into the trust store.
-	 * 
+	 *
 	 * @param alias
 	 * @param cert
 	 * @param storeFile
@@ -716,33 +716,33 @@
 		try {
 			KeyStore store = openKeyStore(storeFile, storePassword);
 			store.setCertificateEntry(alias, cert);
-			saveKeyStore(storeFile, store, storePassword);			
+			saveKeyStore(storeFile, store, storePassword);
 		} catch (Exception e) {
 			throw new RuntimeException("Failed to import certificate into trust store " + storeFile, e);
 		}
 	}
-	
+
 	/**
 	 * Creates a new client certificate PKCS#12 and PEM store.  Any existing
 	 * stores are destroyed.  After generation, the certificates are bundled
 	 * into a zip file with a personalized README file.
-	 * 
-	 * The zip file reference is returned. 
-	 * 
+	 *
+	 * The zip file reference is returned.
+	 *
 	 * @param clientMetadata a container for dynamic parameters needed for generation
 	 * @param caKeystoreFile
 	 * @param caKeystorePassword
 	 * @param x509log
 	 * @return a zip file containing the P12, PEM, and personalized README
 	 */
-	public static File newClientBundle(X509Metadata clientMetadata, File caKeystoreFile, 
+	public static File newClientBundle(X509Metadata clientMetadata, File caKeystoreFile,
 			String caKeystorePassword, X509Log x509log) {
 		try {
 			// read the Gitblit CA key and certificate
 			KeyStore store = openKeyStore(caKeystoreFile, caKeystorePassword);
 			PrivateKey caPrivateKey = (PrivateKey) store.getKey(CA_ALIAS, caKeystorePassword.toCharArray());
 			X509Certificate caCert = (X509Certificate) store.getCertificate(CA_ALIAS);
-			
+
 			// generate the P12 and PEM files
 			File targetFolder = new File(caKeystoreFile.getParentFile(), clientMetadata.commonName);
 			X509Certificate cert = newClientCertificate(clientMetadata, caPrivateKey, caCert, targetFolder);
@@ -750,7 +750,7 @@
 
 	        // process template message
 	        String readme = processTemplate(new File(caKeystoreFile.getParentFile(), "instructions.tmpl"), clientMetadata);
-	        
+
 	        // Create a zip bundle with the p12, pem, and a personalized readme
 	        File zipFile = new File(targetFolder, clientMetadata.commonName + ".zip");
 	        if (zipFile.exists()) {
@@ -764,24 +764,24 @@
 	        		zos.putNextEntry(new ZipEntry(p12File.getName()));
 	        		zos.write(FileUtils.readContent(p12File));
 	        		zos.closeEntry();
-	        	}	        	
+	        	}
 	        	File pemFile = new File(targetFolder, clientMetadata.commonName + ".pem");
 	        	if (pemFile.exists()) {
 	        		zos.putNextEntry(new ZipEntry(pemFile.getName()));
 	        		zos.write(FileUtils.readContent(pemFile));
 	        		zos.closeEntry();
 	        	}
-	        	
+
 	        	// include user's public certificate
 	        	zos.putNextEntry(new ZipEntry(clientMetadata.commonName + ".cer"));
         		zos.write(cert.getEncoded());
         		zos.closeEntry();
-        		
+
 	        	// include CA public certificate
 	        	zos.putNextEntry(new ZipEntry("ca.cer"));
         		zos.write(caCert.getEncoded());
         		zos.closeEntry();
-        		
+
 	        	if (readme != null) {
 	        		zos.putNextEntry(new ZipEntry("README.TXT"));
 	        		zos.write(readme.getBytes("UTF-8"));
@@ -793,17 +793,17 @@
 	        		zos.close();
 	        	}
 	        }
-	        
+
 			return zipFile;
 		} catch (Throwable t) {
 			throw new RuntimeException("Failed to generate client bundle!", t);
 		}
 	}
-	
+
 	/**
 	 * Creates a new client certificate PKCS#12 and PEM store.  Any existing
 	 * stores are destroyed.
-	 * 
+	 *
 	 * @param clientMetadata a container for dynamic parameters needed for generation
 	 * @param caKeystoreFile
 	 * @param caKeystorePassword
@@ -814,10 +814,10 @@
 			PrivateKey caPrivateKey, X509Certificate caCert, File targetFolder) {
 		try {
 			KeyPair pair = newKeyPair();
-			
-			X500Name userDN = buildDistinguishedName(clientMetadata);			
+
+			X500Name userDN = buildDistinguishedName(clientMetadata);
 			X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(caCert).getName());
-			
+
 			// create a new certificate signed by the Gitblit CA certificate
 			X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(
 					issuerDN,
@@ -826,7 +826,7 @@
 					clientMetadata.notAfter,
 					userDN,
 					pair.getPublic());
-			
+
 			JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils();
 			certBuilder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(pair.getPublic()));
 			certBuilder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(false));
@@ -844,7 +844,7 @@
 			PKCS12BagAttributeCarrier bagAttr = (PKCS12BagAttributeCarrier)pair.getPrivate();
 			bagAttr.setBagAttribute(PKCSObjectIdentifiers.pkcs_9_at_localKeyId,
 					extUtils.createSubjectKeyIdentifier(pair.getPublic()));
-			 
+
 			// confirm the validity of the user certificate
 			userCert.checkValidity();
 			userCert.verify(caCert.getPublicKey());
@@ -854,7 +854,7 @@
 	        verifyChain(userCert, caCert);
 
 	        targetFolder.mkdirs();
-	        
+
 	        // save certificate, stamped with unique name
 	        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
 	        String id = date;
@@ -865,7 +865,7 @@
 	        	certFile = new File(targetFolder, id + ".cer");
 	        	count++;
 	        }
-	        
+
 	        // save user private key, user certificate and CA certificate to a PKCS#12 store
 	        File p12File = new File(targetFolder, clientMetadata.commonName + ".p12");
 	        if (p12File.exists()) {
@@ -873,9 +873,9 @@
 	        }
 	        KeyStore userStore = openKeyStore(p12File, clientMetadata.password);
 	        userStore.setKeyEntry(MessageFormat.format("Gitblit ({0}) {1} {2}", clientMetadata.serverHostname, clientMetadata.userDisplayname, id), pair.getPrivate(), null, new Certificate [] { userCert });
-	        userStore.setCertificateEntry(MessageFormat.format("Gitblit ({0}) Certificate Authority", clientMetadata.serverHostname), caCert);	        
+	        userStore.setCertificateEntry(MessageFormat.format("Gitblit ({0}) Certificate Authority", clientMetadata.serverHostname), caCert);
 	        saveKeyStore(p12File, userStore, clientMetadata.password);
-	        
+
 	        // save user private key, user certificate, and CA certificate to a PEM store
 	        File pemFile = new File(targetFolder, clientMetadata.commonName + ".pem");
 	        if (pemFile.exists()) {
@@ -887,22 +887,22 @@
 	        pemWriter.writeObject(caCert);
 	        pemWriter.flush();
 	        pemWriter.close();
-	        
+
 	        // save certificate after successfully creating the key stores
 	        saveCertificate(userCert, certFile);
-	        
+
 	        // update serial number in metadata object
 	        clientMetadata.serialNumber = userCert.getSerialNumber().toString();
-	        
+
 	        return userCert;
 		} catch (Throwable t) {
 			throw new RuntimeException("Failed to generate client certificate!", t);
 		}
 	}
-	
+
 	/**
 	 * Verifies a certificate's chain to ensure that it will function properly.
-	 * 
+	 *
 	 * @param testCert
 	 * @param additionalCerts
 	 * @return
@@ -913,19 +913,19 @@
 			if (isSelfSigned(testCert)) {
 				throw new RuntimeException("The certificate is self-signed.  Nothing to verify.");
 			}
-			
+
 			// Prepare a set of all certificates
 			// chain builder must have all certs, including cert to validate
 			// http://stackoverflow.com/a/10788392
 			Set<X509Certificate> certs = new HashSet<X509Certificate>();
 			certs.add(testCert);
 			certs.addAll(Arrays.asList(additionalCerts));
-			
+
 			// Attempt to build the certification chain and verify it
 			// Create the selector that specifies the starting certificate
-			X509CertSelector selector = new X509CertSelector(); 
+			X509CertSelector selector = new X509CertSelector();
 		    selector.setCertificate(testCert);
-		    
+
 		    // Create the trust anchors (set of root CA certificates)
 		    Set<TrustAnchor> trustAnchors = new HashSet<TrustAnchor>();
 		    for (X509Certificate cert : additionalCerts) {
@@ -933,16 +933,16 @@
 		    		trustAnchors.add(new TrustAnchor(cert, null));
 		    	}
 		    }
-		    
+
 		    // Configure the PKIX certificate builder
 		    PKIXBuilderParameters pkixParams = new PKIXBuilderParameters(trustAnchors, selector);
 			pkixParams.setRevocationEnabled(false);
 			pkixParams.addCertStore(CertStore.getInstance("Collection", new CollectionCertStoreParameters(certs), BC));
-		
+
 			// Build and verify the certification chain
 			CertPathBuilder builder = CertPathBuilder.getInstance("PKIX", BC);
 			PKIXCertPathBuilderResult verifiedCertChain = (PKIXCertPathBuilderResult) builder.build(pkixParams);
-			
+
 			// The chain is built and verified
 			return verifiedCertChain;
 		} catch (CertPathBuilderException e) {
@@ -951,10 +951,10 @@
 			throw new RuntimeException("Error verifying the certificate: " + testCert.getSubjectX500Principal(), e);
 		}
 	}
-	
+
 	/**
 	 * Checks whether given X.509 certificate is self-signed.
-	 * 
+	 *
 	 * @param cert
 	 * @return true if the certificate is self-signed
 	 */
@@ -970,7 +970,7 @@
 			throw new RuntimeException(e);
 		}
 	}
-	
+
 	public static String processTemplate(File template, X509Metadata metadata) {
 		String content = null;
 		if (template.exists()) {
@@ -993,10 +993,10 @@
 		}
 		return content;
 	}
-	
+
 	/**
 	 * Revoke a certificate.
-	 * 
+	 *
 	 * @param cert
 	 * @param reason
 	 * @param caRevocationList
@@ -1019,10 +1019,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Revoke a certificate.
-	 * 
+	 *
 	 * @param cert
 	 * @param reason
 	 * @param caRevocationList
@@ -1036,16 +1036,16 @@
 			X500Name issuerDN = new X500Name(PrincipalUtil.getIssuerX509Principal(cert).getName());
 			X509v2CRLBuilder crlBuilder = new X509v2CRLBuilder(issuerDN, new Date());
 			if (caRevocationList.exists()) {
-				byte [] data = FileUtils.readContent(caRevocationList);				
+				byte [] data = FileUtils.readContent(caRevocationList);
 				X509CRLHolder crl = new X509CRLHolder(data);
 				crlBuilder.addCRL(crl);
 			}
 			crlBuilder.addCRLEntry(cert.getSerialNumber(), new Date(), reason.ordinal());
-			
+
 			// build and sign CRL with CA private key
 			ContentSigner signer = new JcaContentSignerBuilder("SHA1WithRSA").setProvider(BC).build(caPrivateKey);
 			X509CRLHolder crl = crlBuilder.build(signer);
-			
+
 			File tmpFile = new File(caRevocationList.getParentFile(), Long.toHexString(System.currentTimeMillis()) + ".tmp");
 			FileOutputStream fos = null;
 			try {
@@ -1057,7 +1057,7 @@
 					caRevocationList.delete();
 				}
 				tmpFile.renameTo(caRevocationList);
-				
+
 			} finally {
 				if (fos != null) {
 					fos.close();
@@ -1066,7 +1066,7 @@
 					tmpFile.delete();
 				}
 			}
-			
+
 			x509log.log(MessageFormat.format("Revoked certificate {0,number,0} reason: {1} [{2}]",
 					cert.getSerialNumber(), reason.toString(), cert.getSubjectDN().getName()));
 			return true;
@@ -1076,10 +1076,10 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Returns true if the certificate has been revoked.
-	 * 
+	 *
 	 * @param cert
 	 * @param caRevocationList
 	 * @return true if the certificate is revoked
@@ -1107,7 +1107,7 @@
 		}
 		return false;
 	}
-	
+
 	public static X509Metadata getMetadata(X509Certificate cert) {
 		// manually split DN into OID components
 		// this is instead of parsing with LdapName which:
@@ -1121,7 +1121,7 @@
 			String data = val[1].trim();
 			oids.put(oid, data);
 		}
-		
+
 		X509Metadata metadata = new X509Metadata(oids.get("CN"), "whocares");
 		metadata.oids.putAll(oids);
 		metadata.serialNumber = cert.getSerialNumber().toString();
diff --git a/src/main/java/com/gitblit/wicket/AuthorizationStrategy.java b/src/main/java/com/gitblit/wicket/AuthorizationStrategy.java
index e36a50e..e3774d8 100644
--- a/src/main/java/com/gitblit/wicket/AuthorizationStrategy.java
+++ b/src/main/java/com/gitblit/wicket/AuthorizationStrategy.java
@@ -77,7 +77,7 @@
 
 	@Override
 	public void onUnauthorizedInstantiation(Component component) {
-		
+
 		if (component instanceof BasePage) {
 			throw new RestartResponseException(GitBlitWebApp.HOME_PAGE_CLASS);
 		}
diff --git a/src/main/java/com/gitblit/wicket/CacheControl.java b/src/main/java/com/gitblit/wicket/CacheControl.java
index f72fe3a..567fb09 100644
--- a/src/main/java/com/gitblit/wicket/CacheControl.java
+++ b/src/main/java/com/gitblit/wicket/CacheControl.java
@@ -21,20 +21,20 @@
 
 /**
  * Page attribute to control what date as last-modified for the browser cache.
- * 
+ *
  * http://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching
  * https://developers.google.com/speed/docs/best-practices/caching
- * 
+ *
  * @author James Moger
  *
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
 public @interface CacheControl {
-	
+
 	public static enum LastModified {
 		BOOT, ACTIVITY, PROJECT, REPOSITORY, COMMIT, NONE
 	}
-	
+
 	LastModified value() default LastModified.NONE;
 }
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/wicket/ExternalImage.java b/src/main/java/com/gitblit/wicket/ExternalImage.java
index 3325774..34adb1e 100644
--- a/src/main/java/com/gitblit/wicket/ExternalImage.java
+++ b/src/main/java/com/gitblit/wicket/ExternalImage.java
@@ -27,6 +27,7 @@
 		super(id, new Model<String>(url));
 	}
 
+	@Override
 	protected void onComponentTag(ComponentTag tag) {
 		super.onComponentTag(tag);
 		checkComponentTag(tag, "img");
diff --git a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
index f25bcf9..b26a111 100644
--- a/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
+++ b/src/main/java/com/gitblit/wicket/GitBlitWebSession.java
@@ -42,27 +42,28 @@
 	private UserModel user;
 
 	private String errorMessage;
-	
+
 	private String requestUrl;
-	
+
 	private AtomicBoolean isForking;
-	
+
 	public AuthenticationType authenticationType;
-	
+
 	public GitBlitWebSession(Request request) {
 		super(request);
 		isForking = new AtomicBoolean();
 		authenticationType = AuthenticationType.CREDENTIALS;
 	}
 
+	@Override
 	public void invalidate() {
 		super.invalidate();
 		user = null;
 	}
-	
+
 	/**
 	 * Cache the requested protected resource pending successful authentication.
-	 * 
+	 *
 	 * @param pageClass
 	 */
 	public void cacheRequest(Class<? extends Page> pageClass) {
@@ -81,14 +82,14 @@
 			bind();
 		}
 	}
-	
+
 	/**
 	 * Continue any cached request.  This is used when a request for a protected
 	 * resource is aborted/redirected pending proper authentication.  Gitblit
 	 * no longer uses Wicket's built-in mechanism for this because of Wicket's
 	 * failure to properly handle parameters with forward-slashes.  This is a
 	 * constant source of headaches with Wicket.
-	 *  
+	 *
 	 * @return false if there is no cached request to process
 	 */
 	public boolean continueRequest() {
@@ -110,7 +111,7 @@
 		}
 		return user.canAdmin();
 	}
-	
+
 	public String getUsername() {
 		return user == null ? "anonymous" : user.username;
 	}
@@ -150,11 +151,11 @@
 		errorMessage = null;
 		return msg;
 	}
-	
+
 	public boolean isForking() {
 		return isForking.get();
 	}
-	
+
 	public void isForking(boolean val) {
 		isForking.set(val);
 	}
diff --git a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
index fb86fb0..2d65d37 100644
--- a/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
+++ b/src/main/java/com/gitblit/wicket/GitblitParamUrlCodingStrategy.java
@@ -31,12 +31,12 @@
 /**
  * Simple subclass of mixed parameter url coding strategy that works around the
  * encoded forward-slash issue that is present in some servlet containers.
- * 
+ *
  * https://issues.apache.org/jira/browse/WICKET-1303
  * http://tomcat.apache.org/security-6.html
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GitblitParamUrlCodingStrategy extends MixedParamUrlCodingStrategy {
 
@@ -44,7 +44,7 @@
 
 	/**
 	 * Construct.
-	 * 
+	 *
 	 * @param <C>
 	 * @param mountPath
 	 *            mount path (not empty)
@@ -60,11 +60,12 @@
 
 	/**
 	 * Url encodes a string that is mean for a URL path (e.g., between slashes)
-	 * 
+	 *
 	 * @param string
 	 *            string to be encoded
 	 * @return encoded string
 	 */
+	@Override
 	protected String urlEncodePathComponent(String string) {
 		char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/');
 		if (altChar != '/') {
@@ -76,10 +77,11 @@
 	/**
 	 * Returns a decoded value of the given value (taken from a URL path
 	 * section)
-	 * 
+	 *
 	 * @param value
 	 * @return Decodes the value
 	 */
+	@Override
 	protected String urlDecodePathComponent(String value) {
 		char altChar = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/');
 		if (altChar != '/') {
@@ -90,7 +92,7 @@
 
 	/**
 	 * Gets the decoded request target.
-	 * 
+	 *
 	 * @param requestParameters
 	 *            the request parameters
 	 * @return the decoded request target
diff --git a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
index c3df1ac..4721f0a 100644
--- a/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
+++ b/src/main/java/com/gitblit/wicket/GitblitRedirectException.java
@@ -26,9 +26,9 @@
  * This exception bypasses the servlet container rewriting relative redirect
  * urls.  The container can and does decode the carefully crafted %2F path
  * separators on a redirect.  :(  Bad, bad servlet container.
- * 
+ *
  * org.eclipse.jetty.server.Response#L447: String path=uri.getDecodedPath();
- * 
+ *
  * @author James Moger
  */
 public class GitblitRedirectException extends AbstractRestartResponseException {
diff --git a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
index f46c51e..0f639c7 100644
--- a/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
+++ b/src/main/java/com/gitblit/wicket/GitblitWicketFilter.java
@@ -32,21 +32,22 @@
 import com.gitblit.utils.StringUtils;
 
 /**
- * 
+ *
  * Customization of the WicketFilter to allow smart browser-side caching of
  * some pages.
- * 
+ *
  * @author James Moger
  *
  */
 public class GitblitWicketFilter extends WicketFilter {
-	
+
 	/**
 	 * Determines the last-modified date of the requested resource.
-	 * 
+	 *
 	 * @param servletRequest
 	 * @return The last modified time stamp
 	 */
+	@Override
 	protected long getLastModified(final HttpServletRequest servletRequest)	{
 		final String pathInfo = getRelativePath(servletRequest);
 		if (Strings.isEmpty(pathInfo))
@@ -55,10 +56,10 @@
 		if (lastModified > -1) {
 			return lastModified;
 		}
-		
+
 		// try to match request against registered CacheControl pages
 		String [] paths = pathInfo.split("/");
-		
+
 		String page = paths[0];
 		String repo = "";
 		String commitId = "";
@@ -68,14 +69,14 @@
 		if (paths.length >= 3) {
 			commitId = paths[2];
 		}
-		
+
 		if (!StringUtils.isEmpty(servletRequest.getParameter("r"))) {
 			repo = servletRequest.getParameter("r");
 		}
 		if (!StringUtils.isEmpty(servletRequest.getParameter("h"))) {
 			commitId = servletRequest.getParameter("h");
 		}
-		
+
 		repo = repo.replace("%2f", "/").replace("%2F", "/").replace(GitBlit.getChar(Keys.web.forwardSlashCharacter, '/'), '/');
 
 		GitBlitWebApp app = (GitBlitWebApp) getWebApplication();
@@ -116,7 +117,7 @@
 					// no commit id, use boot date
 					return bootDate.getTime();
 				} else {
-					// last modified date is the commit date 
+					// last modified date is the commit date
 					Repository r = null;
 					try {
 						// return the timestamp of the associated commit
@@ -138,7 +139,7 @@
 			default:
 				break;
 			}
-		}			
+		}
 
 		return -1;
 	}
diff --git a/src/main/java/com/gitblit/wicket/PageRegistration.java b/src/main/java/com/gitblit/wicket/PageRegistration.java
index b0cb470..1b98f2c 100644
--- a/src/main/java/com/gitblit/wicket/PageRegistration.java
+++ b/src/main/java/com/gitblit/wicket/PageRegistration.java
@@ -26,9 +26,9 @@
 
 /**
  * Represents a page link registration for the topbar.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class PageRegistration implements Serializable {
 	private static final long serialVersionUID = 1L;
@@ -46,7 +46,7 @@
 			PageParameters params) {
 		this(translationKey, pageClass, params, false);
 	}
-	
+
 	public PageRegistration(String translationKey, Class<? extends WebPage> pageClass,
 			PageParameters params, boolean hiddenPhone) {
 		this.translationKey = translationKey;
@@ -57,9 +57,9 @@
 
 	/**
 	 * Represents a page link to a non-Wicket page. Might be external.
-	 * 
+	 *
 	 * @author James Moger
-	 * 
+	 *
 	 */
 	public static class OtherPageLink extends PageRegistration {
 
@@ -71,7 +71,7 @@
 			super(translationKey, null);
 			this.url = url;
 		}
-		
+
 		public OtherPageLink(String translationKey, String url, boolean hiddenPhone) {
 			super(translationKey, null, null, hiddenPhone);
 			this.url = url;
@@ -80,9 +80,9 @@
 
 	/**
 	 * Represents a DropDownMenu for the topbar
-	 * 
+	 *
 	 * @author James Moger
-	 * 
+	 *
 	 */
 	public static class DropDownMenuRegistration extends PageRegistration {
 
@@ -98,9 +98,9 @@
 
 	/**
 	 * A MenuItem for the DropDownMenu.
-	 * 
+	 *
 	 * @author James Moger
-	 * 
+	 *
 	 */
 	public static class DropDownMenuItem implements Serializable {
 
@@ -121,7 +121,7 @@
 
 		/**
 		 * Standard Menu Item constructor.
-		 * 
+		 *
 		 * @param displayText
 		 * @param parameter
 		 * @param value
@@ -132,7 +132,7 @@
 
 		/**
 		 * Standard Menu Item constructor that preserves aggregate parameters.
-		 * 
+		 *
 		 * @param displayText
 		 * @param parameter
 		 * @param value
@@ -219,14 +219,14 @@
 			return displayText;
 		}
 	}
-	
+
 	public static class DropDownToggleItem extends DropDownMenuItem {
-		
+
 		private static final long serialVersionUID = 1L;
 
 		/**
 		 * Toggle Menu Item constructor that preserves aggregate parameters.
-		 * 
+		 *
 		 * @param displayText
 		 * @param parameter
 		 * @param value
diff --git a/src/main/java/com/gitblit/wicket/SessionlessForm.java b/src/main/java/com/gitblit/wicket/SessionlessForm.java
index 484e85e..d228a2e 100644
--- a/src/main/java/com/gitblit/wicket/SessionlessForm.java
+++ b/src/main/java/com/gitblit/wicket/SessionlessForm.java
@@ -35,35 +35,35 @@
  * This class is used to create a stateless form that can POST or GET to a
  * bookmarkable page regardless of the pagemap and even after session expiration
  * or a server restart.
- * 
+ *
  * The trick is to embed "wicket:bookmarkablePage" as a hidden field of the form.
  * Wicket already has logic to extract this parameter when it is trying
  * to determine which page should receive the request.
- * 
+ *
  * The parameters of the containing page can optionally be included as hidden
- * fields in this form.  Note that if a page parameter's name collides with any 
+ * fields in this form.  Note that if a page parameter's name collides with any
  * child's wicket:id in this form then the page parameter is excluded.
- * 
+ *
  * @author James Moger
  *
  */
 public class SessionlessForm<T> extends StatelessForm<T> {
-	
+
 	private static final long serialVersionUID = 1L;
 
 	private static final String HIDDEN_DIV_START = "<div style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">";
-	
+
 	private final Class<? extends BasePage> pageClass;
-	
+
 	private final PageParameters pageParameters;
-	
+
 	private final Logger log = LoggerFactory.getLogger(SessionlessForm.class);
 
 	/**
 	 * Sessionless forms must have a bookmarkable page class.  A bookmarkable
 	 * page is defined as a page that has only a default and/or a PageParameter
 	 * constructor.
-	 * 
+	 *
 	 * @param id
 	 * @param bookmarkablePageClass
 	 */
@@ -75,7 +75,7 @@
 	 * Sessionless forms must have a bookmarkable page class.  A bookmarkable
 	 * page is defined as a page that has only a default and/or a PageParameter
 	 * constructor.
-	 * 
+	 *
 	 * @param id
 	 * @param bookmarkablePageClass
 	 * @param pageParameters
@@ -87,12 +87,12 @@
 		this.pageParameters = pageParameters;
 	}
 
-	
+
 	/**
 	 * Append an additional hidden input tag that forces Wicket to correctly
 	 * determine the destination page class even after a session expiration or
 	 * a server restart.
-	 * 
+	 *
 	 * @param markupStream
 	 *            The markup stream
 	 * @param openTag
@@ -133,10 +133,10 @@
 		getResponse().write(buffer);
 		super.onComponentTagBody(markupStream, openTag);
 	}
-	
+
 	/**
 	 * Take URL-encoded query string value, unencode it and return HTML-escaped version
-	 * 
+	 *
 	 * @param s
 	 *            value to reencode
 	 * @return reencoded value
diff --git a/src/main/java/com/gitblit/wicket/StringChoiceRenderer.java b/src/main/java/com/gitblit/wicket/StringChoiceRenderer.java
index 58ed479..cd26965 100644
--- a/src/main/java/com/gitblit/wicket/StringChoiceRenderer.java
+++ b/src/main/java/com/gitblit/wicket/StringChoiceRenderer.java
@@ -20,14 +20,14 @@
 /**
  * Choice renderer for a palette or list of string values.  This renderer
  * controls the id value of each option such that palettes are case insensitive.
- * 
+ *
  * @author James Moger
  *
  */
 public class StringChoiceRenderer extends ChoiceRenderer<String> {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public StringChoiceRenderer() {
 		super("", "");
 	}
diff --git a/src/main/java/com/gitblit/wicket/WicketUtils.java b/src/main/java/com/gitblit/wicket/WicketUtils.java
index 48bcbcc..a2522ef 100644
--- a/src/main/java/com/gitblit/wicket/WicketUtils.java
+++ b/src/main/java/com/gitblit/wicket/WicketUtils.java
@@ -115,7 +115,7 @@
 		default:
 			setCssClass(container, "badge");
 			break;
-		}	
+		}
 	}
 
 	public static void setAlternatingBackground(Component c, int i) {
@@ -232,17 +232,17 @@
 
 	public static Label newIcon(String wicketId, String css) {
 		Label lbl = new Label(wicketId);
-		setCssClass(lbl, css);		
+		setCssClass(lbl, css);
 		return lbl;
 	}
-	
+
 	public static Label newBlankIcon(String wicketId) {
 		Label lbl = new Label(wicketId);
 		setCssClass(lbl, "");
 		lbl.setRenderBodyOnly(true);
 		return lbl;
 	}
-	
+
 	public static ContextRelativeResource getResource(String file) {
 		return new ContextRelativeResource(file);
 	}
@@ -257,6 +257,7 @@
 		return new HeaderContributor(new IHeaderContributor() {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void renderHead(IHeaderResponse response) {
 				String contentType = "application/rss+xml";
 
@@ -509,7 +510,7 @@
 	public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils) {
 		return createDateLabel(wicketId, date, timeZone, timeUtils, true);
 	}
-	
+
 	public static Label createDateLabel(String wicketId, Date date, TimeZone timeZone, TimeUtils timeUtils, boolean setCss) {
 		String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy");
 		DateFormat df = new SimpleDateFormat(format);
@@ -642,6 +643,7 @@
 		IChartData data = new AbstractChartData(max) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public double[][] getData() {
 				return new double[][] { commits, tags };
 			}
@@ -677,6 +679,7 @@
 		IChartData data = new AbstractChartData(max) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public double[][] getData() {
 				return new double[][] { x, y };
 			}
diff --git a/src/main/java/com/gitblit/wicket/charting/GoogleChart.java b/src/main/java/com/gitblit/wicket/charting/GoogleChart.java
index 334b870..a718835 100644
--- a/src/main/java/com/gitblit/wicket/charting/GoogleChart.java
+++ b/src/main/java/com/gitblit/wicket/charting/GoogleChart.java
@@ -23,9 +23,9 @@
 
 /**
  * Abstract parent class for Google Charts built with the Visualization API.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class GoogleChart implements Serializable {
 
@@ -57,7 +57,7 @@
 	public void setHeight(int height) {
 		this.height = height;
 	}
-	
+
 	public void setShowLegend(boolean val) {
 		this.showLegend = val;
 	}
diff --git a/src/main/java/com/gitblit/wicket/charting/GoogleCharts.java b/src/main/java/com/gitblit/wicket/charting/GoogleCharts.java
index 77c522b..8b72793 100644
--- a/src/main/java/com/gitblit/wicket/charting/GoogleCharts.java
+++ b/src/main/java/com/gitblit/wicket/charting/GoogleCharts.java
@@ -13,7 +13,6 @@
  See the License for the specific language governing permissions and
  limitations under the License.
  */
-
 package com.gitblit.wicket.charting;
 
 import java.util.ArrayList;
@@ -26,9 +25,9 @@
  * The Google Visualization API provides interactive JavaScript based charts and
  * graphs. This class implements the JavaScript header necessary to display
  * complete graphs and charts.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GoogleCharts implements IHeaderContributor {
 
diff --git a/src/main/java/com/gitblit/wicket/charting/GoogleLineChart.java b/src/main/java/com/gitblit/wicket/charting/GoogleLineChart.java
index fc0bf83..ca89477 100644
--- a/src/main/java/com/gitblit/wicket/charting/GoogleLineChart.java
+++ b/src/main/java/com/gitblit/wicket/charting/GoogleLineChart.java
@@ -19,9 +19,9 @@
 
 /**
  * Builds an interactive line chart using the Visualization API.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GoogleLineChart extends GoogleChart {
 
diff --git a/src/main/java/com/gitblit/wicket/charting/GooglePieChart.java b/src/main/java/com/gitblit/wicket/charting/GooglePieChart.java
index 1f5ae70..546a2a9 100644
--- a/src/main/java/com/gitblit/wicket/charting/GooglePieChart.java
+++ b/src/main/java/com/gitblit/wicket/charting/GooglePieChart.java
@@ -24,9 +24,9 @@
 
 /**
  * Builds an interactive pie chart using the Visualization API.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GooglePieChart extends GoogleChart {
 
@@ -47,15 +47,15 @@
 
 		Collections.sort(values);
 		List<ChartValue> list = new ArrayList<ChartValue>();
-		
+
 		int maxSlices = 10;
-		
+
 		if (values.size() > maxSlices) {
 			list.addAll(values.subList(0,  maxSlices));
 		} else {
 			list.addAll(values);
 		}
-		
+
 		StringBuilder colors = new StringBuilder("colors:[");
 		for (int i = 0; i < list.size(); i++) {
 			ChartValue value = list.get(i);
diff --git a/src/main/java/com/gitblit/wicket/charting/SecureChart.java b/src/main/java/com/gitblit/wicket/charting/SecureChart.java
index 60dae4b..aba25c4 100644
--- a/src/main/java/com/gitblit/wicket/charting/SecureChart.java
+++ b/src/main/java/com/gitblit/wicket/charting/SecureChart.java
@@ -43,7 +43,7 @@
 /**
  * This is a fork of org.wicketstuff.googlecharts.Chart whose only purpose
  * is to build https urls instead of http urls.
- * 
+ *
  * @author Daniel Spiewak
  * @author James Moger
  */
@@ -140,7 +140,7 @@
 
         url.append(param).append('=').append(value);
     }
-    
+
     private CharSequence convert(ChartDataEncoding encoding, double value, double max) {
     	switch (encoding) {
     	case TEXT:
diff --git a/src/main/java/com/gitblit/wicket/charting/SecureChartDataEncoding.java b/src/main/java/com/gitblit/wicket/charting/SecureChartDataEncoding.java
index 90a0596..c5ac460 100644
--- a/src/main/java/com/gitblit/wicket/charting/SecureChartDataEncoding.java
+++ b/src/main/java/com/gitblit/wicket/charting/SecureChartDataEncoding.java
@@ -19,14 +19,15 @@
 /**
  * This class is a pristine fork of org.wicketstuff.googlecharts.ChartDataEncoding
  * to bring the package-protected convert methods to SecureChart.
- * 
+ *
  * @author Daniel Spiewak
  */
 public enum SecureChartDataEncoding {
 
     SIMPLE("s", "", ",") {
 
-        CharSequence convert(double value, double max) {
+        @Override
+		CharSequence convert(double value, double max) {
             if (value < 0) {
                 return "_";
             }
@@ -42,7 +43,8 @@
     },
     TEXT("t", ",", "|") {
 
-    	CharSequence convert(double value, double max) {
+    	@Override
+		CharSequence convert(double value, double max) {
             if (value < 0) {
                 value = -1;
             }
@@ -56,7 +58,8 @@
     },
     EXTENDED("e", "", ",") {
 
-    	CharSequence convert(double value, double max) {
+    	@Override
+		CharSequence convert(double value, double max) {
             if (value < 0) {
                 return "__";
             }
diff --git a/src/main/java/com/gitblit/wicket/freemarker/Freemarker.java b/src/main/java/com/gitblit/wicket/freemarker/Freemarker.java
index ad7aa96..a9b827a 100644
--- a/src/main/java/com/gitblit/wicket/freemarker/Freemarker.java
+++ b/src/main/java/com/gitblit/wicket/freemarker/Freemarker.java
@@ -27,18 +27,18 @@
 public class Freemarker {
 
 	private static final Configuration fm;
-	
+
 	static {
 		fm = new Configuration();
 		fm.setObjectWrapper(new DefaultObjectWrapper());
 		fm.setOutputEncoding("UTF-8");
 		fm.setClassForTemplateLoading(Freemarker.class, "templates");
 	}
-	
+
 	public static Template getTemplate(String name) throws IOException {
 		return fm.getTemplate(name);
 	}
-	
+
 	public static void evaluate(Template template, Map<String, Object> values, Writer out) throws TemplateException, IOException {
 		template.process(values, out);
 	}
diff --git a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
index d57c3a0..aaf1a13 100644
--- a/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
+++ b/src/main/java/com/gitblit/wicket/freemarker/FreemarkerPanel.java
@@ -43,9 +43,9 @@
  * snippet injector for something like a CMS.  There are some cases where Wicket
  * is not flexible enough to generate content, especially when you need to generate
  * hybrid HTML/JS content outside the scope of Wicket.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 @SuppressWarnings("unchecked")
 public class FreemarkerPanel extends Panel
@@ -62,10 +62,10 @@
 	private transient String stackTraceAsString;
 	private transient String evaluatedTemplate;
 
-	
+
 	/**
 	 * Construct.
-	 * 
+	 *
 	 * @param id
 	 *            Component id
 	 * @param template
@@ -77,10 +77,10 @@
 	{
 		this(id, template, Model.ofMap(values));
 	}
-	
+
 	/**
 	 * Construct.
-	 * 
+	 *
 	 * @param id
 	 *            Component id
 	 * @param templateResource
@@ -96,7 +96,7 @@
 
 	/**
 	 * Gets the Freemarker template.
-	 * 
+	 *
 	 * @return the Freemarker template
 	 */
 	private Template getTemplate()
@@ -155,7 +155,7 @@
 
 	/**
 	 * Either print or rethrow the throwable.
-	 * 
+	 *
 	 * @param exception
 	 *            the cause
 	 * @param markupStream
@@ -179,7 +179,7 @@
 
 	/**
 	 * Gets whether to escape HTML characters.
-	 * 
+	 *
 	 * @return whether to escape HTML characters. The default value is false.
 	 */
 	public void setEscapeHtml(boolean value)
@@ -189,7 +189,7 @@
 
 	/**
 	 * Evaluates the template and returns the result.
-	 * 
+	 *
 	 * @param templateReader
 	 *            used to read the template
 	 * @return the result of evaluating the velocity template
@@ -237,7 +237,7 @@
 
 	/**
 	 * Gets whether to parse the resulting Wicket markup.
-	 * 
+	 *
 	 * @return whether to parse the resulting Wicket markup. The default is false.
 	 */
 	public void setParseGeneratedMarkup(boolean value)
@@ -256,7 +256,7 @@
 	 * want them to be able to have them correct them while the rest of the application keeps on
 	 * working.
 	 * </p>
-	 * 
+	 *
 	 * @return Whether any Freemarker exceptions should be thrown or trapped. The default is false.
 	 */
 	public void setThrowFreemarkerExceptions(boolean value)
@@ -268,6 +268,7 @@
 	 * @see org.apache.wicket.markup.IMarkupResourceStreamProvider#getMarkupResourceStream(org.apache
 	 *      .wicket.MarkupContainer, java.lang.Class)
 	 */
+	@Override
 	public final IResourceStream getMarkupResourceStream(MarkupContainer container,
 			Class< ? > containerClass)
 	{
@@ -289,6 +290,7 @@
 	 * @see org.apache.wicket.markup.IMarkupCacheKeyProvider#getCacheKey(org.apache.wicket.
 	 *      MarkupContainer, java.lang.Class)
 	 */
+	@Override
 	public final String getCacheKey(MarkupContainer container, Class< ? > containerClass)
 	{
 		// don't cache the evaluated template
diff --git a/src/main/java/com/gitblit/wicket/ng/NgController.java b/src/main/java/com/gitblit/wicket/ng/NgController.java
index 628c0b6..19e419a 100644
--- a/src/main/java/com/gitblit/wicket/ng/NgController.java
+++ b/src/main/java/com/gitblit/wicket/ng/NgController.java
@@ -13,7 +13,6 @@
  See the License for the specific language governing permissions and
  limitations under the License.
  */
-
 package com.gitblit.wicket.ng;
 
 import java.text.MessageFormat;
@@ -31,23 +30,23 @@
  * Simple AngularJS data controller which injects scoped objects as static,
  * embedded JSON within the generated page.  This allows use of AngularJS
  * client-side databinding (magic) with server-generated pages.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class NgController implements IHeaderContributor {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	final String name;
-	
+
 	final Map<String, Object> variables;
-	
+
 	public NgController(String name) {
 		this.name = name;
 		this.variables = new HashMap<String, Object>();
 	}
-		
+
 	public void addVariable(String name, Object o) {
 		variables.put(name,  o);
 	}
@@ -69,7 +68,7 @@
 			line(sb, MessageFormat.format("\t$scope.{0} = {1};", var, json));
 		}
 		line(sb, "}");
-		
+
 		response.renderJavascript(sb.toString(), null);
 	}
 
diff --git a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
index a436813..7e347e1 100644
--- a/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ActivityPage.java
@@ -51,9 +51,9 @@
 /**
  * Activity Page shows a list of recent commits across all visible Gitblit
  * repositories.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 
 @CacheControl(LastModified.ACTIVITY)
@@ -72,7 +72,7 @@
 
 		// determine repositories to view and retrieve the activity
 		List<RepositoryModel> models = getRepositories(params);
-		List<Activity> recentActivity = ActivityUtils.getRecentActivity(models, 
+		List<Activity> recentActivity = ActivityUtils.getRecentActivity(models,
 				daysBack, objectId, getTimeZone());
 
 		String headerPattern;
@@ -91,7 +91,7 @@
 				headerPattern = getString("gb.recentActivityStats");
 			}
 		}
-		
+
 		if (recentActivity.size() == 0) {
 			// no activity, skip graphs and activity panel
 			add(new Label("subheader", MessageFormat.format(headerPattern,
@@ -157,7 +157,7 @@
 	/**
 	 * Creates the daily activity line chart, the active repositories pie chart,
 	 * and the active authors pie chart
-	 * 
+	 *
 	 * @param recentActivity
 	 * @return
 	 */
diff --git a/src/main/java/com/gitblit/wicket/pages/BasePage.java b/src/main/java/com/gitblit/wicket/pages/BasePage.java
index 2bab118..cb9de9f 100644
--- a/src/main/java/com/gitblit/wicket/pages/BasePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BasePage.java
@@ -67,7 +67,7 @@
 public abstract class BasePage extends SessionPage {
 
 	private final Logger logger;
-	
+
 	private transient TimeUtils timeUtils;
 
 	public BasePage() {
@@ -81,24 +81,24 @@
 		logger = LoggerFactory.getLogger(getClass());
 		customizeHeader();
 	}
-	
+
 	private void customizeHeader() {
 		if (GitBlit.getBoolean(Keys.web.useResponsiveLayout, true)) {
 			add(CSSPackageResource.getHeaderContribution("bootstrap/css/bootstrap-responsive.css"));
 		}
 	}
-	
+
 	protected String getLanguageCode() {
 		return GitBlitWebSession.get().getLocale().getLanguage();
 	}
-	
+
 	protected String getCountryCode() {
 		return GitBlitWebSession.get().getLocale().getCountry().toLowerCase();
 	}
-	
+
 	protected TimeUtils getTimeUtils() {
 		if (timeUtils == null) {
-			ResourceBundle bundle;		
+			ResourceBundle bundle;
 			try {
 				bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp", GitBlitWebSession.get().getLocale());
 			} catch (Throwable t) {
@@ -108,7 +108,7 @@
 		}
 		return timeUtils;
 	}
-	
+
 	@Override
 	protected void onBeforeRender() {
 		if (GitBlit.isDebugMode()) {
@@ -126,7 +126,7 @@
 		}
 		super.onAfterRender();
 	}
-		
+
 	@Override
 	protected void setHeaders(WebResponse response)	{
 		int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0);
@@ -140,11 +140,11 @@
 			super.setHeaders(response);
 		}
 	}
-	
+
 	/**
 	 * Sets the last-modified header date, if appropriate, for this page.  The
 	 * date used is determined by the CacheControl annotation.
-	 * 
+	 *
 	 */
 	protected void setLastModified() {
 		if (getClass().isAnnotationPresent(CacheControl.class)) {
@@ -164,24 +164,24 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Sets the last-modified header field and the expires field.
-	 * 
+	 *
 	 * @param when
 	 */
 	protected final void setLastModified(Date when) {
 		if (when == null) {
 			return;
 		}
-		
+
 		if (when.before(GitBlit.getBootDate())) {
 			// last-modified can not be before the Gitblit boot date
 			// this helps ensure that pages are properly refreshed after a
 			// server config change
 			when = GitBlit.getBootDate();
 		}
-		
+
 		int expires = GitBlit.getInteger(Keys.web.pageCacheExpires, 0);
 		WebResponse response = (WebResponse) getResponse();
 		response.setLastModifiedTime(Time.valueOf(when));
@@ -232,7 +232,7 @@
 		}
 		return map;
 	}
-	
+
 	protected Map<AccessPermission, String> getAccessPermissions() {
 		Map<AccessPermission, String> map = new LinkedHashMap<AccessPermission, String>();
 		for (AccessPermission type : AccessPermission.values()) {
@@ -265,7 +265,7 @@
 		}
 		return map;
 	}
-	
+
 	protected Map<FederationStrategy, String> getFederationTypes() {
 		Map<FederationStrategy, String> map = new LinkedHashMap<FederationStrategy, String>();
 		for (FederationStrategy type : FederationStrategy.values()) {
@@ -283,7 +283,7 @@
 		}
 		return map;
 	}
-	
+
 	protected Map<AuthorizationControl, String> getAuthorizationControls() {
 		Map<AuthorizationControl, String> map = new LinkedHashMap<AuthorizationControl, String>();
 		for (AuthorizationControl type : AuthorizationControl.values()) {
@@ -309,13 +309,13 @@
 		HttpServletRequest req = servletWebRequest.getHttpServletRequest();
 		return req.getServerName();
 	}
-	
+
 	protected List<ProjectModel> getProjectModels() {
 		final UserModel user = GitBlitWebSession.get().getUser();
 		List<ProjectModel> projects = GitBlit.self().getProjectModels(user, true);
 		return projects;
 	}
-	
+
 	protected List<ProjectModel> getProjects(PageParameters params) {
 		if (params == null) {
 			return getProjectModels();
@@ -400,7 +400,7 @@
 	public void warn(String message, Throwable t) {
 		logger.warn(message, t);
 	}
-	
+
 	public void error(String message, boolean redirect) {
 		error(message, null, redirect ? getApplication().getHomePage() : null);
 	}
@@ -408,11 +408,11 @@
 	public void error(String message, Throwable t, boolean redirect) {
 		error(message, t, getApplication().getHomePage());
 	}
-	
+
 	public void error(String message, Throwable t, Class<? extends Page> toPage) {
 		error(message, t, toPage, null);
 	}
-	
+
 	public void error(String message, Throwable t, Class<? extends Page> toPage, PageParameters params) {
 		if (t == null) {
 			logger.error(message  + " for " + GitBlitWebSession.get().getUsername());
diff --git a/src/main/java/com/gitblit/wicket/pages/BlamePage.java b/src/main/java/com/gitblit/wicket/pages/BlamePage.java
index 53bd233..9f00d21 100644
--- a/src/main/java/com/gitblit/wicket/pages/BlamePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BlamePage.java
@@ -75,7 +75,7 @@
 				"EEEE, MMMM d, yyyy HH:mm Z");
 		final DateFormat df = new SimpleDateFormat(format);
 		df.setTimeZone(getTimeZone());
-		
+
 		PathModel pathModel = null;
 		List<PathModel> paths = JGitUtils.getFilesInPath(getRepository(), StringUtils.getRootPath(blobPath), commit);
 		for (PathModel path : paths) {
@@ -84,15 +84,15 @@
 				break;
 			}
 		}
-		
+
 		if (pathModel == null) {
 			add(new Label("annotation").setVisible(false));
 			add(new Label("missingBlob", missingBlob(blobPath, commit)).setEscapeModelStrings(false));
 			return;
 		}
-		
+
 		add(new Label("missingBlob").setVisible(false));
-		
+
 		List<AnnotatedLine> lines = DiffUtils.blame(getRepository(), blobPath, objectId);
 		ListDataProvider<AnnotatedLine> blameDp = new ListDataProvider<AnnotatedLine>(lines);
 		DataView<AnnotatedLine> blameView = new DataView<AnnotatedLine>("annotation", blameDp) {
@@ -102,6 +102,7 @@
 			private boolean showInitials = true;
 			private String zeroId = ObjectId.zeroId().getName();
 
+			@Override
 			public void populateItem(final Item<AnnotatedLine> item) {
 				AnnotatedLine entry = item.getModelObject();
 				item.add(new Label("line", "" + entry.lineNumber));
@@ -157,12 +158,12 @@
 	protected String getPageName() {
 		return getString("gb.blame");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return TreePage.class;
 	}
-	
+
 	protected String missingBlob(String blobPath, RevCommit commit) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("<div class=\"alert alert-error\">");
diff --git a/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java b/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java
index f8f8818..27678ec 100644
--- a/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BlobDiffPage.java
@@ -80,7 +80,7 @@
 	protected String getPageName() {
 		return getString("gb.diff");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return TreePage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/BlobPage.java b/src/main/java/com/gitblit/wicket/pages/BlobPage.java
index b9f6430..0c93d48 100644
--- a/src/main/java/com/gitblit/wicket/pages/BlobPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/BlobPage.java
@@ -33,9 +33,9 @@
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.ExternalImage;
 import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.panels.CommitHeaderPanel;
 import com.gitblit.wicket.panels.PathBreadcrumbsPanel;
 
@@ -50,7 +50,7 @@
 		Repository r = getRepository();
 		final String blobPath = WicketUtils.getPath(params);
 		String [] encodings = GitBlit.getEncodings();
-		
+
 		if (StringUtils.isEmpty(blobPath)) {
 			// blob by objectid
 
@@ -153,7 +153,7 @@
 			}
 		}
 	}
-	
+
 	protected String missingBlob(String blobPath, RevCommit commit) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("<div class=\"alert alert-error\">");
@@ -165,11 +165,11 @@
 
 	protected String generateSourceView(String source, String extension, boolean prettyPrint) {
 		String [] lines = source.split("\n");
-		
+
 		StringBuilder sb = new StringBuilder();
 		sb.append("<!-- start blob table -->");
 		sb.append("<table width=\"100%\"><tbody><tr>");
-		
+
 		// nums column
 		sb.append("<!-- start nums column -->");
 		sb.append("<td id=\"nums\">");
@@ -181,7 +181,7 @@
 		sb.append("</pre>");
 		sb.append("<!-- end nums column -->");
 		sb.append("</td>");
-		
+
 		sb.append("<!-- start lines column -->");
 		sb.append("<td id=\"lines\">");
 		sb.append("<div class=\"sourceview\">");
@@ -191,9 +191,9 @@
 			sb.append("<pre class=\"plainprint\">");
 		}
 		lines = StringUtils.escapeForHtml(source, true).split("\n");
-		
+
 		sb.append("<table width=\"100%\"><tbody>");
-		
+
 		String linePattern = "<tr class=\"{0}\"><td><div><span class=\"line\">{1}</span></div>\r</tr>";
 		for (int i = 0; i < lines.length; i++) {
 			String line = lines[i].replace('\r', ' ');
@@ -208,10 +208,10 @@
 		sb.append("</div>");
 		sb.append("</td>");
 		sb.append("<!-- end lines column -->");
-		
+
 		sb.append("</tr></tbody></table>");
 		sb.append("<!-- end blob table -->");
-		
+
 		return sb.toString();
 	}
 
@@ -219,7 +219,7 @@
 	protected String getPageName() {
 		return getString("gb.view");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return TreePage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java b/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java
index c401420..302de0d 100644
--- a/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ChangePasswordPage.java
@@ -50,13 +50,13 @@
 			// no authentication enabled
 			throw new RestartResponseException(getApplication().getHomePage());
 		}
-		
-		UserModel user = GitBlitWebSession.get().getUser();		
+
+		UserModel user = GitBlitWebSession.get().getUser();
 		if (!GitBlit.self().supportsCredentialChanges(user)) {
 			error(MessageFormat.format(getString("gb.userServiceDoesNotPermitPasswordChanges"),
 					GitBlit.getString(Keys.realm.userService, "${baseFolder}/users.conf")), true);
 		}
-		
+
 		setupPage(getString("gb.changePassword"), user.username);
 
 		StatelessForm<Void> form = new StatelessForm<Void>("passwordForm") {
diff --git a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
index 3bd759d..7ad6615 100644
--- a/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/CommitDiffPage.java
@@ -99,6 +99,7 @@
 		DataView<GitNote> notesView = new DataView<GitNote>("notes", notesDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<GitNote> item) {
 				GitNote entry = item.getModelObject();
 				item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef)));
@@ -112,7 +113,7 @@
 			}
 		};
 		add(notesView.setVisible(notes.size() > 0));
-		
+
 		// changed paths list
 		add(new CommitLegendPanel("commitLegend", diff.stat.paths));
 		ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(diff.stat.paths);
@@ -120,6 +121,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<PathChangeModel> item) {
 				final PathChangeModel entry = item.getModelObject();
 				Label changeType = new Label("changeType", "");
@@ -176,7 +178,7 @@
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
 							.setEnabled(!entry.changeType.equals(ChangeType.ADD)));
 				}
-				
+
 				WicketUtils.setAlternatingBackground(item, counter);
 				counter++;
 			}
@@ -189,7 +191,7 @@
 	protected String getPageName() {
 		return getString("gb.commitdiff");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return LogPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/CommitPage.java b/src/main/java/com/gitblit/wicket/pages/CommitPage.java
index 8e001bc..517bf78 100644
--- a/src/main/java/com/gitblit/wicket/pages/CommitPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/CommitPage.java
@@ -56,7 +56,7 @@
 
 		Repository r = getRepository();
 		RevCommit c = getCommit();
-		
+
 		List<String> parents = new ArrayList<String>();
 		if (c.getParentCount() > 0) {
 			for (RevCommit parent : c.getParents()) {
@@ -86,7 +86,7 @@
 		add(createPersonPanel("commitAuthor", c.getAuthorIdent(), Constants.SearchType.AUTHOR));
 		add(WicketUtils.createTimestampLabel("commitAuthorDate", c.getAuthorIdent().getWhen(),
 				getTimeZone(), getTimeUtils()));
-		
+
 		// committer
 		add(createPersonPanel("commitCommitter", c.getCommitterIdent(), Constants.SearchType.COMMITTER));
 		add(WicketUtils.createTimestampLabel("commitCommitterDate",
@@ -98,7 +98,7 @@
 				newCommitParameter()));
 		add(new BookmarkablePageLink<Void>("treeLink", TreePage.class, newCommitParameter()));
 		final String baseUrl = WicketUtils.getGitblitURL(getRequest());
-		
+
 		add(new CompressedDownloadsPanel("compressedLinks", baseUrl, repositoryName, objectId, null));
 
 		// Parent Commits
@@ -106,6 +106,7 @@
 		DataView<String> parentsView = new DataView<String>("commitParents", parentsDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<String> item) {
 				String entry = item.getModelObject();
 				item.add(new LinkPanel("commitParent", "list", entry, CommitPage.class,
@@ -126,6 +127,7 @@
 		DataView<GitNote> notesView = new DataView<GitNote>("notes", notesDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<GitNote> item) {
 				GitNote entry = item.getModelObject();
 				item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef)));
@@ -142,7 +144,7 @@
 
 		// changed paths list
 		List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, c);
-		
+
 		// add commit diffstat
 		int insertions = 0;
 		int deletions = 0;
@@ -151,13 +153,14 @@
 			deletions += pcm.deletions;
 		}
 		add(new DiffStatPanel("diffStat", insertions, deletions));
-		
+
 		add(new CommitLegendPanel("commitLegend", paths));
 		ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(paths);
 		DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<PathChangeModel> item) {
 				final PathChangeModel entry = item.getModelObject();
 				Label changeType = new Label("changeType", "");
@@ -179,7 +182,7 @@
 					SubmoduleModel submodule = getSubmodule(entry.path);
 					submodulePath = submodule.gitblitPath;
 					hasSubmodule = submodule.hasSubmodule;
-					
+
 					item.add(new LinkPanel("pathName", "list", entry.path + " @ " +
 							getShortObjectId(submoduleId), TreePage.class,
 							WicketUtils.newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule));
@@ -195,10 +198,10 @@
 							WicketUtils
 									.newPathParameter(repositoryName, entry.commitId, path)));
 				}
-				
+
 				// quick links
 				if (entry.isSubmodule()) {
-					// submodule					
+					// submodule
 					item.add(new BookmarkablePageLink<Void>("diff", BlobDiffPage.class, WicketUtils
 							.newPathParameter(repositoryName, entry.commitId, entry.path))
 							.setEnabled(!entry.changeType.equals(ChangeType.ADD)));
@@ -237,7 +240,7 @@
 	protected String getPageName() {
 		return getString("gb.commit");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return LogPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/ComparePage.java b/src/main/java/com/gitblit/wicket/pages/ComparePage.java
index 1efb9b6..25b5f5c 100644
--- a/src/main/java/com/gitblit/wicket/pages/ComparePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ComparePage.java
@@ -55,7 +55,7 @@
 
 /**
  * The compare page allows you to compare two branches, tags, or hash ids.
- * 
+ *
  * @author James Moger
  *
  */
@@ -71,7 +71,7 @@
 		super(params);
 		Repository r = getRepository();
 		RepositoryModel repository = getRepositoryModel();
-		
+
 		if (StringUtils.isEmpty(objectId)) {
 			// seleciton form
 			add(new Label("comparison").setVisible(false));
@@ -79,30 +79,30 @@
 			// active comparison
 			Fragment comparison = new Fragment("comparison", "comparisonFragment", this);
 			add(comparison);
-			
+
 			RevCommit fromCommit;
 			RevCommit toCommit;
-			
+
 			String[] parts = objectId.split("\\.\\.");
 			if (parts[0].startsWith("refs/") && parts[1].startsWith("refs/")) {
 				// set the ref models
 				fromRefId.setObject(parts[0]);
 				toRefId.setObject(parts[1]);
-				
+
 				fromCommit = getCommit(r, fromRefId.getObject());
 				toCommit = getCommit(r, toRefId.getObject());
 			} else {
 				// set the id models
 				fromCommitId.setObject(parts[0]);
 				toCommitId.setObject(parts[1]);
-				
+
 				fromCommit = getCommit(r, fromCommitId.getObject());
 				toCommit = getCommit(r, toCommitId.getObject());
 			}
 
 			// prepare submodules
 			getSubmodules(toCommit);
-			
+
 			final String startId = fromCommit.getId().getName();
 			final String endId = toCommit.getId().getName();
 
@@ -135,6 +135,7 @@
 				private static final long serialVersionUID = 1L;
 				int counter;
 
+				@Override
 				public void populateItem(final Item<PathChangeModel> item) {
 					final PathChangeModel entry = item.getModelObject();
 					Label changeType = new Label("changeType", "");
@@ -209,14 +210,14 @@
 			public void onSubmit() {
 				String from = ComparePage.this.fromRefId.getObject();
 				String to = ComparePage.this.toRefId.getObject();
-				
+
 				PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
 				String relativeUrl = urlFor(ComparePage.class, params).toString();
 				String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
 				getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl));
 			}
 		};
-		
+
 		List<String> refs = new ArrayList<String>();
 		for (RefModel ref : JGitUtils.getLocalBranches(r, true, -1)) {
 			refs.add(ref.getName());
@@ -232,7 +233,7 @@
 		refsForm.add(new DropDownChoice<String>("fromRef", fromRefId, refs).setEnabled(refs.size() > 0));
 		refsForm.add(new DropDownChoice<String>("toRef", toRefId, refs).setEnabled(refs.size() > 0));
 		add(refsForm);
-		
+
 		//
 		// manual ids form
 		//
@@ -244,23 +245,23 @@
 			public void onSubmit() {
 				String from = ComparePage.this.fromCommitId.getObject();
 				String to = ComparePage.this.toCommitId.getObject();
-				
+
 				PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
 				String relativeUrl = urlFor(ComparePage.class, params).toString();
 				String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl);
 				getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl));
 			}
 		};
-		
+
 		TextField<String> fromIdField = new TextField<String>("fromId", fromCommitId);
 		WicketUtils.setInputPlaceholder(fromIdField, getString("gb.from") + "...");
 		idsForm.add(fromIdField);
-		
+
 		TextField<String> toIdField = new TextField<String>("toId", toCommitId);
 		WicketUtils.setInputPlaceholder(toIdField, getString("gb.to") + "...");
 		idsForm.add(toIdField);
 		add(idsForm);
-		
+
 		r.close();
 	}
 
@@ -268,7 +269,7 @@
 	protected String getPageName() {
 		return getString("gb.compare");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return ComparePage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
index 18add50..5c72b8b 100644
--- a/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/DashboardPage.java
@@ -75,7 +75,7 @@
 		c.add(Calendar.DATE, -1*daysBack);
 		Date minimumDate = c.getTime();
 		TimeZone timezone = getTimeZone();
-		
+
 		// create daily commit digest feed
 		List<DailyLogEntry> digests = new ArrayList<DailyLogEntry>();
 		for (RepositoryModel model : repositories) {
@@ -89,7 +89,7 @@
 				repository.close();
 			}
 		}
-		
+
 		Fragment activityFragment = new Fragment("activity", "activityFragment", this);
 		add(activityFragment);
 		activityFragment.add(new Label("feedTitle", feedTitle));
@@ -118,7 +118,7 @@
 			DigestsPanel digestsPanel = new DigestsPanel("digests", digests);
 			activityFragment.add(digestsPanel);
 		}
-		
+
 		// add the nifty charts
 		if (!ArrayUtils.isEmpty(digests)) {
 			// aggregate author exclusions
@@ -140,7 +140,7 @@
 			activityFragment.add(new Label("feedheader").setVisible(false));
 		}
 	}
-	
+
 	@Override
 	protected void addDropDownMenus(List<PageRegistration> pages) {
 		PageParameters params = getPageParameters();
@@ -163,7 +163,7 @@
 	/**
 	 * Creates the daily activity line chart, the active repositories pie chart,
 	 * and the active authors pie chart
-	 * 
+	 *
 	 * @param recentChanges
 	 * @param authorExclusions
 	 * @param daysBack
@@ -183,7 +183,7 @@
 				repositoryMetrics.put(repository, new Metric(repository));
 			}
 			repositoryMetrics.get(repository).count += 1;
-			
+
 			for (RepositoryCommit commit : change.getCommits()) {
 				totalCommits++;
 				String author = StringUtils.removeNewlines(commit.getAuthorIdent().getName());
@@ -197,7 +197,7 @@
 				}
 			}
 		}
-		
+
 		String headerPattern;
 		if (daysBack == 1) {
 			// today
@@ -239,7 +239,7 @@
 			chart.setShowLegend(false);
 			charts.addChart(chart);
 
-			add(new HeaderContributor(charts));		
+			add(new HeaderContributor(charts));
 			frag.add(new Fragment("charts", "chartsFragment", this));
 		} else {
 			frag.add(new Label("charts").setVisible(false));
diff --git a/src/main/java/com/gitblit/wicket/pages/DocsPage.java b/src/main/java/com/gitblit/wicket/pages/DocsPage.java
index 9330316..eea9595 100644
--- a/src/main/java/com/gitblit/wicket/pages/DocsPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/DocsPage.java
@@ -31,8 +31,8 @@
 import com.gitblit.utils.ByteFormat;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.LinkPanel;
 
 @CacheControl(LastModified.REPOSITORY)
@@ -55,6 +55,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<PathModel> item) {
 				PathModel entry = item.getModelObject();
 				item.add(WicketUtils.newImage("docIcon", "file_world_16x16.png"));
diff --git a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java
index f2c47f2..f92a91f 100644
--- a/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/EditRepositoryPage.java
@@ -74,11 +74,11 @@
 	private final boolean isCreate;
 
 	private boolean isAdmin;
-	
+
 	RepositoryModel repositoryModel;
 
 	private IModel<String> metricAuthorExclusions;
-	
+
 	private IModel<String> mailingLists;
 
 	public EditRepositoryPage() {
@@ -90,7 +90,7 @@
 		model.accessRestriction = AccessRestrictionType.fromName(restriction);
 		String authorization = GitBlit.getString(Keys.git.defaultAuthorizationControl, null);
 		model.authorizationControl = AuthorizationControl.fromName(authorization);
-		
+
 		GitBlitWebSession session = GitBlitWebSession.get();
 		UserModel user = session.getUser();
 		if (user != null && user.canCreate() && !user.canAdmin()) {
@@ -102,7 +102,7 @@
 			model.accessRestriction = AccessRestrictionType.VIEW;
 			model.authorizationControl = AuthorizationControl.NAMED;
 		}
-		
+
 		setupPage(model);
 		setStatelessHint(false);
 		setOutputMarkupId(true);
@@ -118,12 +118,12 @@
 		setStatelessHint(false);
 		setOutputMarkupId(true);
 	}
-	
+
 	@Override
 	protected boolean requiresPageMap() {
 		return true;
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return RepositoriesPage.class;
@@ -131,7 +131,7 @@
 
 	protected void setupPage(RepositoryModel model) {
 		this.repositoryModel = model;
-		
+
 		// ensure this user can create or edit this repository
 		checkPermissions(repositoryModel);
 
@@ -145,7 +145,7 @@
 		GitBlitWebSession session = GitBlitWebSession.get();
 		final UserModel user = session.getUser() == null ? UserModel.ANONYMOUS : session.getUser();
 		final boolean allowEditName = isCreate || isAdmin || repositoryModel.isUsersPersonalRepository(user.username);
-		
+
 		if (isCreate) {
 			if (user.canAdmin()) {
 				super.setupPage(getString("gb.newRepository"), "");
@@ -158,7 +158,7 @@
 			repositoryTeams.addAll(GitBlit.self().getTeamAccessPermissions(repositoryModel));
 			Collections.sort(repositoryUsers);
 			Collections.sort(repositoryTeams);
-			
+
 			federationSets.addAll(repositoryModel.federationSets);
 			if (!ArrayUtils.isEmpty(repositoryModel.indexedBranches)) {
 				indexedBranches.addAll(repositoryModel.indexedBranches);
@@ -167,9 +167,9 @@
 
 		final String oldName = repositoryModel.name;
 
-		final RegistrantPermissionsPanel usersPalette = new RegistrantPermissionsPanel("users", 
+		final RegistrantPermissionsPanel usersPalette = new RegistrantPermissionsPanel("users",
 				RegistrantType.USER, GitBlit.self().getAllUsernames(), repositoryUsers, getAccessPermissions());
-		final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams", 
+		final RegistrantPermissionsPanel teamsPalette = new RegistrantPermissionsPanel("teams",
 				RegistrantType.TEAM, GitBlit.self().getAllTeamnames(), repositoryTeams, getAccessPermissions());
 
 		// owners palette
@@ -177,7 +177,7 @@
 		List<String> persons = GitBlit.self().getAllUsernames();
 		final Palette<String> ownersPalette = new Palette<String>("owners", new ListModel<String>(owners), new CollectionModel<String>(
 		      persons), new StringChoiceRenderer(), 12, true);
-		
+
 		// indexed local branches palette
 		List<String> allLocalBranches = new ArrayList<String>();
 		allLocalBranches.add(Constants.DEFAULT_BRANCH);
@@ -187,7 +187,7 @@
 				indexedBranches), new CollectionModel<String>(allLocalBranches),
 				new StringChoiceRenderer(), 8, false);
 		indexedBranchesPalette.setEnabled(luceneEnabled);
-		
+
 		// federation sets palette
 		List<String> sets = GitBlit.getStrings(Keys.federation.sets);
 		final Palette<String> federationSetsPalette = new Palette<String>("federationSets",
@@ -211,19 +211,19 @@
 				new ListModel<String>(postReceiveScripts), new CollectionModel<String>(GitBlit
 						.self().getPostReceiveScriptsUnused(repositoryModel)),
 				new StringChoiceRenderer(), 12, true);
-		
+
 		// custom fields
 		final Map<String, String> customFieldsMap = GitBlit.getMap(Keys.groovy.customFields);
 		List<String> customKeys = new ArrayList<String>(customFieldsMap.keySet());
 		final ListView<String> customFieldsListView = new ListView<String>("customFieldsListView", customKeys) {
-			
+
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			protected void populateItem(ListItem<String> item) {
 				String key = item.getModelObject();
 				item.add(new Label("customFieldLabel", customFieldsMap.get(key)));
-				
+
 				String value = "";
 				if (repositoryModel.customFields != null && repositoryModel.customFields.containsKey(key)) {
 					value = repositoryModel.customFields.get(key);
@@ -248,10 +248,10 @@
 						error(getString("gb.pleaseSetRepositoryName"));
 						return;
 					}
-					
+
 					// ensure name is trimmed
 					repositoryModel.name = repositoryModel.name.trim();
-					
+
 					// automatically convert backslashes to forward slashes
 					repositoryModel.name = repositoryModel.name.replace('\\', '/');
 					// Automatically replace // with /
@@ -269,7 +269,7 @@
 					if (repositoryModel.name.contains("/../")) {
 						error(getString("gb.illegalRelativeSlash"));
 						return;
-					}					
+					}
 					if (repositoryModel.name.endsWith("/")) {
 						repositoryModel.name = repositoryModel.name.substring(0, repositoryModel.name.length() - 1);
 					}
@@ -281,7 +281,7 @@
 								c));
 						return;
 					}
-					
+
 					if (user.canCreate() && !user.canAdmin() && allowEditName) {
 						// ensure repository name begins with the user's path
 						if (!repositoryModel.name.startsWith(user.getPersonalPath())) {
@@ -289,7 +289,7 @@
 									user.getPersonalPath()));
 							return;
 						}
-						
+
 						if (repositoryModel.name.equals(user.getPersonalPath())) {
 							// reset path prefix and show error
 							repositoryModel.name = user.getPersonalPath() + "/";
@@ -328,7 +328,7 @@
 								continue;
 							}
 							if (exclusion.indexOf(' ') > -1) {
-								list.add("\"" + exclusion + "\"");	
+								list.add("\"" + exclusion + "\"");
 							} else {
 								list.add(exclusion);
 							}
@@ -363,7 +363,7 @@
 					while (owners.hasNext()) {
 						repositoryModel.addOwner(owners.next());
 					}
-					
+
 					// pre-receive scripts
 					List<String> preReceiveScripts = new ArrayList<String>();
 					Iterator<String> pres = preReceivePalette.getSelectedChoices();
@@ -379,7 +379,7 @@
 						postReceiveScripts.add(post.next());
 					}
 					repositoryModel.postReceiveScripts = postReceiveScripts;
-					
+
 					// custom fields
 					repositoryModel.customFields = new LinkedHashMap<String, String>();
 					for (int i = 0; i < customFieldsListView.size(); i++) {
@@ -388,10 +388,10 @@
 
 						TextField<String> field = (TextField<String>) child.get("customFieldValue");
 						String value = field.getValue();
-						
+
 						repositoryModel.customFields.put(key, value);
 					}
-					
+
 					// save the repository
 					GitBlit.self().updateRepositoryModel(oldName, repositoryModel, isCreate);
 
@@ -423,7 +423,7 @@
 		form.add(new CheckBox("isFrozen"));
 		// TODO enable origin definition
 		form.add(new TextField<String>("origin").setEnabled(false/* isCreate */));
-		
+
 		// allow relinking HEAD to a branch or tag other than master on edit repository
 		List<String> availableRefs = new ArrayList<String>();
 		if (!ArrayUtils.isEmpty(repositoryModel.availableRefs)) {
@@ -431,7 +431,7 @@
 		}
 		form.add(new DropDownChoice<String>("HEAD", availableRefs).setEnabled(availableRefs.size() > 0));
 
-		boolean gcEnabled = GitBlit.getBoolean(Keys.git.enableGarbageCollection, false); 
+		boolean gcEnabled = GitBlit.getBoolean(Keys.git.enableGarbageCollection, false);
 		List<Integer> gcPeriods = Arrays.asList(1, 2, 3, 4, 5, 7, 10, 14 );
 		form.add(new DropDownChoice<Integer>("gcPeriod", gcPeriods, new GCPeriodRenderer()).setEnabled(gcEnabled));
 		form.add(new TextField<String>("gcThreshold").setEnabled(gcEnabled));
@@ -463,12 +463,12 @@
 				: StringUtils.flattenStrings(repositoryModel.mailingLists, " "));
 		form.add(new TextField<String>("mailingLists", mailingLists));
 		form.add(indexedBranchesPalette);
-		
+
 		List<AuthorizationControl> acList = Arrays.asList(AuthorizationControl.values());
 		final RadioChoice<AuthorizationControl> authorizationControl = new RadioChoice<Constants.AuthorizationControl>(
 				"authorizationControl", acList, new AuthorizationControlRenderer());
 		form.add(authorizationControl);
-		
+
 		final CheckBox verifyCommitter = new CheckBox("verifyCommitter");
 		verifyCommitter.setOutputMarkupId(true);
 		form.add(verifyCommitter);
@@ -482,11 +482,11 @@
 		form.add(postReceivePalette);
 		form.add(new BulletListPanel("inheritedPostReceive", getString("gb.inherited"), GitBlit.self()
 				.getPostReceiveScriptsInherited(repositoryModel)));
-		
+
 		WebMarkupContainer customFieldsSection = new WebMarkupContainer("customFieldsSection");
 		customFieldsSection.add(customFieldsListView);
 		form.add(customFieldsSection.setVisible(!GitBlit.getString(Keys.groovy.customFields, "").isEmpty()));
-		
+
 		// initial enable/disable of permission controls
 		if (repositoryModel.accessRestriction.equals(AccessRestrictionType.NONE)) {
 			// anonymous everything, disable all controls
@@ -499,64 +499,66 @@
 			// enable authorization controls
 			authorizationControl.setEnabled(true);
 			verifyCommitter.setEnabled(true);
-			
+
 			boolean allowFineGrainedControls = repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED);
 			usersPalette.setEnabled(allowFineGrainedControls);
 			teamsPalette.setEnabled(allowFineGrainedControls);
 		}
-		
+
 		accessRestriction.add(new AjaxFormComponentUpdatingBehavior("onchange") {
-	           
+
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			protected void onUpdate(AjaxRequestTarget target) {
 				// enable/disable permissions panel based on access restriction
 				boolean allowAuthorizationControl = repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE);
 				authorizationControl.setEnabled(allowAuthorizationControl);
 				verifyCommitter.setEnabled(allowAuthorizationControl);
-				
+
 				boolean allowFineGrainedControls = allowAuthorizationControl && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED);
 				usersPalette.setEnabled(allowFineGrainedControls);
 				teamsPalette.setEnabled(allowFineGrainedControls);
-				
+
 				if (allowFineGrainedControls) {
 					repositoryModel.authorizationControl = AuthorizationControl.NAMED;
 				}
-				
+
 				target.addComponent(authorizationControl);
 				target.addComponent(verifyCommitter);
 				target.addComponent(usersPalette);
 				target.addComponent(teamsPalette);
 			}
 		});
-		
+
 		authorizationControl.add(new AjaxFormChoiceComponentUpdatingBehavior() {
-	           
+
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			protected void onUpdate(AjaxRequestTarget target) {
 				// enable/disable permissions panel based on access restriction
 				boolean allowAuthorizationControl = repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE);
 				authorizationControl.setEnabled(allowAuthorizationControl);
-				
+
 				boolean allowFineGrainedControls = allowAuthorizationControl && repositoryModel.authorizationControl.equals(AuthorizationControl.NAMED);
 				usersPalette.setEnabled(allowFineGrainedControls);
 				teamsPalette.setEnabled(allowFineGrainedControls);
-				
+
 				if (allowFineGrainedControls) {
 					repositoryModel.authorizationControl = AuthorizationControl.NAMED;
 				}
-				
+
 				target.addComponent(authorizationControl);
 				target.addComponent(usersPalette);
 				target.addComponent(teamsPalette);
 			}
 		});
-		
+
 		List<CommitMessageRenderer> renderers = Arrays.asList(CommitMessageRenderer.values());
 		DropDownChoice<CommitMessageRenderer> messageRendererChoice = new DropDownChoice<CommitMessageRenderer>("commitMessageRenderer", renderers);
 		form.add(messageRendererChoice);
-		
+
 		form.add(new Button("save"));
 		Button cancel = new Button("cancel") {
 			private static final long serialVersionUID = 1L;
@@ -576,7 +578,7 @@
 	 * Unfortunately must repeat part of AuthorizaitonStrategy here because that
 	 * mechanism does not take PageParameters into consideration, only page
 	 * instantiation.
-	 * 
+	 *
 	 * Repository Owners should be able to edit their repository.
 	 */
 	private void checkPermissions(RepositoryModel model) {
@@ -659,7 +661,7 @@
 			return Integer.toString(index);
 		}
 	}
-	
+
 	private class AuthorizationControlRenderer implements IChoiceRenderer<AuthorizationControl> {
 
 		private static final long serialVersionUID = 1L;
@@ -680,7 +682,7 @@
 			return Integer.toString(index);
 		}
 	}
-	
+
 	private class GCPeriodRenderer implements IChoiceRenderer<Integer> {
 
 		private static final long serialVersionUID = 1L;
@@ -702,7 +704,7 @@
 			return Integer.toString(index);
 		}
 	}
-	
+
 	private class MaxActivityCommitsRenderer implements IChoiceRenderer<Integer> {
 
 		private static final long serialVersionUID = 1L;
diff --git a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java
index 25fbd98..617aa86 100644
--- a/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/EditTeamPage.java
@@ -80,7 +80,7 @@
 	protected boolean requiresPageMap() {
 		return true;
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return UsersPage.class;
@@ -134,7 +134,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.apache.wicket.markup.html.form.Form#onSubmit()
 			 */
 			@Override
@@ -218,7 +218,7 @@
 
 		// not all user services support manipulating team memberships
 		boolean editMemberships = GitBlit.self().supportsTeamMembershipChanges(null);
-		
+
 		// field names reflective match TeamModel fields
 		form.add(new TextField<String>("name"));
 		form.add(new CheckBox("canAdmin"));
diff --git a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java
index 93230c2..6838c19 100644
--- a/src/main/java/com/gitblit/wicket/pages/EditUserPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/EditUserPage.java
@@ -51,7 +51,7 @@
 public class EditUserPage extends RootSubPage {
 
 	private final boolean isCreate;
-	
+
 	public EditUserPage() {
 		// create constructor
 		super();
@@ -75,12 +75,12 @@
 		setStatelessHint(false);
 		setOutputMarkupId(true);
 	}
-	
+
 	@Override
 	protected boolean requiresPageMap() {
 		return true;
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return UsersPage.class;
@@ -99,13 +99,13 @@
 
 		// build list of projects including all repositories wildcards
 		List<String> repos = getAccessRestrictedRepositoryList(true, userModel);
-		
+
 		List<String> userTeams = new ArrayList<String>();
 		for (TeamModel team : userModel.teams) {
 			userTeams.add(team.name);
 		}
 		Collections.sort(userTeams);
-		
+
 		final String oldName = userModel.username;
 		final List<RegistrantAccessPermission> permissions = GitBlit.self().getUserAccessPermissions(userModel);
 
@@ -115,10 +115,10 @@
 		Form<UserModel> form = new Form<UserModel>("editForm", model) {
 
 			private static final long serialVersionUID = 1L;
-			
+
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.apache.wicket.markup.html.form.Form#onSubmit()
 			 */
 			@Override
@@ -158,7 +158,7 @@
 									minLength));
 							return;
 						}
-	
+
 						// Optionally store the password MD5 digest.
 						String type = GitBlit.getString(Keys.realm.passwordStorage, "md5");
 						if (type.equalsIgnoreCase("md5")) {
@@ -192,7 +192,7 @@
 					userModel.teams.add(team);
 				}
 
-				try {					
+				try {
 					GitBlit.self().updateUserModel(oldName, userModel, isCreate);
 				} catch (GitBlitException e) {
 					error(e.getMessage());
@@ -210,13 +210,13 @@
 				}
 			}
 		};
-		
+
 		// do not let the browser pre-populate these fields
 		form.add(new SimpleAttributeModifier("autocomplete", "off"));
-		
+
 		// not all user services support manipulating username and password
 		boolean editCredentials = GitBlit.self().supportsCredentialChanges(userModel);
-		
+
 		// not all user services support manipulating display name
 		boolean editDisplayName = GitBlit.self().supportsDisplayNameChanges(userModel);
 
diff --git a/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java b/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java
index 41f109a..4e05fad 100644
--- a/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/EmptyRepositoryPage.java
@@ -45,30 +45,30 @@
 		if (repository == null) {
 			error(getString("gb.canNotLoadRepository") + " " + repositoryName, true);
 		}
-		
+
 		if (repository.hasCommits) {
 			// redirect to the summary page if this repository is not empty
 			throw new GitblitRedirectException(SummaryPage.class, params);
 		}
-		
+
 		setupPage(repositoryName, getString("gb.emptyRepository"));
 
 		UserModel user = GitBlitWebSession.get().getUser();
 		if (user == null) {
 			user = UserModel.ANONYMOUS;
 		}
-		
+
 		HttpServletRequest req = ((WebRequest) getRequest()).getHttpServletRequest();
 		List<RepositoryUrl> repositoryUrls = GitBlit.self().getRepositoryUrls(req, user, repository);
 		RepositoryUrl primaryUrl = repositoryUrls.size() == 0 ? null : repositoryUrls.get(0);
 		String url = primaryUrl != null ? primaryUrl.url : "";
-		
+
 		add(new Label("repository", repositoryName));
 		add(new RepositoryUrlPanel("pushurl", false, user, repository));
 		add(new Label("cloneSyntax", MessageFormat.format("git clone {0}", url)));
 		add(new Label("remoteSyntax", MessageFormat.format("git remote add gitblit {0}\ngit push gitblit master", url)));
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return RepositoriesPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java b/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java
index 092f8e2..42f4694 100644
--- a/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/FederationRegistrationPage.java
@@ -33,7 +33,7 @@
 
 	public FederationRegistrationPage(PageParameters params) {
 		super(params);
-		
+
 		setStatelessHint(true);
 
 		String url = WicketUtils.getUrlParameter(params);
@@ -81,6 +81,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<RepositoryStatus> item) {
 				final RepositoryStatus entry = item.getModelObject();
 				item.add(WicketUtils.getPullStatusImage("statusIcon", entry.status));
@@ -92,7 +93,7 @@
 		};
 		add(dataView);
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return FederationPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/ForkPage.java b/src/main/java/com/gitblit/wicket/pages/ForkPage.java
index 340bd82..fe316ff 100644
--- a/src/main/java/com/gitblit/wicket/pages/ForkPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ForkPage.java
@@ -35,7 +35,7 @@
 		super(params);
 
 		setVersioned(false);
-		
+
 		GitBlitWebSession session = GitBlitWebSession.get();
 
 		RepositoryModel repository = getRepositoryModel();
diff --git a/src/main/java/com/gitblit/wicket/pages/ForksPage.java b/src/main/java/com/gitblit/wicket/pages/ForksPage.java
index f59955e..5b5fcc0 100644
--- a/src/main/java/com/gitblit/wicket/pages/ForksPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ForksPage.java
@@ -42,20 +42,21 @@
 
 	public ForksPage(PageParameters params) {
 		super(params);
-		
+
 		final RepositoryModel pageRepository = getRepositoryModel();
-		
+
 		ForkModel root = GitBlit.self().getForkNetwork(pageRepository.name);
 		List<FlatFork> network = flatten(root);
-		
+
 		ListDataProvider<FlatFork> forksDp = new ListDataProvider<FlatFork>(network);
 		DataView<FlatFork> forksList = new DataView<FlatFork>("fork", forksDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<FlatFork> item) {
 				FlatFork fork = item.getModelObject();
 				RepositoryModel repository = fork.repository;
-				
+
 				if (repository.isPersonalRepository()) {
 					UserModel user = GitBlit.self().getUserModel(repository.projectPath.substring(1));
 					if (user == null) {
@@ -92,7 +93,7 @@
 						item.add(new LinkPanel("aProject", null, projectName, ProjectPage.class, WicketUtils.newProjectParameter(projectName)));
 					}
 				}
-				
+
 				String repo = StringUtils.getLastPathElement(repository.name);
 				UserModel user = GitBlitWebSession.get().getUser();
 				if (user == null) {
@@ -110,7 +111,7 @@
 					item.add(new Label("aFork", repo));
 					item.add(new Label("lastChange").setVisible(false));
 				}
-				
+
 				WicketUtils.setCssStyle(item, "margin-left:" + (32*fork.level) + "px;");
 				if (fork.level == 0) {
 					WicketUtils.setCssClass(item, "forkSource");
@@ -119,7 +120,7 @@
 				}
 			}
 		};
-		
+
 		add(forksList);
 	}
 
@@ -127,13 +128,13 @@
 	protected String getPageName() {
 		return getString("gb.forks");
 	}
-	
+
 	protected List<FlatFork> flatten(ForkModel root) {
 		List<FlatFork> list = new ArrayList<FlatFork>();
 		list.addAll(flatten(root, 0));
 		return list;
 	}
-	
+
 	protected List<FlatFork> flatten(ForkModel node, int level) {
 		List<FlatFork> list = new ArrayList<FlatFork>();
 		list.add(new FlatFork(node.repository, level));
@@ -144,14 +145,14 @@
 		}
 		return list;
 	}
-	
+
 	private class FlatFork implements Serializable {
-		
+
 		private static final long serialVersionUID = 1L;
 
 		public final RepositoryModel repository;
 		public final int level;
-		
+
 		public FlatFork(RepositoryModel repository, int level) {
 			this.repository = repository;
 			this.level = level;
diff --git a/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java b/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java
index 446531a..befa5f1 100644
--- a/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/GitSearchPage.java
@@ -20,8 +20,8 @@
 
 import com.gitblit.Constants;
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.SearchPanel;
 
 @CacheControl(LastModified.REPOSITORY)
@@ -69,7 +69,7 @@
 	protected String getPageName() {
 		return getString("gb.search");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return LogPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/GravatarProfilePage.java b/src/main/java/com/gitblit/wicket/pages/GravatarProfilePage.java
index ee567d7..984b297 100644
--- a/src/main/java/com/gitblit/wicket/pages/GravatarProfilePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/GravatarProfilePage.java
@@ -29,9 +29,9 @@
 
 /**
  * Gravatar Profile Page shows the Gravatar information, if available.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GravatarProfilePage extends RootPage {
 
@@ -49,7 +49,7 @@
 		} catch (IOException e) {
 			error(MessageFormat.format(getString("gb.failedToFindGravatarProfile"), object), e, true);
 		}
-		
+
 		if (profile == null) {
 			error(MessageFormat.format(getString("gb.failedToFindGravatarProfile"), object), true);
 		}
diff --git a/src/main/java/com/gitblit/wicket/pages/HistoryPage.java b/src/main/java/com/gitblit/wicket/pages/HistoryPage.java
index 33bc54c..f7f188d 100644
--- a/src/main/java/com/gitblit/wicket/pages/HistoryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/HistoryPage.java
@@ -19,8 +19,8 @@
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.HistoryPanel;
 
 @CacheControl(LastModified.REPOSITORY)
@@ -65,7 +65,7 @@
 	protected String getPageName() {
 		return getString("gb.history");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return TreePage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/LogPage.java b/src/main/java/com/gitblit/wicket/pages/LogPage.java
index 1f4a9bf..092f719 100644
--- a/src/main/java/com/gitblit/wicket/pages/LogPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/LogPage.java
@@ -20,8 +20,8 @@
 
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.LogPanel;
 
 @CacheControl(LastModified.REPOSITORY)
diff --git a/src/main/java/com/gitblit/wicket/pages/LogoutPage.java b/src/main/java/com/gitblit/wicket/pages/LogoutPage.java
index 1028c5a..ff3b507 100644
--- a/src/main/java/com/gitblit/wicket/pages/LogoutPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/LogoutPage.java
@@ -30,8 +30,8 @@
 		UserModel user = session.getUser();
 		GitBlit.self().setCookie((WebResponse) getResponse(), null);
 		GitBlit.self().logout(user);
-		session.invalidate();		
-		
+		session.invalidate();
+
 		/*
 		 * Now check whether the authentication was realized via the Authorization in the header.
 		 * If so, it is likely to be cached by the browser, and cannot be undone. Effectively, this means
@@ -41,7 +41,7 @@
 			// authentication will be done via this route anyway, show a page to close the browser:
 			// this will be done by Wicket.
 			setupPage(null, getString("gb.logout"));
-			
+
 		} else {
 			setRedirect(true);
 			setResponsePage(getApplication().getHomePage());
diff --git a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
index 98738b6..86a426c 100644
--- a/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
@@ -60,9 +60,9 @@
 
 	private void setup(PageParameters params) {
 		setupPage("", "");
-		
+
 		// default values
-		ArrayList<String> repositories = new ArrayList<String>();				
+		ArrayList<String> repositories = new ArrayList<String>();
 		String query = "";
 		int page = 1;
 		int pageSize = GitBlit.getInteger(Keys.web.itemsPerPage, 50);
@@ -74,29 +74,29 @@
 			}
 
 			page = WicketUtils.getPage(params);
-			
+
 			if (params.containsKey("repositories")) {
 				String value = params.getString("repositories", "");
-				List<String> list = StringUtils.getStringsFromValue(value);			
+				List<String> list = StringUtils.getStringsFromValue(value);
 				repositories.addAll(list);
 			}
 
 			if (params.containsKey("query")) {
-				query = params.getString("query", "");	
+				query = params.getString("query", "");
 			} else {
 				String value = WicketUtils.getSearchString(params);
 				String type = WicketUtils.getSearchType(params);
 				com.gitblit.Constants.SearchType searchType = com.gitblit.Constants.SearchType.forName(type);
 				if (!StringUtils.isEmpty(value)) {
 					if (searchType == SearchType.COMMIT) {
-						query = "type:" + searchType.name().toLowerCase() + " AND \"" + value + "\"";	
+						query = "type:" + searchType.name().toLowerCase() + " AND \"" + value + "\"";
 					} else {
 						query = searchType.name().toLowerCase() + ":\"" + value + "\"";
 					}
 				}
 			}
 		}
-		
+
 		// display user-accessible selections
 		UserModel user = GitBlitWebSession.get().getUser();
 		List<String> availableRepositories = new ArrayList<String>();
@@ -121,12 +121,12 @@
 				searchRepositories.add(selectedRepository);
 			}
 		}
-		
+
 		// search form
 		final Model<String> queryModel = new Model<String>(query);
 		final Model<ArrayList<String>> repositoriesModel = new Model<ArrayList<String>>(searchRepositories);
 		SessionlessForm<Void> form = new SessionlessForm<Void>("searchForm", getClass()) {
-			
+
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -135,7 +135,7 @@
 				if (StringUtils.isEmpty(q)) {
 					error(getString("gb.undefinedQueryWarning"));
 					return;
-				}				
+				}
 				if (repositoriesModel.getObject().size() == 0) {
 					error(getString("gb.noSelectedRepositoriesWarning"));
 					return;
@@ -147,20 +147,20 @@
 				setResponsePage(page);
 			}
 		};
-				
-		ListMultipleChoice<String> selections = new ListMultipleChoice<String>("repositories", 
+
+		ListMultipleChoice<String> selections = new ListMultipleChoice<String>("repositories",
 				repositoriesModel, availableRepositories, new StringChoiceRenderer());
 		selections.setMaxRows(8);
 		form.add(selections.setEnabled(luceneEnabled));
 		form.add(new TextField<String>("query", queryModel).setEnabled(luceneEnabled));
 		add(form.setEnabled(luceneEnabled));
-				
+
 		// execute search
 		final List<SearchResult> results = new ArrayList<SearchResult>();
 		if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
 			results.addAll(GitBlit.self().search(query, page, pageSize, searchRepositories));
 		}
-		
+
 		// results header
 		if (results.size() == 0) {
 			if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
@@ -176,11 +176,12 @@
 					results.get(0).hitId, results.get(results.size() - 1).hitId, results.get(0).totalHits)).
 					setRenderBodyOnly(true));
 		}
-		
+
 		// search results view
 		ListDataProvider<SearchResult> resultsDp = new ListDataProvider<SearchResult>(results);
 		final DataView<SearchResult> resultsView = new DataView<SearchResult>("searchResults", resultsDp) {
 			private static final long serialVersionUID = 1L;
+			@Override
 			public void populateItem(final Item<SearchResult> item) {
 				final SearchResult sr = item.getModelObject();
 				switch(sr.type) {
@@ -198,11 +199,12 @@
 					ListDataProvider<String> tagsDp = new ListDataProvider<String>(tags);
 					final DataView<String> tagsView = new DataView<String>("tag", tagsDp) {
 						private static final long serialVersionUID = 1L;
+						@Override
 						public void populateItem(final Item<String> item) {
 							String tag = item.getModelObject();
 							Component c = new LinkPanel("tagLink", null, tag, TagPage.class,
 									WicketUtils.newObjectParameter(sr.repository, Constants.R_TAGS + tag));
-							WicketUtils.setCssClass(c, "tagRef");							
+							WicketUtils.setCssClass(c, "tagRef");
 							item.add(c);
 						}
 					};
@@ -231,18 +233,18 @@
 			}
 		};
 		add(resultsView.setVisible(results.size() > 0));
-		
+
 		PageParameters pagerParams = new PageParameters();
 		pagerParams.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
 		pagerParams.put("query", queryModel.getObject());
-		
+
 		boolean showPager = false;
 		int totalPages = 0;
 		if (results.size() > 0) {
 			totalPages = (results.get(0).totalHits / pageSize) + (results.get(0).totalHits % pageSize > 0 ? 1 : 0);
 			showPager = results.get(0).totalHits > pageSize;
 		}
-		
+
 		add(new PagerPanel("topPager", page, totalPages, LuceneSearchPage.class, pagerParams).setVisible(showPager));
 		add(new PagerPanel("bottomPager", page, totalPages, LuceneSearchPage.class, pagerParams).setVisible(showPager));
 	}
diff --git a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
index df078c7..5aa8029 100644
--- a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
@@ -30,8 +30,8 @@
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 
 @CacheControl(LastModified.BOOT)
 public class MarkdownPage extends RepositoryPage {
@@ -44,7 +44,7 @@
 		Repository r = getRepository();
 		RevCommit commit = JGitUtils.getCommit(r, objectId);
 		String [] encodings = GitBlit.getEncodings();
-		
+
 		// markdown page links
 		add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,
 				WicketUtils.newPathParameter(repositoryName, objectId, markdownPath)));
@@ -73,7 +73,7 @@
 	protected String getPageName() {
 		return getString("gb.markdown");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return DocsPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java
index 3aa1fcc..d4cfc8e 100644
--- a/src/main/java/com/gitblit/wicket/pages/MetricsPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MetricsPage.java
@@ -41,8 +41,8 @@
 import com.gitblit.utils.MetricUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.charting.SecureChart;
 
 @CacheControl(LastModified.REPOSITORY)
@@ -184,7 +184,7 @@
 	protected String getPageName() {
 		return getString("gb.metrics");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return SummaryPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java b/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java
index 0768b2a..8e05b4f 100644
--- a/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MyDashboardPage.java
@@ -44,9 +44,9 @@
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.GitBlitWebSession;
 import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.panels.FilterableProjectList;
 import com.gitblit.wicket.panels.FilterableRepositoryList;
 
@@ -106,8 +106,8 @@
 		Calendar c = Calendar.getInstance();
 		c.add(Calendar.DATE, -1*daysBack);
 		Date minimumDate = c.getTime();
-		
-		// build repo lists 
+
+		// build repo lists
 		List<RepositoryModel> starred = new ArrayList<RepositoryModel>();
 		List<RepositoryModel> owned = new ArrayList<RepositoryModel>();
 		List<RepositoryModel> active = new ArrayList<RepositoryModel>();
@@ -116,27 +116,27 @@
 			if (model.isUsersPersonalRepository(user.username) || model.isOwner(user.username)) {
 				owned.add(model);
 			}
-			
+
 			if (user.getPreferences().isStarredRepository(model.name)) {
 				starred.add(model);
 			}
-			
+
 			if (model.isShowActivity() && model.lastChange.after(minimumDate)) {
 				active.add(model);
 			}
 		}
-		
+
 		Comparator<RepositoryModel> lastUpdateSort = new Comparator<RepositoryModel>() {
 			@Override
 			public int compare(RepositoryModel o1, RepositoryModel o2) {
 				return o2.lastChange.compareTo(o1.lastChange);
 			}
 		};
-		
+
 		Collections.sort(owned, lastUpdateSort);
 		Collections.sort(starred, lastUpdateSort);
 		Collections.sort(active, lastUpdateSort);
-		
+
 		String activityTitle;
 		Set<RepositoryModel> feed = new HashSet<RepositoryModel>();
 		feed.addAll(starred);
@@ -155,22 +155,22 @@
 			// starred and owned repositories
 			activityTitle = getString("gb.starredAndOwned");
 		}
-		
+
 		addActivity(user, feed, activityTitle, daysBack);
-		
+
 		Fragment repositoryTabs;
 		if (UserModel.ANONYMOUS.equals(user)) {
 			repositoryTabs = new Fragment("repositoryTabs", "anonymousTabsFragment", this);
 		} else {
 			repositoryTabs = new Fragment("repositoryTabs", "authenticatedTabsFragment", this);
 		}
-		
+
 		add(repositoryTabs);
-		
+
 		// projects list
 		List<ProjectModel> projects = GitBlit.self().getProjectModels(getRepositoryModels(), false);
 		repositoryTabs.add(new FilterableProjectList("projects", projects));
-		
+
 		// active repository list
 		if (active.isEmpty()) {
 			repositoryTabs.add(new Label("active").setVisible(false));
@@ -179,7 +179,7 @@
 			repoList.setTitle(getString("gb.activeRepositories"), "icon-time");
 			repositoryTabs.add(repoList);
 		}
-		
+
 		// starred repository list
 		if (ArrayUtils.isEmpty(starred)) {
 			repositoryTabs.add(new Label("starred").setVisible(false));
@@ -188,7 +188,7 @@
 			repoList.setTitle(getString("gb.starredRepositories"), "icon-star");
 			repositoryTabs.add(repoList);
 		}
-		
+
 		// owned repository list
 		if (ArrayUtils.isEmpty(owned)) {
 			repositoryTabs.add(new Label("owned").setVisible(false));
@@ -199,7 +199,7 @@
 			repositoryTabs.add(repoList);
 		}
 	}
-	
+
 	private String readMarkdown(String messageSource, String resource) {
 		String message = "";
 		if (messageSource.equalsIgnoreCase("gitblit")) {
@@ -268,7 +268,7 @@
 					} catch (Exception e) {
 					}
 				}
-			}			
+			}
 		}
 		return MessageFormat.format(getString("gb.failedToReadMessage"), file);
 	}
diff --git a/src/main/java/com/gitblit/wicket/pages/OverviewPage.java b/src/main/java/com/gitblit/wicket/pages/OverviewPage.java
index e1de9f3..f6362c2 100644
--- a/src/main/java/com/gitblit/wicket/pages/OverviewPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/OverviewPage.java
@@ -35,9 +35,9 @@
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.GitBlitWebSession;
 import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.charting.GoogleChart;
 import com.gitblit.wicket.charting.GoogleCharts;
 import com.gitblit.wicket.charting.GoogleLineChart;
@@ -73,13 +73,14 @@
 
 		// repository description
 		add(new Label("repositoryDescription", getRepositoryModel().description));
-		
+
 		// owner links
 		final List<String> owners = new ArrayList<String>(getRepositoryModel().owners);
 		ListDataProvider<String> ownersDp = new ListDataProvider<String>(owners);
 		DataView<String> ownersView = new DataView<String>("repositoryOwners", ownersDp) {
 			private static final long serialVersionUID = 1L;
 			int counter = 0;
+			@Override
 			public void populateItem(final Item<String> item) {
 				String ownername = item.getModelObject();
 				UserModel ownerModel = GitBlit.self().getUserModel(ownername);
@@ -99,11 +100,11 @@
 		};
 		ownersView.setRenderBodyOnly(true);
 		add(ownersView);
-		
+
 		add(WicketUtils.createTimestampLabel("repositoryLastChange",
 				JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
 		add(new Label("repositorySize", model.size));
-		
+
 		if (metricsTotal == null) {
 			add(new Label("branchStats", ""));
 		} else {
@@ -134,7 +135,7 @@
 	private void insertActivityGraph(List<Metric> metrics) {
 		if ((metrics != null) && (metrics.size() > 0)
 				&& GitBlit.getBoolean(Keys.web.generateActivityGraph, true)) {
-			
+
 			// daily line chart
 			GoogleChart chart = new GoogleLineChart("chartDaily", "", "unit",
 					getString("gb.commits"));
@@ -143,7 +144,7 @@
 			}
 			chart.setWidth(375);
 			chart.setHeight(150);
-			
+
 			GoogleCharts charts = new GoogleCharts();
 			charts.addChart(chart);
 			add(new HeaderContributor(charts));
diff --git a/src/main/java/com/gitblit/wicket/pages/ProjectPage.java b/src/main/java/com/gitblit/wicket/pages/ProjectPage.java
index c938891..19588a9 100644
--- a/src/main/java/com/gitblit/wicket/pages/ProjectPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ProjectPage.java
@@ -46,7 +46,7 @@
 
 @CacheControl(LastModified.PROJECT)
 public class ProjectPage extends DashboardPage {
-	
+
 	List<ProjectModel> projectModels = new ArrayList<ProjectModel>();
 
 	public ProjectPage() {
@@ -58,7 +58,8 @@
 		super(params);
 		setup(params);
 	}
-	
+
+	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return RepositoriesPage.class;
 	}
@@ -82,7 +83,7 @@
 			}
 		}
 	}
-	
+
 	private void setup(PageParameters params) {
 		setupPage("", "");
 		// check to see if we should display a login message
@@ -96,21 +97,21 @@
 		if (StringUtils.isEmpty(projectName)) {
 			throw new GitblitRedirectException(GitBlitWebApp.get().getHomePage());
 		}
-		
+
 		ProjectModel project = getProjectModel(projectName);
 		if (project == null) {
 			throw new GitblitRedirectException(GitBlitWebApp.get().getHomePage());
 		}
-		
+
 		add(new Label("projectTitle", project.getDisplayName()));
 		add(new Label("projectDescription", project.description));
-		
+
 		String feedLink = SyndicationServlet.asLink(getRequest().getRelativePathPrefixToContextRoot(), projectName, null, 0);
 		add(new ExternalLink("syndication", feedLink));
 
 		add(WicketUtils.syndicationDiscoveryLink(SyndicationServlet.getTitle(project.getDisplayName(),
 				null), feedLink));
-		
+
 		// project markdown message
 		String pmessage = transformMarkdown(project.projectMarkdown);
 		Component projectMessage = new Label("projectMessage", pmessage)
@@ -135,7 +136,7 @@
 		// repository list.  the recent activity will be built up by the
 		// reflog utils.
 		params.remove("db");
-		
+
 		List<RepositoryModel> repositories = getRepositories(params);
 		Collections.sort(repositories, new Comparator<RepositoryModel>() {
 			@Override
@@ -146,7 +147,7 @@
 		});
 
 		addActivity(user, repositories, getString("gb.recentActivity"), daysBack);
-		
+
 		if (repositories.isEmpty()) {
 			add(new Label("repositoryList").setVisible(false));
 		} else {
@@ -155,7 +156,7 @@
 			add(repoList);
 		}
 	}
-	
+
 	@Override
 	protected void addDropDownMenus(List<PageRegistration> pages) {
 		PageParameters params = getPageParameters();
@@ -174,13 +175,13 @@
 		}
 
 		pages.add(menu);
-		
+
 		DropDownMenuRegistration projects = new DropDownMenuRegistration("gb.projects",
 				ProjectPage.class);
 		projects.menuItems.addAll(getProjectsMenu());
 		pages.add(projects);
 	}
-	
+
 	@Override
 	protected List<ProjectModel> getProjectModels() {
 		if (projectModels.isEmpty()) {
@@ -190,7 +191,7 @@
 		}
 		return projectModels;
 	}
-	
+
 	private ProjectModel getProjectModel(String name) {
 		for (ProjectModel project : getProjectModels()) {
 			if (name.equalsIgnoreCase(project.name)) {
@@ -199,7 +200,7 @@
 		}
 		return null;
 	}
-	
+
 	protected List<DropDownMenuItem> getProjectsMenu() {
 		List<DropDownMenuItem> menu = new ArrayList<DropDownMenuItem>();
 		List<ProjectModel> projects = new ArrayList<ProjectModel>();
@@ -236,7 +237,7 @@
 		}
 		return menu;
 	}
-	
+
 	private String transformMarkdown(String markdown) {
 		String message = "";
 		if (!StringUtils.isEmpty(markdown)) {
diff --git a/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java b/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java
index d0001ec..e500046 100644
--- a/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ProjectsPage.java
@@ -49,7 +49,7 @@
 	protected boolean reusePageParameters() {
 		return true;
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return RepositoriesPage.class;
@@ -83,6 +83,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<ProjectModel> item) {
 				final ProjectModel entry = item.getModelObject();
 
@@ -117,7 +118,7 @@
 	@Override
 	protected void addDropDownMenus(List<PageRegistration> pages) {
 		PageParameters params = getPageParameters();
-		
+
 		DropDownMenuRegistration menu = new DropDownMenuRegistration("gb.filters",
 				ProjectsPage.class);
 		// preserve time filter option on repository choices
diff --git a/src/main/java/com/gitblit/wicket/pages/RawPage.java b/src/main/java/com/gitblit/wicket/pages/RawPage.java
index d322e95..5026871 100644
--- a/src/main/java/com/gitblit/wicket/pages/RawPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RawPage.java
@@ -46,7 +46,7 @@
 
 	public RawPage(final PageParameters params) {
 		super(params);
-		
+
 		if (!params.containsKey("r")) {
 			error(getString("gb.repositoryNotSpecified"));
 			redirectToInterceptPage(new RepositoriesPage());
@@ -67,7 +67,7 @@
 				String[] encodings = GitBlit.getEncodings();
 				GitBlitWebSession session = GitBlitWebSession.get();
 				UserModel user = session.getUser();
-				
+
 				RepositoryModel model = GitBlit.self().getRepositoryModel(user, repositoryName);
 				if (model == null) {
 					// user does not have permission
@@ -75,7 +75,7 @@
 					redirectToInterceptPage(new RepositoriesPage());
 					return;
 				}
-				
+
 				Repository r = GitBlit.self().getRepository(repositoryName);
 				if (r == null) {
 					error(getString("gb.canNotLoadRepository") + " " + repositoryName);
@@ -138,11 +138,11 @@
 							byte[] binary = JGitUtils.getByteContent(r, commit.getTree(), blobPath, true);
 							response.setContentLength(binary.length);
 							response.setContentType("application/octet-stream; charset=UTF-8");
-							
+
 						    try {
 						    	WebRequest request = (WebRequest) requestCycle.getRequest();
 						    	String userAgent = request.getHttpServletRequest().getHeader("User-Agent");
-						    	
+
 								if (userAgent != null && userAgent.indexOf("MSIE 5.5") > -1) {
 								      response.setHeader("Content-Disposition", "filename=\""
 								    		  +  URLEncoder.encode(filename, "UTF-8") + "\"");
@@ -157,7 +157,7 @@
 							catch (UnsupportedEncodingException e) {
 								response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
 							}
-							
+
 							try {
 								response.getOutputStream().write(binary);
 							} catch (IOException e) {
diff --git a/src/main/java/com/gitblit/wicket/pages/ReflogPage.java b/src/main/java/com/gitblit/wicket/pages/ReflogPage.java
index c97b2cc..29fd449 100644
--- a/src/main/java/com/gitblit/wicket/pages/ReflogPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ReflogPage.java
@@ -19,8 +19,8 @@
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 
 import com.gitblit.wicket.CacheControl;
-import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.CacheControl.LastModified;
+import com.gitblit.wicket.WicketUtils;
 import com.gitblit.wicket.panels.ReflogPanel;
 
 @CacheControl(LastModified.REPOSITORY)
diff --git a/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java b/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java
index a4a1ab5..b446279 100644
--- a/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RepositoriesPage.java
@@ -34,9 +34,9 @@
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.GitBlitWebSession;
 import com.gitblit.wicket.PageRegistration;
-import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
 import com.gitblit.wicket.PageRegistration.DropDownMenuRegistration;
 import com.gitblit.wicket.WicketUtils;
@@ -180,7 +180,7 @@
 					} catch (Exception e) {
 					}
 				}
-			}			
+			}
 		}
 		return MessageFormat.format(getString("gb.failedToReadMessage"), file);
 	}
diff --git a/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java b/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java
index e181386..ebe1530 100644
--- a/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/ReviewProposalPage.java
@@ -50,14 +50,14 @@
 		}
 
 		setupPage(getString("gb.proposals"), proposal.url);
-		
+
 
 		add(new Label("url", proposal.url));
 		add(new Label("message", proposal.message));
 		add(WicketUtils.createTimestampLabel("received", proposal.received, getTimeZone(), getTimeUtils()));
 		add(new Label("token", proposal.token));
 		add(new Label("tokenType", proposal.tokenType.name()));
-		
+
 		String p;
 		if (GitBlit.isGO()) {
 			// gitblit.properties definition
diff --git a/src/main/java/com/gitblit/wicket/pages/RootPage.java b/src/main/java/com/gitblit/wicket/pages/RootPage.java
index ec4e9b4..a59e202 100644
--- a/src/main/java/com/gitblit/wicket/pages/RootPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RootPage.java
@@ -65,9 +65,9 @@
 /**
  * Root page is a topbar, navigable page like Repositories, Users, or
  * Federation.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class RootPage extends BasePage {
 
@@ -92,6 +92,7 @@
 		add(new HeaderContributor(new IHeaderContributor() {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void renderHead(IHeaderResponse response) {
 				StringBuilder buffer = new StringBuilder();
 				buffer.append("<style type=\"text/css\">\n");
@@ -130,7 +131,7 @@
 				response.renderString(buffer.toString());
 				}
 			}));
-		
+
 		boolean authenticateView = GitBlit.getBoolean(Keys.web.authenticateViewPages, false);
 		boolean authenticateAdmin = GitBlit.getBoolean(Keys.web.authenticateAdminPages, true);
 		boolean allowAdmin = GitBlit.getBoolean(Keys.web.allowAdministration, true);
@@ -149,7 +150,7 @@
 				setStatelessHint(true);
 			}
 		}
-		
+
 		if (authenticateView || authenticateAdmin) {
 			if (GitBlitWebSession.get().isLoggedIn()) {
 				UserMenu userFragment = new UserMenu("userPanel", "userMenuFragment", RootPage.this);
@@ -161,7 +162,7 @@
 		} else {
 			add(new Label("userPanel").setVisible(false));
 		}
-		
+
 		boolean showRegistrations = GitBlit.canFederate()
 				&& GitBlit.getBoolean(Keys.web.showFederationRegistrations, false);
 
@@ -187,7 +188,7 @@
 				addDropDownMenus(pages);
 			}
 		}
-		
+
 		NavigationPanel navPanel = new NavigationPanel("navPanel", getRootNavPageClass(), pages);
 		add(navPanel);
 
@@ -207,7 +208,7 @@
 
 		super.setupPage(repositoryName, pageName);
 	}
-	
+
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return getClass();
 	}
@@ -232,7 +233,7 @@
 					params.remove("db");
 				}
 				return params;
-			}			
+			}
 		}
 		return null;
 	}
@@ -269,7 +270,7 @@
 			}
 		}
 	}
-	
+
 	protected List<RepositoryModel> getRepositoryModels() {
 		if (repositoryModels.isEmpty()) {
 			final UserModel user = GitBlitWebSession.get().getUser();
@@ -359,11 +360,11 @@
 		} else {
 			clonedParams = new PageParameters(params);
 		}
-		
+
 		if (!clonedParams.containsKey("db")) {
 			clonedParams.put("db",  daysBack);
 		}
-		
+
 		List<DropDownMenuItem> items = new ArrayList<DropDownMenuItem>();
 		Set<Integer> choicesSet = new TreeSet<Integer>(GitBlit.getIntegers(Keys.web.activityDurationChoices));
 		if (choicesSet.isEmpty()) {
@@ -420,7 +421,7 @@
 
 		if (!StringUtils.isEmpty(projectName)) {
 			// try named project
-			hasParameter = true;			
+			hasParameter = true;
 			if (projectName.equalsIgnoreCase(GitBlit.getString(Keys.web.repositoryRootGroupName, "main"))) {
 				// root project/group
 				for (RepositoryModel model : availableModels) {
@@ -511,14 +512,14 @@
 			}
 			models = timeFiltered;
 		}
-		
+
 		List<RepositoryModel> list = new ArrayList<RepositoryModel>(models);
 		Collections.sort(list);
 		return list;
 	}
-	
+
 	/**
-	 * Inline login form. 
+	 * Inline login form.
 	 */
 	private class LoginForm extends Fragment {
 		private static final long serialVersionUID = 1L;
@@ -558,7 +559,7 @@
 			add(loginForm);
 		}
 	}
-	
+
 	/**
 	 * Menu for the authenticated user.
 	 */
@@ -587,12 +588,12 @@
 			add(new BookmarkablePageLink<Void>("newRepository",
 					EditRepositoryPage.class).setVisible(user.canAdmin() || user.canCreate()));
 
-			add(new BookmarkablePageLink<Void>("myProfile", 
+			add(new BookmarkablePageLink<Void>("myProfile",
 					UserPage.class, WicketUtils.newUsernameParameter(user.username)));
 
-			add(new BookmarkablePageLink<Void>("changePassword", 
+			add(new BookmarkablePageLink<Void>("changePassword",
 					ChangePasswordPage.class).setVisible(editCredentials));
-			
+
 			add(new BookmarkablePageLink<Void>("logout",
 					LogoutPage.class).setVisible(standardLogin));
 		}
diff --git a/src/main/java/com/gitblit/wicket/pages/RootSubPage.java b/src/main/java/com/gitblit/wicket/pages/RootSubPage.java
index 0be714e..e81717a 100644
--- a/src/main/java/com/gitblit/wicket/pages/RootSubPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/RootSubPage.java
@@ -32,9 +32,9 @@
 
 /**
  * RootSubPage is a non-topbar navigable RootPage. It also has a page header.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public abstract class RootSubPage extends RootPage {
 
@@ -47,11 +47,11 @@
 		super(params);
 		createPageMapIfNeeded();
 	}
-	
+
 	protected boolean requiresPageMap() {
 		return false;
 	}
-	
+
 	protected void createPageMapIfNeeded() {
 		if (requiresPageMap()) {
 			// because Gitblit strives for page-statelessness
@@ -72,7 +72,7 @@
 		add(new Label("pageSubName", subName));
 		super.setupPage("", pageName);
 	}
-	
+
 	protected List<String> getAccessRestrictedRepositoryList(boolean includeWildcards, UserModel user) {
 		// build list of access-restricted projects
 		String lastProject = null;
@@ -85,7 +85,7 @@
 				repos.add("[^" + ModelUtils.getUserRepoPrefix() + "].*");
 			}
 		}
-		
+
 		for (String repo : GitBlit.self().getRepositoryList()) {
 			RepositoryModel repositoryModel = GitBlit.self().getRepositoryModel(repo);
 			if (repositoryModel.accessRestriction.exceeds(AccessRestrictionType.NONE)
diff --git a/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java b/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java
index a070669..b1a8c5b 100644
--- a/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/SendProposalPage.java
@@ -149,7 +149,7 @@
 				false, repositories, false, getAccessRestrictions());
 		add(repositoriesPanel);
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRootNavPageClass() {
 		return FederationPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
index 17c41eb..00d77a4 100644
--- a/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/SummaryPage.java
@@ -51,9 +51,9 @@
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.CacheControl;
+import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.GitBlitWebSession;
 import com.gitblit.wicket.WicketUtils;
-import com.gitblit.wicket.CacheControl.LastModified;
 import com.gitblit.wicket.charting.SecureChart;
 import com.gitblit.wicket.panels.BranchesPanel;
 import com.gitblit.wicket.panels.LinkPanel;
@@ -91,13 +91,14 @@
 
 		// repository description
 		add(new Label("repositoryDescription", getRepositoryModel().description));
-		
+
 		// owner links
 		final List<String> owners = new ArrayList<String>(getRepositoryModel().owners);
 		ListDataProvider<String> ownersDp = new ListDataProvider<String>(owners);
 		DataView<String> ownersView = new DataView<String>("repositoryOwners", ownersDp) {
 			private static final long serialVersionUID = 1L;
 			int counter = 0;
+			@Override
 			public void populateItem(final Item<String> item) {
 				String ownername = item.getModelObject();
 				UserModel ownerModel = GitBlit.self().getUserModel(ownername);
@@ -117,7 +118,7 @@
 		};
 		ownersView.setRenderBodyOnly(true);
 		add(ownersView);
-		
+
 		add(WicketUtils.createTimestampLabel("repositoryLastChange",
 				JGitUtils.getLastChange(r).when, getTimeZone(), getTimeUtils()));
 		add(new Label("repositorySize", getRepositoryModel().size));
@@ -132,7 +133,7 @@
 				WicketUtils.newRepositoryParameter(repositoryName)));
 
 		add(new RepositoryUrlPanel("repositoryUrlPanel", false, user, model));
-				
+
 		add(new LogPanel("commitsPanel", repositoryName, getRepositoryModel().HEAD, r, numberCommits, 0, getRepositoryModel().showRemoteBranches));
 		add(new TagsPanel("tagsPanel", repositoryName, r, numberRefs).hideIfEmpty());
 		add(new BranchesPanel("branchesPanel", getRepositoryModel(), r, numberRefs, false).hideIfEmpty());
@@ -144,7 +145,7 @@
 			try {
 				RevCommit head = JGitUtils.getCommit(r, null);
 				List<String> markdownExtensions = GitBlit.getStrings(Keys.web.markdownExtensions);
-				List<PathModel> paths = JGitUtils.getFilesInPath(r, null, head);				
+				List<PathModel> paths = JGitUtils.getFilesInPath(r, null, head);
 				for (PathModel path : paths) {
 					if (!path.isTree()) {
 						String name = path.name.toLowerCase();
diff --git a/src/main/java/com/gitblit/wicket/pages/TagPage.java b/src/main/java/com/gitblit/wicket/pages/TagPage.java
index b8b6eef..afade81 100644
--- a/src/main/java/com/gitblit/wicket/pages/TagPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TagPage.java
@@ -78,7 +78,7 @@
 			break;
 		}
 		add(new GravatarImage("taggerAvatar", tagRef.getAuthorIdent()));
-		
+
 		add(new RefsPanel("tagName", repositoryName, Arrays.asList(tagRef)));
 		add(new Label("tagId", tagRef.getObjectId().getName()));
 		add(new LinkPanel("taggedObject", "list", tagRef.getReferencedObjectId().getName(),
@@ -99,7 +99,7 @@
 	protected String getPageName() {
 		return getString("gb.tag");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return LogPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/TagsPage.java b/src/main/java/com/gitblit/wicket/pages/TagsPage.java
index 2abb410..d6b8abb 100644
--- a/src/main/java/com/gitblit/wicket/pages/TagsPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TagsPage.java
@@ -35,7 +35,7 @@
 	protected String getPageName() {
 		return getString("gb.tags");
 	}
-	
+
 	@Override
 	protected Class<? extends BasePage> getRepoNavPageClass() {
 		return LogPage.class;
diff --git a/src/main/java/com/gitblit/wicket/pages/TreePage.java b/src/main/java/com/gitblit/wicket/pages/TreePage.java
index 25bcd67..870b75d 100644
--- a/src/main/java/com/gitblit/wicket/pages/TreePage.java
+++ b/src/main/java/com/gitblit/wicket/pages/TreePage.java
@@ -86,6 +86,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<PathModel> item) {
 				PathModel entry = item.getModelObject();
 				item.add(new Label("pathPermissions", JGitUtils.getPermissionsFromMode(entry.mode)));
@@ -113,26 +114,26 @@
 										entry.path)));
 						links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
 								WicketUtils.newPathParameter(repositoryName, entry.commitId,
-										entry.path)));						
+										entry.path)));
 						links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl,
 								repositoryName, objectId, entry.path));
 
 						item.add(links);
 					} else if (entry.isSubmodule()) {
 						// submodule
-						String submoduleId = entry.objectId;						
+						String submoduleId = entry.objectId;
 						String submodulePath;
 						boolean hasSubmodule = false;
 						SubmoduleModel submodule = getSubmodule(entry.path);
 						submodulePath = submodule.gitblitPath;
 						hasSubmodule = submodule.hasSubmodule;
-						
+
 						item.add(WicketUtils.newImage("pathIcon", "git-orange-16x16.png"));
 						item.add(new Label("pathSize", ""));
-						item.add(new LinkPanel("pathName", "list", entry.name + " @ " + 
+						item.add(new LinkPanel("pathName", "list", entry.name + " @ " +
 								getShortObjectId(submoduleId), TreePage.class,
 								WicketUtils.newPathParameter(submodulePath, submoduleId, "")).setEnabled(hasSubmodule));
-						
+
 						Fragment links = new Fragment("pathLinks", "submoduleLinks", this);
 						links.add(new BookmarkablePageLink<Void>("view", SummaryPage.class,
 								WicketUtils.newRepositoryParameter(submodulePath)).setEnabled(hasSubmodule));
@@ -144,7 +145,7 @@
 										entry.path)));
 						links.add(new CompressedDownloadsPanel("compressedLinks", baseUrl,
 								submodulePath, submoduleId, "").setEnabled(hasSubmodule));
-						item.add(links);						
+						item.add(links);
 					} else {
 						// blob link
 						String displayPath = entry.name;
diff --git a/src/main/java/com/gitblit/wicket/pages/UserPage.java b/src/main/java/com/gitblit/wicket/pages/UserPage.java
index 4faee20..4b62e79 100644
--- a/src/main/java/com/gitblit/wicket/pages/UserPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -46,7 +46,7 @@
 import com.gitblit.wicket.panels.ProjectRepositoryPanel;
 
 public class UserPage extends RootPage {
-	
+
 	List<ProjectModel> projectModels = new ArrayList<ProjectModel>();
 
 	public UserPage() {
@@ -83,23 +83,23 @@
 			// construct a temporary user model
 			user = new UserModel(userName);
 		}
-		
+
 		String projectName = user.getPersonalPath();
-		
+
 		ProjectModel project = GitBlit.self().getProjectModel(projectName);
 		if (project == null) {
 			project = new ProjectModel(projectName);
 		}
-		
+
 		add(new Label("userDisplayName", user.getDisplayName()));
 		add(new Label("userUsername", user.username));
 		LinkPanel email = new LinkPanel("userEmail", null, user.emailAddress, "mailto:#");
 		email.setRenderBodyOnly(true);
 		add(email.setVisible(GitBlit.getBoolean(Keys.web.showEmailAddresses, true) && !StringUtils.isEmpty(user.emailAddress)));
-		
+
 		PersonIdent person = new PersonIdent(user.getDisplayName(), user.emailAddress == null ? user.getDisplayName() : user.emailAddress);
 		add(new GravatarImage("gravatar", person, 210));
-		
+
 		UserModel sessionUser = GitBlitWebSession.get().getUser();
 		if (sessionUser != null && user.canCreate() && sessionUser.equals(user)) {
 			// user can create personal repositories
@@ -107,9 +107,9 @@
 		} else {
 			add(new Label("newRepository").setVisible(false));
 		}
-		
+
 		List<RepositoryModel> repositories = getRepositories(params);
-		
+
 		Collections.sort(repositories, new Comparator<RepositoryModel>() {
 			@Override
 			public int compare(RepositoryModel o1, RepositoryModel o2) {
@@ -122,10 +122,11 @@
 		DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repositoryList", dp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<RepositoryModel> item) {
 				final RepositoryModel entry = item.getModelObject();
-				
-				ProjectRepositoryPanel row = new ProjectRepositoryPanel("repository", 
+
+				ProjectRepositoryPanel row = new ProjectRepositoryPanel("repository",
 						getLocalizer(), this, showAdmin, entry, getAccessRestrictions());
 				item.add(row);
 			}
diff --git a/src/main/java/com/gitblit/wicket/pages/UsersPage.java b/src/main/java/com/gitblit/wicket/pages/UsersPage.java
index 9526dea..652bdba 100644
--- a/src/main/java/com/gitblit/wicket/pages/UsersPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/UsersPage.java
@@ -23,11 +23,11 @@
 public class UsersPage extends RootPage {
 
 	public UsersPage() {
-		super();		
+		super();
 		setupPage("", "");
 
 		add(new TeamsPanel("teamsPanel", showAdmin).setVisible(showAdmin));
-		
+
 		add(new UsersPanel("usersPanel", showAdmin).setVisible(showAdmin));
 	}
 }
diff --git a/src/main/java/com/gitblit/wicket/panels/ActivityPanel.java b/src/main/java/com/gitblit/wicket/panels/ActivityPanel.java
index b509f65..e5c8e46 100644
--- a/src/main/java/com/gitblit/wicket/panels/ActivityPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/ActivityPanel.java
@@ -40,9 +40,9 @@
 
 /**
  * Renders activity in day-blocks in reverse-chronological order.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class ActivityPanel extends BasePanel {
 
@@ -52,12 +52,13 @@
 		super(wicketId);
 
 		Collections.sort(recentActivity);
-		
+
 		final int shortHashLen = GitBlit.getInteger(Keys.web.shortCommitIdLength, 6);
 		DataView<Activity> activityView = new DataView<Activity>("activity",
 				new ListDataProvider<Activity>(recentActivity)) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<Activity> activityItem) {
 				final Activity entry = activityItem.getModelObject();
 				activityItem.add(WicketUtils.createDatestampLabel("title", entry.startDate, getTimeZone(), getTimeUtils()));
@@ -67,6 +68,7 @@
 						new ListDataProvider<RepositoryCommit>(entry.getCommits())) {
 					private static final long serialVersionUID = 1L;
 
+					@Override
 					public void populateItem(final Item<RepositoryCommit> commitItem) {
 						final RepositoryCommit commit = commitItem.getModelObject();
 
@@ -138,7 +140,7 @@
 								WicketUtils.newObjectParameter(commit.repository, commit.getName()))
 								.setEnabled(commit.getParentCount() > 0));
 						commitItem.add(new BookmarkablePageLink<Void>("tree", TreePage.class,
-								WicketUtils.newObjectParameter(commit.repository, commit.getName())));						
+								WicketUtils.newObjectParameter(commit.repository, commit.getName())));
 					}
 				};
 				activityItem.add(commits);
diff --git a/src/main/java/com/gitblit/wicket/panels/BasePanel.java b/src/main/java/com/gitblit/wicket/panels/BasePanel.java
index e4aeeb0..b60579b 100644
--- a/src/main/java/com/gitblit/wicket/panels/BasePanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/BasePanel.java
@@ -33,7 +33,7 @@
 public abstract class BasePanel extends Panel {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	private transient TimeUtils timeUtils;
 
 	public BasePanel(String wicketId) {
@@ -44,10 +44,10 @@
 		return GitBlit.getBoolean(Keys.web.useClientTimezone, false) ? GitBlitWebSession.get()
 				.getTimezone() : GitBlit.getTimezone();
 	}
-	
+
 	protected TimeUtils getTimeUtils() {
 		if (timeUtils == null) {
-			ResourceBundle bundle;		
+			ResourceBundle bundle;
 			try {
 				bundle = ResourceBundle.getBundle("com.gitblit.wicket.GitBlitWebApp", GitBlitWebSession.get().getLocale());
 			} catch (Throwable t) {
@@ -57,7 +57,7 @@
 		}
 		return timeUtils;
 	}
-	
+
 	protected void setPersonSearchTooltip(Component component, String value, Constants.SearchType searchType) {
 		if (searchType.equals(Constants.SearchType.AUTHOR)) {
 			WicketUtils.setHtmlTooltip(component, getString("gb.searchForAuthor") + " " + value);
@@ -74,6 +74,7 @@
 			super(event, true, new Model<String>(msg));
 		}
 
+		@Override
 		protected String newValue(final String currentValue, final String replacementValue) {
 			String prefix = "var conf = confirm('" + replacementValue + "'); "
 					+ "if (!conf) return false; ";
@@ -90,12 +91,13 @@
 		private static final long serialVersionUID = 1L;
 
 		private String initialValue = "";
-		
+
 		public JavascriptTextPrompt(String event, String msg, String value) {
 			super(event, true, new Model<String>(msg));
 			initialValue = value;
 		}
 
+		@Override
 		protected String newValue(final String currentValue, final String message) {
 			String result = "var userText = prompt('" + message + "','"
 					+ (initialValue == null ? "" : initialValue) + "'); " + "return userText; ";
diff --git a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
index dba4089..4981c8b 100644
--- a/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/BranchesPanel.java
@@ -101,15 +101,16 @@
 			// branches page
 			add(new Label("branches", new StringResourceModel("gb.branches", this, null)));
 		}
-		
+
 		// only allow delete if we have multiple branches
 		final boolean showDelete = showAdmin && branches.size() > 1;
-		
+
 		ListDataProvider<RefModel> branchesDp = new ListDataProvider<RefModel>(branches);
 		DataView<RefModel> branchesView = new DataView<RefModel>("branch", branchesDp) {
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<RefModel> item) {
 				final RefModel entry = item.getModelObject();
 
@@ -136,7 +137,7 @@
 					WicketUtils.setHtmlTooltip(shortlog, shortMessage);
 				}
 				item.add(shortlog);
-				
+
 				if (maxCount <= 0) {
 					Fragment fragment = new Fragment("branchLinks", showDelete? "branchPageAdminLinks" : "branchPageLinks", this);
 					fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
@@ -219,15 +220,15 @@
 							RefLogUtils.deleteRef(user, r, ref);
 						}
 					}
-					
+
 					if (success) {
-						info(MessageFormat.format("Branch \"{0}\" deleted", branch));					
+						info(MessageFormat.format("Branch \"{0}\" deleted", branch));
 					} else {
 						error(MessageFormat.format("Failed to delete branch \"{0}\"", branch));
 					}
 				}
 				r.close();
-				
+
 				// redirect to the owning page
 				PageParameters params = WicketUtils.newRepositoryParameter(repositoryModel.name);
 				String relativeUrl = urlFor(getPage().getClass(), params).toString();
@@ -235,7 +236,7 @@
 				getRequestCycle().setRequestTarget(new RedirectRequestTarget(absoluteUrl));
 			}
 		};
-		
+
 		deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
 				"Delete branch \"{0}\"?", entry.displayName )));
 		return deleteLink;
diff --git a/src/main/java/com/gitblit/wicket/panels/BulletListPanel.java b/src/main/java/com/gitblit/wicket/panels/BulletListPanel.java
index e49223e..defc08e 100644
--- a/src/main/java/com/gitblit/wicket/panels/BulletListPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/BulletListPanel.java
@@ -38,6 +38,7 @@
 		DataView<String> listView = new DataView<String>("list", listDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<String> item) {
 				String entry = item.getModelObject();
 				item.add(new Label("listItem", entry));
diff --git a/src/main/java/com/gitblit/wicket/panels/CommitLegendPanel.java b/src/main/java/com/gitblit/wicket/panels/CommitLegendPanel.java
index 1e906ef..3f31eff 100644
--- a/src/main/java/com/gitblit/wicket/panels/CommitLegendPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/CommitLegendPanel.java
@@ -44,6 +44,7 @@
 		DataView<ChangeType> legendsView = new DataView<ChangeType>("legend", legendDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<ChangeType> item) {
 				ChangeType entry = item.getModelObject();
 
diff --git a/src/main/java/com/gitblit/wicket/panels/CompressedDownloadsPanel.java b/src/main/java/com/gitblit/wicket/panels/CompressedDownloadsPanel.java
index 122ae55..d8a4a10 100644
--- a/src/main/java/com/gitblit/wicket/panels/CompressedDownloadsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/CompressedDownloadsPanel.java
@@ -17,7 +17,6 @@
 
 import java.util.List;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.Item;
@@ -35,13 +34,13 @@
 
 	public CompressedDownloadsPanel(String id, final String baseUrl, final String repositoryName, final String objectId, final String path) {
 		super(id);
-		
+
 		List<String> types = GitBlit.getStrings(Keys.web.compressedDownloads);
 		if (types.isEmpty()) {
 			types.add(Format.zip.name());
 			types.add(Format.gz.name());
 		}
-		
+
 		ListDataProvider<String> refsDp = new ListDataProvider<String>(types);
 		DataView<String> refsView = new DataView<String>("compressedLinks", refsDp) {
 			private static final long serialVersionUID = 1L;
@@ -52,12 +51,12 @@
 				super.onBeforeRender();
 				counter = 0;
 			}
-			
+
 			@Override
 			public void populateItem(final Item<String> item) {
 				String compressionType = item.getModelObject();
 				Format format = Format.fromName(compressionType);
-				
+
 				String href = DownloadZipServlet.asLink(baseUrl, repositoryName,
 						objectId, path, format);
 				LinkPanel c = new LinkPanel("compressedLink", null, format.name(), href);
@@ -72,7 +71,7 @@
 			}
 		};
 		add(refsView);
-		
+
 		setVisible(GitBlit.getBoolean(Keys.web.allowZipDownloads, true));
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/gitblit/wicket/panels/DigestsPanel.java b/src/main/java/com/gitblit/wicket/panels/DigestsPanel.java
index 3590dfe..10d5d1b 100644
--- a/src/main/java/com/gitblit/wicket/panels/DigestsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/DigestsPanel.java
@@ -49,7 +49,7 @@
 	private static final long serialVersionUID = 1L;
 
 	private final boolean hasChanges;
-	
+
 	private boolean hasMore;
 
 	public DigestsPanel(String wicketId, List<DailyLogEntry> digests) {
@@ -63,11 +63,12 @@
 		final DateFormat df = new SimpleDateFormat(dateFormat);
 		df.setTimeZone(timezone);
 		final Calendar cal = Calendar.getInstance(timezone);
-		
+
 		ListDataProvider<DailyLogEntry> dp = new ListDataProvider<DailyLogEntry>(digests);
 		DataView<DailyLogEntry> pushView = new DataView<DailyLogEntry>("change", dp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<DailyLogEntry> logItem) {
 				final DailyLogEntry change = logItem.getModelObject();
 				String fullRefName = change.getChangedRefs().get(0);
@@ -79,7 +80,7 @@
 					shortRefName = shortRefName.substring(Constants.R_TAGS.length());
 					isTag = true;
 				}
-				
+
 				String fuzzydate;
 				TimeUtils tu = getTimeUtils();
 				Date pushDate = change.date;
@@ -122,7 +123,7 @@
                 } else {
                 	logItem.add(new Label("whoChanged").setVisible(false));
                 }
-				
+
 				String preposition = "gb.of";
 				boolean isDelete = false;
 				String what;
@@ -150,17 +151,17 @@
 					break;
 				default:
 					what = MessageFormat.format(change.getCommitCount() > 1 ? getString("gb.commitsTo") : getString("gb.oneCommitTo"), change.getCommitCount());
-					
+
 					if (change.getAuthorCount() == 1) {
 						by = MessageFormat.format(getString("gb.byOneAuthor"), change.getAuthorIdent().getName());
 					} else {
-						by = MessageFormat.format(getString("gb.byNAuthors"), change.getAuthorCount());	
+						by = MessageFormat.format(getString("gb.byNAuthors"), change.getAuthorCount());
 					}
 					break;
 				}
 				logItem.add(new Label("whatChanged", what));
 				logItem.add(new Label("byAuthors", by).setVisible(!StringUtils.isEmpty(by)));
-				
+
 				if (isDelete) {
 					// can't link to deleted ref
 					logItem.add(new Label("refChanged", shortRefName));
@@ -173,19 +174,19 @@
 					logItem.add(new LinkPanel("refChanged", null, shortRefName,
 						TreePage.class, WicketUtils.newObjectParameter(change.repository, fullRefName)));
 				}
-				
+
 				// to/from/etc
 				logItem.add(new Label("repoPreposition", getString(preposition)));
 				String repoName = StringUtils.stripDotGit(change.repository);
 				logItem.add(new LinkPanel("repoChanged", null, repoName,
 						SummaryPage.class, WicketUtils.newRepositoryParameter(change.repository)));
-				
+
 				int maxCommitCount = 5;
 				List<RepositoryCommit> commits = change.getCommits();
 				if (commits.size() > maxCommitCount) {
-					commits = new ArrayList<RepositoryCommit>(commits.subList(0,  maxCommitCount));					
+					commits = new ArrayList<RepositoryCommit>(commits.subList(0,  maxCommitCount));
 				}
-				
+
 				// compare link
 				String compareLinkText = null;
 				if ((change.getCommitCount() <= maxCommitCount) && (change.getCommitCount() > 1)) {
@@ -201,20 +202,21 @@
 					String startRangeId = change.getOldId(fullRefName);
 					logItem.add(new LinkPanel("compareLink", null, compareLinkText, ComparePage.class, WicketUtils.newRangeParameter(change.repository, startRangeId, endRangeId)));
 				}
-				
+
 				final boolean showSwatch = GitBlit.getBoolean(Keys.web.repositoryListSwatches, true);
-				
+
 				ListDataProvider<RepositoryCommit> cdp = new ListDataProvider<RepositoryCommit>(commits);
 				DataView<RepositoryCommit> commitsView = new DataView<RepositoryCommit>("commit", cdp) {
 					private static final long serialVersionUID = 1L;
 
+					@Override
 					public void populateItem(final Item<RepositoryCommit> commitItem) {
 						final RepositoryCommit commit = commitItem.getModelObject();
 
 						// author gravatar
 						commitItem.add(new GravatarImage("commitAuthor", commit.getAuthorIdent().getName(),
 								commit.getAuthorIdent().getEmailAddress(), null, 16, false, false));
-						
+
 						// merge icon
 						if (commit.getParentCount() > 1) {
 							commitItem.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
@@ -245,7 +247,7 @@
 						WicketUtils.setCssClass(commitHash, "shortsha1");
 						WicketUtils.setHtmlTooltip(commitHash, commit.getName());
 						commitItem.add(commitHash);
-						
+
 						if (showSwatch) {
 							// set repository color
 							String color = StringUtils.getColor(StringUtils.stripDotGit(change.repository));
@@ -257,14 +259,14 @@
 				logItem.add(commitsView);
 			}
 		};
-		
+
 		add(pushView);
 	}
 
 	public boolean hasMore() {
 		return hasMore;
 	}
-	
+
 	public boolean hideIfEmpty() {
 		setVisible(hasChanges);
 		return hasChanges;
diff --git a/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java b/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
index 60a8a3d..d1a632e 100644
--- a/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
+++ b/src/main/java/com/gitblit/wicket/panels/DropDownMenu.java
@@ -38,6 +38,7 @@
 		DataView<DropDownMenuItem> view = new DataView<DropDownMenuItem>("menuItems", items) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<DropDownMenuItem> item) {
 				DropDownMenuItem entry = item.getModelObject();
 				if (entry.isDivider()) {
diff --git a/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java b/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java
index 3e70cce..c15a0a5 100644
--- a/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/FederationProposalsPanel.java
@@ -52,6 +52,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<FederationProposal> item) {
 				final FederationProposal entry = item.getModelObject();
 				item.add(new LinkPanel("url", "list", entry.url, ReviewProposalPage.class,
diff --git a/src/main/java/com/gitblit/wicket/panels/FederationRegistrationsPanel.java b/src/main/java/com/gitblit/wicket/panels/FederationRegistrationsPanel.java
index ff94717..344af49 100644
--- a/src/main/java/com/gitblit/wicket/panels/FederationRegistrationsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/FederationRegistrationsPanel.java
@@ -55,6 +55,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<FederationModel> item) {
 				final FederationModel entry = item.getModelObject();
 				item.add(new LinkPanel("url", "list", entry.url, FederationRegistrationPage.class,
diff --git a/src/main/java/com/gitblit/wicket/panels/FederationTokensPanel.java b/src/main/java/com/gitblit/wicket/panels/FederationTokensPanel.java
index 3454492..afe553c 100644
--- a/src/main/java/com/gitblit/wicket/panels/FederationTokensPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/FederationTokensPanel.java
@@ -71,6 +71,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<String[]> item) {
 				final String[] entry = item.getModelObject();
 				final FederationToken token = FederationToken.fromName(entry[0]);
diff --git a/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java b/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java
index a5b7413..4c57926 100644
--- a/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java
+++ b/src/main/java/com/gitblit/wicket/panels/FilterableProjectList.java
@@ -39,8 +39,8 @@
 
 /**
  * A client-side filterable rich project list which uses Freemarker, Wicket,
- * and AngularJS. 
- * 
+ * and AngularJS.
+ *
  * @author James Moger
  *
  */
@@ -49,21 +49,21 @@
 	private static final long serialVersionUID = 1L;
 
 	private final List<ProjectModel> projects;
-	
+
 	private String title;
-	
+
 	private String iconClass;
-	
+
 	public FilterableProjectList(String id, List<ProjectModel> projects) {
 		super(id);
 		this.projects = projects;
 	}
-	
+
 	public void setTitle(String title, String iconClass) {
 		this.title = title;
 		this.iconClass = iconClass;
 	}
-	
+
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
@@ -71,18 +71,18 @@
 		String id = getId();
 		String ngCtrl = id + "Ctrl";
 		String ngList = id + "List";
-		
+
 		Map<String, Object> values = new HashMap<String, Object>();
 		values.put("ngCtrl",  ngCtrl);
 		values.put("ngList",  ngList);
-		
+
 		// use Freemarker to setup an AngularJS/Wicket html snippet
 		FreemarkerPanel panel = new FreemarkerPanel("listComponent", "FilterableProjectList.fm", values);
 		panel.setParseGeneratedMarkup(true);
 		panel.setRenderBodyOnly(true);
 		add(panel);
-		
-		// add the Wicket controls that are referenced in the snippet 
+
+		// add the Wicket controls that are referenced in the snippet
 		String listTitle = StringUtils.isEmpty(title) ? getString("gb.projects") : title;
 		panel.add(new Label(ngList + "Title", MessageFormat.format("{0} ({1})", listTitle, projects.size())));
 		if (StringUtils.isEmpty(iconClass)) {
@@ -92,7 +92,7 @@
 			WicketUtils.setCssClass(icon, iconClass);
 			panel.add(icon);
 		}
-		
+
 		String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy");
 		final DateFormat df = new SimpleDateFormat(format);
 		df.setTimeZone(getTimeZone());
@@ -118,7 +118,7 @@
 			item.c = proj.repositories.size();
 			list.add(item);
 		}
-		
+
 		// inject an AngularJS controller with static data
 		NgController ctrl = new NgController(ngCtrl);
 		ctrl.addVariable(ngList, list);
@@ -128,7 +128,7 @@
 	protected class ProjectListItem implements Serializable {
 
 		private static final long serialVersionUID = 1L;
-		
+
 		String p; // path
 		String n; // name
 		String t; // time ago
diff --git a/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java b/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java
index 6c43b78..d68155e 100644
--- a/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java
+++ b/src/main/java/com/gitblit/wicket/panels/FilterableRepositoryList.java
@@ -38,8 +38,8 @@
 
 /**
  * A client-side filterable rich repository list which uses Freemarker, Wicket,
- * and AngularJS. 
- * 
+ * and AngularJS.
+ *
  * @author James Moger
  *
  */
@@ -48,23 +48,23 @@
 	private static final long serialVersionUID = 1L;
 
 	private final List<RepositoryModel> repositories;
-	
+
 	private String title;
-	
+
 	private String iconClass;
-	
+
 	private boolean allowCreate;
-	
+
 	public FilterableRepositoryList(String id, List<RepositoryModel> repositories) {
 		super(id);
 		this.repositories = repositories;
 	}
-	
+
 	public void setTitle(String title, String iconClass) {
 		this.title = title;
 		this.iconClass = iconClass;
 	}
-	
+
 	public void setAllowCreate(boolean value) {
 		this.allowCreate = value;
 	}
@@ -76,18 +76,18 @@
 		String id = getId();
 		String ngCtrl = id + "Ctrl";
 		String ngList = id + "List";
-		
+
 		Map<String, Object> values = new HashMap<String, Object>();
 		values.put("ngCtrl",  ngCtrl);
 		values.put("ngList",  ngList);
-		
+
 		// use Freemarker to setup an AngularJS/Wicket html snippet
 		FreemarkerPanel panel = new FreemarkerPanel("listComponent", "FilterableRepositoryList.fm", values);
 		panel.setParseGeneratedMarkup(true);
 		panel.setRenderBodyOnly(true);
 		add(panel);
-		
-		// add the Wicket controls that are referenced in the snippet 
+
+		// add the Wicket controls that are referenced in the snippet
 		String listTitle = StringUtils.isEmpty(title) ? getString("gb.repositories") : title;
 		panel.add(new Label(ngList + "Title", MessageFormat.format("{0} ({1})", listTitle, repositories.size())));
 		if (StringUtils.isEmpty(iconClass)) {
@@ -97,13 +97,13 @@
 			WicketUtils.setCssClass(icon, iconClass);
 			panel.add(icon);
 		}
-		
+
 		if (allowCreate) {
 			panel.add(new LinkPanel(ngList + "Button", "btn btn-mini", getString("gb.newRepository"), EditRepositoryPage.class));
 		} else {
 			panel.add(new Label(ngList + "Button").setVisible(false));
 		}
-		
+
 		String format = GitBlit.getString(Keys.web.datestampShortFormat, "MM/dd/yy");
 		final DateFormat df = new SimpleDateFormat(format);
 		df.setTimeZone(getTimeZone());
@@ -111,13 +111,13 @@
 		// prepare the simplified repository models list
 		List<RepoListItem> list = new ArrayList<RepoListItem>();
 		for (RepositoryModel repo : repositories) {
-			String name = StringUtils.stripDotGit(repo.name); 
+			String name = StringUtils.stripDotGit(repo.name);
 			String path = "";
 			if (name.indexOf('/') > -1) {
 				path = name.substring(0, name.lastIndexOf('/') + 1);
 				name = name.substring(name.lastIndexOf('/') + 1);
 			}
-			
+
 			RepoListItem item = new RepoListItem();
 			item.n = name;
 			item.p = path;
@@ -130,17 +130,17 @@
 			item.wc = repo.isBare ? 0 : 1;
 			list.add(item);
 		}
-		
+
 		// inject an AngularJS controller with static data
 		NgController ctrl = new NgController(ngCtrl);
 		ctrl.addVariable(ngList, list);
 		add(new HeaderContributor(ctrl));
 	}
-	
+
 	protected class RepoListItem implements Serializable {
 
 		private static final long serialVersionUID = 1L;
-		
+
 		String r; // repository
 		String n; // name
 		String p; // project/path
diff --git a/src/main/java/com/gitblit/wicket/panels/GravatarImage.java b/src/main/java/com/gitblit/wicket/panels/GravatarImage.java
index da20e9b..741328c 100644
--- a/src/main/java/com/gitblit/wicket/panels/GravatarImage.java
+++ b/src/main/java/com/gitblit/wicket/panels/GravatarImage.java
@@ -33,9 +33,9 @@
 
 /**
  * Represents a Gravatar image and links to the Gravatar profile page.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class GravatarImage extends Panel {
 
@@ -44,7 +44,7 @@
 	public GravatarImage(String id, PersonIdent person) {
 		this(id, person, 0);
 	}
-	
+
 	public GravatarImage(String id, PersonIdent person, int width) {
 		this(id, person, width, true);
 	}
@@ -52,7 +52,7 @@
 	public GravatarImage(String id, PersonIdent person, int width, boolean linked) {
 		this(id, person.getName(), person.getEmailAddress(), "gravatar", width, linked, true);
 	}
-	
+
 	public GravatarImage(String id, String username, String emailaddress, String cssClass, int width, boolean linked, boolean identicon) {
 		super(id);
 
diff --git a/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java b/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java
index 5e03e01..10a8b57 100644
--- a/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/HistoryPanel.java
@@ -107,13 +107,13 @@
 				tw.release();
 			}
 		}
-		
+
 		final boolean isTree = matchingPath == null ? true : matchingPath.isTree();
 		final boolean isSubmodule = matchingPath == null ? false : matchingPath.isSubmodule();
 
 		// submodule
 		final String submodulePath;
-		final boolean hasSubmodule; 
+		final boolean hasSubmodule;
 		if (isSubmodule) {
 			SubmoduleModel submodule = getSubmodule(submodules, repositoryName, matchingPath == null ? null : matchingPath.path);
 			submodulePath = submodule.gitblitPath;
@@ -122,7 +122,7 @@
 			submodulePath = "";
 			hasSubmodule = false;
 		}
-		
+
 		final Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(r, showRemoteRefs);
 		List<RevCommit> commits;
 		if (pageResults) {
@@ -149,6 +149,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<RevCommit> item) {
 				final RevCommit entry = item.getModelObject();
 				final Date date = JGitUtils.getCommitDate(entry);
@@ -195,9 +196,9 @@
 							TreePage.class, WicketUtils.newObjectParameter(
 									repositoryName, entry.getName()));
 					WicketUtils.setCssClass(commitHash, "shortsha1");
-					WicketUtils.setHtmlTooltip(commitHash, entry.getName());					
+					WicketUtils.setHtmlTooltip(commitHash, entry.getName());
 					item.add(commitHash);
-					
+
 					Fragment links = new Fragment("historyLinks", "treeLinks", this);
 					links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
 							WicketUtils.newObjectParameter(repositoryName, entry.getName())));
@@ -218,14 +219,14 @@
 								TreePage.class, WicketUtils.newObjectParameter(
 										submodulePath, submoduleId));
 						WicketUtils.setCssClass(commitHash, "shortsha1");
-						WicketUtils.setHtmlTooltip(commitHash, submoduleId);					
+						WicketUtils.setHtmlTooltip(commitHash, submoduleId);
 						item.add(commitHash.setEnabled(hasSubmodule));
 					}
 					Fragment links = new Fragment("historyLinks", "treeLinks", this);
 					links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
 							WicketUtils.newObjectParameter(repositoryName, entry.getName())));
 					item.add(links);
-				} else {					
+				} else {
 					// commit
 					item.add(new Label("hashLabel", getString("gb.blob") + "@"));
 					LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
@@ -234,7 +235,7 @@
 					WicketUtils.setCssClass(commitHash, "sha1");
 					WicketUtils.setHtmlTooltip(commitHash, entry.getName());
 					item.add(commitHash);
-					
+
 					Fragment links = new Fragment("historyLinks", "blobLinks", this);
 					links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
 							WicketUtils.newObjectParameter(repositoryName, entry.getName())));
@@ -276,7 +277,7 @@
 	public boolean hasMore() {
 		return hasMore;
 	}
-	
+
 	protected SubmoduleModel getSubmodule(Map<String, SubmoduleModel> submodules, String repositoryName, String path) {
 		SubmoduleModel model = submodules.get(path);
 		if (model == null) {
@@ -289,7 +290,7 @@
 			// extract the repository name from the clone url
 			List<String> patterns = GitBlit.getStrings(Keys.git.submoduleUrlPatterns);
 			String submoduleName = StringUtils.extractRepositoryPath(model.url, patterns.toArray(new String[0]));
-			
+
 			// determine the current path for constructing paths relative
 			// to the current repository
 			String currentPath = "";
@@ -332,10 +333,10 @@
 					return model;
 				}
 			}
-			
+
 			// we do not have a copy of the submodule, but we need a path
 			model.gitblitPath = candidates.get(0);
 			return model;
-		}		
+		}
 	}
 }
diff --git a/src/main/java/com/gitblit/wicket/panels/LinkPanel.java b/src/main/java/com/gitblit/wicket/panels/LinkPanel.java
index 21470b2..cdcf574 100644
--- a/src/main/java/com/gitblit/wicket/panels/LinkPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/LinkPanel.java
@@ -107,7 +107,7 @@
 		link.add(new Label("label", labelModel));
 		add(link);
 	}
-	
+
 	public void setNoFollow() {
 		Component c = get("link");
 		c.add(new SimpleAttributeModifier("rel", "nofollow"));
diff --git a/src/main/java/com/gitblit/wicket/panels/LogPanel.java b/src/main/java/com/gitblit/wicket/panels/LogPanel.java
index a9f80db..eba0dd3 100644
--- a/src/main/java/com/gitblit/wicket/panels/LogPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/LogPanel.java
@@ -32,10 +32,10 @@
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 
+import com.gitblit.BranchGraphServlet;
 import com.gitblit.Constants;
 import com.gitblit.GitBlit;
 import com.gitblit.Keys;
-import com.gitblit.BranchGraphServlet;
 import com.gitblit.models.RefModel;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.StringUtils;
@@ -75,10 +75,10 @@
 		// inaccurate way to determine if there are more commits.
 		// works unless commits.size() represents the exact end.
 		hasMore = commits.size() >= itemsPerPage;
-		
+
 		final String baseUrl = WicketUtils.getGitblitURL(getRequest());
 		final boolean showGraph = GitBlit.getBoolean(Keys.web.showBranchGraph, true);
-		
+
 		MarkupContainer graph = new WebMarkupContainer("graph");
 		add(graph);
 		if (!showGraph || commits.isEmpty()) {
@@ -107,6 +107,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<RevCommit> item) {
 				final RevCommit entry = item.getModelObject();
 				final Date date = JGitUtils.getCommitDate(entry);
@@ -120,7 +121,7 @@
 								objectId, author, Constants.SearchType.AUTHOR));
 				setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
 				item.add(authorLink);
-				
+
 				// merge icon
 				if (entry.getParentCount() > 1) {
 					item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
@@ -153,7 +154,7 @@
 				WicketUtils.setCssClass(commitHash, "shortsha1");
 				WicketUtils.setHtmlTooltip(commitHash, entry.getName());
 				item.add(commitHash);
-				
+
 				item.add(new BookmarkablePageLink<Void>("diff", CommitDiffPage.class, WicketUtils
 						.newObjectParameter(repositoryName, entry.getName())).setEnabled(entry
 						.getParentCount() > 0));
diff --git a/src/main/java/com/gitblit/wicket/panels/NavigationPanel.java b/src/main/java/com/gitblit/wicket/panels/NavigationPanel.java
index 436db37..393dd13 100644
--- a/src/main/java/com/gitblit/wicket/panels/NavigationPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/NavigationPanel.java
@@ -42,6 +42,7 @@
 		DataView<PageRegistration> refsView = new DataView<PageRegistration>("navLink", refsDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<PageRegistration> item) {
 				PageRegistration entry = item.getModelObject();
 				if (entry.hiddenPhone) {
diff --git a/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java
index d7f1f78..3c09e7c 100644
--- a/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java
+++ b/src/main/java/com/gitblit/wicket/panels/ObjectContainer.java
@@ -83,7 +83,7 @@
 		if (parent instanceof Fragment) {
 			// must check for fragment, otherwise we end up in Wicket namespace
 			parent = parent.getParent();
-		}		
+		}
 		if (parent != null) {
 			ResourceReference resRef = new ResourceReference(parent.getClass(), src, false);
 			return (urlFor(resRef).toString());
@@ -92,6 +92,7 @@
 		return (src);
 	}
 
+	@Override
 	public void onComponentTag(ComponentTag tag) {
 		super.onComponentTag(tag);
 
@@ -122,6 +123,7 @@
 		}
 	}
 
+	@Override
 	public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
 		Response response = getResponse();
 		response.write("\n");
diff --git a/src/main/java/com/gitblit/wicket/panels/PagerPanel.java b/src/main/java/com/gitblit/wicket/panels/PagerPanel.java
index a5dbb9e..2d774c4 100644
--- a/src/main/java/com/gitblit/wicket/panels/PagerPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/PagerPanel.java
@@ -39,10 +39,10 @@
 		int[] deltas;
 		if (currentPage == 1) {
 			// [1], 2, 3, 4, 5
-			deltas = new int[] { 0, 1, 2, 3, 4 };			
+			deltas = new int[] { 0, 1, 2, 3, 4 };
 		} else if (currentPage == 2) {
 			// 1, [2], 3, 4, 5
-			deltas = new int[] { -1, 0, 1, 2, 3 };			
+			deltas = new int[] { -1, 0, 1, 2, 3 };
 		} else {
 			// 1, 2, [3], 4, 5
 			deltas = new int[] { -2, -1, 0, 1, 2 };
@@ -65,6 +65,7 @@
 		final DataView<PageObject> pagesView = new DataView<PageObject>("page", pagesProvider) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<PageObject> item) {
 				PageObject pageItem = item.getModelObject();
 				PageParameters pageParams = new PageParameters(baseParams);
@@ -83,7 +84,7 @@
 	private class PageObject implements Serializable {
 
 		private static final long serialVersionUID = 1L;
-		
+
 		String text;
 		int page;
 
diff --git a/src/main/java/com/gitblit/wicket/panels/PathBreadcrumbsPanel.java b/src/main/java/com/gitblit/wicket/panels/PathBreadcrumbsPanel.java
index f6c0e4f..2ac7bf9 100644
--- a/src/main/java/com/gitblit/wicket/panels/PathBreadcrumbsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/PathBreadcrumbsPanel.java
@@ -56,6 +56,7 @@
 		DataView<BreadCrumb> pathsView = new DataView<BreadCrumb>("path", crumbsDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<BreadCrumb> item) {
 				final BreadCrumb entry = item.getModelObject();
 				String path = entry.path;
diff --git a/src/main/java/com/gitblit/wicket/panels/ReflogPanel.java b/src/main/java/com/gitblit/wicket/panels/ReflogPanel.java
index 99ce55a..d63f26c 100644
--- a/src/main/java/com/gitblit/wicket/panels/ReflogPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/ReflogPanel.java
@@ -55,7 +55,7 @@
 	private static final long serialVersionUID = 1L;
 
 	private final boolean hasChanges;
-	
+
 	private boolean hasMore;
 
 	public ReflogPanel(String wicketId, final RepositoryModel model, Repository r, int limit, int pageOffset) {
@@ -77,9 +77,9 @@
 		// works unless commits.size() represents the exact end.
 		hasMore = changes.size() >= changesPerPage;
 		hasChanges = changes.size() > 0;
-		
+
 		setup(changes);
-		
+
 		// determine to show pager, more, or neither
 		if (limit <= 0) {
 			// no display limit
@@ -102,14 +102,14 @@
 			}
 		}
 	}
-	
+
 	public ReflogPanel(String wicketId, List<RefLogEntry> changes) {
 		super(wicketId);
 		hasChanges = changes.size() > 0;
 		setup(changes);
 		add(new Label("moreChanges").setVisible(false));
 	}
-	
+
 	protected void setup(List<RefLogEntry> changes) {
 		final int hashLen = GitBlit.getInteger(Keys.web.shortCommitIdLength, 6);
 
@@ -118,11 +118,12 @@
 		final DateFormat df = new SimpleDateFormat(dateFormat);
 		df.setTimeZone(timezone);
 		final Calendar cal = Calendar.getInstance(timezone);
-		
+
 		ListDataProvider<RefLogEntry> dp = new ListDataProvider<RefLogEntry>(changes);
 		DataView<RefLogEntry> changeView = new DataView<RefLogEntry>("change", dp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<RefLogEntry> changeItem) {
 				final RefLogEntry change = changeItem.getModelObject();
 				String fullRefName = change.getChangedRefs().get(0);
@@ -134,7 +135,7 @@
 					shortRefName = shortRefName.substring(Constants.R_TAGS.length());
 					isTag = true;
 				}
-				
+
 				String fuzzydate;
 				TimeUtils tu = getTimeUtils();
 				Date changeDate = change.date;
@@ -175,7 +176,7 @@
 					changeItem.add(new LinkPanel("whoChanged", null, change.user.getDisplayName(),
 							UserPage.class, WicketUtils.newUsernameParameter(change.user.username)));
 				}
-				
+
 				boolean isDelete = false;
 				boolean isRewind = false;
 				String what;
@@ -202,19 +203,19 @@
 					isRewind = true;
 				default:
 					what = MessageFormat.format(change.getCommitCount() > 1 ? getString("gb.pushedNCommitsTo") : getString("gb.pushedOneCommitTo") , change.getCommitCount());
-					
+
 					if (change.getAuthorCount() == 1) {
 						by = MessageFormat.format(getString("gb.byOneAuthor"), change.getAuthorIdent().getName());
 					} else {
-						by = MessageFormat.format(getString("gb.byNAuthors"), change.getAuthorCount());	
+						by = MessageFormat.format(getString("gb.byNAuthors"), change.getAuthorCount());
 					}
 					break;
 				}
 				changeItem.add(new Label("whatChanged", what));
 				changeItem.add(new Label("byAuthors", by).setVisible(!StringUtils.isEmpty(by)));
-				
+
 				changeItem.add(new Label("refRewind", getString("gb.rewind")).setVisible(isRewind));
-				
+
 				if (isDelete) {
 					// can't link to deleted ref
 					changeItem.add(new Label("refChanged", shortRefName));
@@ -227,13 +228,13 @@
 					changeItem.add(new LinkPanel("refChanged", null, shortRefName,
 						TreePage.class, WicketUtils.newObjectParameter(change.repository, fullRefName)));
 				}
-				
+
 				int maxCommitCount = 5;
 				List<RepositoryCommit> commits = change.getCommits();
 				if (commits.size() > maxCommitCount) {
-					commits = new ArrayList<RepositoryCommit>(commits.subList(0,  maxCommitCount));					
+					commits = new ArrayList<RepositoryCommit>(commits.subList(0,  maxCommitCount));
 				}
-				
+
 				// compare link
 				String compareLinkText = null;
 				if ((change.getCommitCount() <= maxCommitCount) && (change.getCommitCount() > 1)) {
@@ -249,18 +250,19 @@
 					String startRangeId = change.getOldId(fullRefName);
 					changeItem.add(new LinkPanel("compareLink", null, compareLinkText, ComparePage.class, WicketUtils.newRangeParameter(change.repository, startRangeId, endRangeId)));
 				}
-				
+
 				ListDataProvider<RepositoryCommit> cdp = new ListDataProvider<RepositoryCommit>(commits);
 				DataView<RepositoryCommit> commitsView = new DataView<RepositoryCommit>("commit", cdp) {
 					private static final long serialVersionUID = 1L;
 
+					@Override
 					public void populateItem(final Item<RepositoryCommit> commitItem) {
 						final RepositoryCommit commit = commitItem.getModelObject();
 
 						// author gravatar
 						commitItem.add(new GravatarImage("commitAuthor", commit.getAuthorIdent().getName(),
 								commit.getAuthorIdent().getEmailAddress(), null, 16, false, false));
-						
+
 						// merge icon
 						if (commit.getParentCount() > 1) {
 							commitItem.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
@@ -297,14 +299,14 @@
 				changeItem.add(commitsView);
 			}
 		};
-		
+
 		add(changeView);
 	}
 
 	public boolean hasMore() {
 		return hasMore;
 	}
-	
+
 	public boolean hideIfEmpty() {
 		setVisible(hasChanges);
 		return hasChanges;
diff --git a/src/main/java/com/gitblit/wicket/panels/RefsPanel.java b/src/main/java/com/gitblit/wicket/panels/RefsPanel.java
index e477b65..1a76311 100644
--- a/src/main/java/com/gitblit/wicket/panels/RefsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/RefsPanel.java
@@ -43,7 +43,7 @@
 public class RefsPanel extends Panel {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public RefsPanel(String id, final String repositoryName, RevCommit c,
 			Map<ObjectId, List<RefModel>> refs) {
 		this(id, repositoryName, refs.get(c.getId()));
@@ -65,7 +65,7 @@
 				boolean remote2 = o2.displayName.startsWith(Constants.R_REMOTES);
 				if (remote1 && remote2) {
 					// both are remote heads, sort by name
-					return o1.displayName.compareTo(o2.displayName);	
+					return o1.displayName.compareTo(o2.displayName);
 				}
 				if (remote1) {
 					// o1 is remote, o2 comes first
@@ -79,7 +79,7 @@
 				return o1.displayName.compareTo(o2.displayName);
 			}
 		});
-		
+
 		// count remote and determine if we should insert a break
 		int remoteCount = 0;
 		for (RefModel ref : refs) {
@@ -88,12 +88,13 @@
 			}
 		}
 		final boolean shouldBreak = remoteCount < refs.size();
-		
+
 		ListDataProvider<RefModel> refsDp = new ListDataProvider<RefModel>(refs);
 		DataView<RefModel> refsView = new DataView<RefModel>("ref", refsDp) {
 			private static final long serialVersionUID = 1L;
 			private boolean alreadyInsertedBreak = !shouldBreak;
 
+			@Override
 			public void populateItem(final Item<RefModel> item) {
 				RefModel entry = item.getModelObject();
 				String name = entry.displayName;
@@ -123,9 +124,9 @@
 					// Pull Request ref
 					name = "pull #" + name.substring(Constants.R_PULL.length());
 					if (name.endsWith("/head")) {
-						// strip pull request head from name 
+						// strip pull request head from name
 						name = name.substring(0, name.length() - "/head".length());
-					}					
+					}
 					cssClass = "pullRef";
 				} else if (name.startsWith(Constants.R_REMOTES)) {
 					// remote branch
diff --git a/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java b/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java
index 4156cd1..b728082 100644
--- a/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/RegistrantPermissionsPanel.java
@@ -52,17 +52,17 @@
 
 /**
  * Allows user to manipulate registrant access permissions.
- * 
+ *
  * @author James Moger
  *
  */
 public class RegistrantPermissionsPanel extends BasePanel {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	public enum Show {
 		specified, mutable, effective;
-		
+
 		public boolean show(RegistrantAccessPermission ap) {
 			switch (this) {
 			case specified:
@@ -76,9 +76,9 @@
 			}
 		}
 	}
-	
+
 	private Show activeState = Show.mutable;
-	
+
 	public RegistrantPermissionsPanel(String wicketId, RegistrantType registrantType, List<String> allRegistrants, final List<RegistrantAccessPermission> permissions, final Map<AccessPermission, String> translations) {
 		super(wicketId);
 		setOutputMarkupId(true);
@@ -97,7 +97,7 @@
 		 */
 		RefreshingView<RegistrantAccessPermission> dataView = new RefreshingView<RegistrantAccessPermission>("permissionRow") {
 			private static final long serialVersionUID = 1L;
-		
+
 			@Override
             protected Iterator<IModel<RegistrantAccessPermission>> getItemModels() {
                 // the iterator returns RepositoryPermission objects, but we need it to
@@ -116,7 +116,8 @@
                 // 'even' for decoration
                 return new OddEvenItem<RegistrantAccessPermission>(id, index, model);
             }
-            
+
+			@Override
 			public void populateItem(final Item<RegistrantAccessPermission> item) {
 				final RegistrantAccessPermission entry = item.getModelObject();
 				if (RegistrantType.REPOSITORY.equals(entry.registrantType)) {
@@ -135,7 +136,7 @@
 						Label label = new Label("registrant", entry.registrant);
 						WicketUtils.setCssStyle(label, "font-weight: bold;");
 						item.add(label);
-					}					
+					}
 				} else if (RegistrantType.USER.equals(entry.registrantType)) {
 					// user
 					PersonIdent ident = new PersonIdent(entry.registrant, "");
@@ -146,8 +147,8 @@
 
 					Fragment userFragment = new Fragment("registrant", "userRegistrant", RegistrantPermissionsPanel.this);
 					userFragment.add(new GravatarImage("userAvatar", ident, 20, false));
-					userFragment.add(new Label("userName", entry.registrant));					
-					item.add(userFragment);					
+					userFragment.add(new Label("userName", entry.registrant));
+					item.add(userFragment);
 				} else {
 					// team
 					Fragment teamFragment = new Fragment("registrant", "teamRegistrant", RegistrantPermissionsPanel.this);
@@ -209,9 +210,10 @@
 				permissionChoice.setOutputMarkupId(true);
 				if (entry.mutable) {
 					permissionChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
-		           
+
 						private static final long serialVersionUID = 1L;
 
+						@Override
 						protected void onUpdate(AjaxRequestTarget target) {
 							target.addComponent(permissionChoice);
 						}
@@ -265,29 +267,30 @@
 					copy.source = copy.registrant;
 				}
 				permissions.add(copy);
-				
+
 				// resort permissions after insert to convey idea of eval order
 				Collections.sort(permissions);
-				
+
 				// remove registrant from available choices
 				registrants.remove(rp.registrant);
-				
+
 				// force the panel to refresh
 				target.addComponent(RegistrantPermissionsPanel.this);
 			}
 		};
 		addPermissionForm.add(button);
-		
+
 		// only show add permission form if we have a registrant choice
 		add(addPermissionForm.setVisible(registrants.size() > 0));
 	}
-	
+
+	@Override
 	protected boolean getStatelessHint()
 	{
 		return false;
 	}
 
-	
+
 	private class AccessPermissionRenderer implements IChoiceRenderer<AccessPermission> {
 
 		private static final long serialVersionUID = 1L;
@@ -308,18 +311,18 @@
 			return Integer.toString(index);
 		}
 	}
-	
+
 	private class ShowStateButton extends AjaxButton {
 		private static final long serialVersionUID = 1L;
 
 		Show buttonState;
-		
+
 		public ShowStateButton(String wicketId, Show state) {
 			super(wicketId);
 			this.buttonState = state;
 			setOutputMarkupId(true);
 		}
-		
+
 		@Override
 		protected void onBeforeRender()
 		{
@@ -330,7 +333,7 @@
 			WicketUtils.setCssClass(this, cssClass);
 			super.onBeforeRender();
 		}
-		
+
 		@Override
 		protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 			RegistrantPermissionsPanel.this.activeState = buttonState;
diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
index 256cc64..89fc02a 100644
--- a/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/RepositoriesPanel.java
@@ -128,7 +128,7 @@
 				roots.add(0, "");
 				groups.put("", rootRepositories);
 			}
-						
+
 			List<RepositoryModel> groupedModels = new ArrayList<RepositoryModel>();
 			for (String root : roots) {
 				List<RepositoryModel> subModels = groups.get(root);
@@ -149,7 +149,7 @@
 
 		final String baseUrl = WicketUtils.getGitblitURL(getRequest());
 		final boolean showSwatch = GitBlit.getBoolean(Keys.web.repositoryListSwatches, true);
-		
+
 		DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("row", dp) {
 			private static final long serialVersionUID = 1L;
 			int counter;
@@ -161,6 +161,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<RepositoryModel> item) {
 				final RepositoryModel entry = item.getModelObject();
 				if (entry instanceof GroupRepositoryModel) {
@@ -168,7 +169,7 @@
 					currGroupName = entry.name;
 					Fragment row = new Fragment("rowContent", "groupRepositoryRow", this);
 					item.add(row);
-					
+
 					String name = groupRow.name;
 					if (name.startsWith(ModelUtils.getUserRepoPrefix())) {
 						// user page
@@ -194,7 +195,7 @@
 				if (!StringUtils.isEmpty(currGroupName) && (repoName.indexOf('/') > -1)) {
 					repoName = repoName.substring(currGroupName.length() + 1);
 				}
-								
+
 				// repository swatch
 				Component swatch;
 				if (entry.isBare){
@@ -241,7 +242,7 @@
 				} else {
 					row.add(WicketUtils.newClearPixel("sparkleshareIcon").setVisible(false));
 				}
-				
+
 				if (entry.isFork()) {
 					row.add(WicketUtils.newImage("forkIcon", "commit_divide_16x16.png",
 							getString("gb.isFork")));
diff --git a/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java b/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java
index 0dae3cf..ea8693b 100644
--- a/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/RepositoryUrlPanel.java
@@ -50,7 +50,7 @@
 /**
  * Smart repository url panel which can display multiple Gitblit repository urls
  * and also supports 3rd party app clone links.
- * 
+ *
  * @author James Moger
  *
  */
@@ -61,12 +61,12 @@
 	private final String externalPermission = "?";
 
 	private boolean onlyUrls;
-	private UserModel user; 
+	private UserModel user;
 	private RepositoryModel repository;
 	private RepositoryUrl primaryUrl;
 	private Map<String, String> urlPermissionsMap;
 	private Map<AccessRestrictionType, String> accessRestrictionsMap;
-	
+
 	public RepositoryUrlPanel(String wicketId, boolean onlyUrls, UserModel user, RepositoryModel repository) {
 		super(wicketId);
 		this.onlyUrls = onlyUrls;
@@ -74,7 +74,7 @@
 		this.repository = repository;
 		this.urlPermissionsMap = new HashMap<String, String>();
 	}
-	
+
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
@@ -94,7 +94,7 @@
 			add(new Label("repositoryIndicators").setVisible(false));
 			return;
 		}
-		
+
 		// display primary url
 		add(createPrimaryUrlPanel("repositoryUrlPanel", repository, repositoryUrls));
 
@@ -122,7 +122,7 @@
 
 		Fragment urlPanel = new Fragment(wicketId, "repositoryUrlFragment", this);
 		urlPanel.setRenderBodyOnly(true);
-		
+
 		if (repositoryUrls.size() == 1) {
 			//
 			// Single repository url, no dropdown menu
@@ -136,15 +136,16 @@
 			DataView<RepositoryUrl> repoUrlMenuItems = new DataView<RepositoryUrl>("repoUrls", urlsDp) {
 				private static final long serialVersionUID = 1L;
 
+				@Override
 				public void populateItem(final Item<RepositoryUrl> item) {
 					RepositoryUrl repoUrl = item.getModelObject();
 					// repository url
-					Fragment fragment = new Fragment("repoUrl", "actionFragment", this);					
+					Fragment fragment = new Fragment("repoUrl", "actionFragment", this);
 					Component content = new Label("content", repoUrl.url).setRenderBodyOnly(true);
 					WicketUtils.setCssClass(content, "commandMenuItem");
 					fragment.add(content);
 					item.add(fragment);
-					
+
 					Label permissionLabel = new Label("permission", repoUrl.isExternal() ? externalPermission : repoUrl.permission.toString());
 					WicketUtils.setPermissionClass(permissionLabel, repoUrl.permission);
 					String tooltip = getProtocolPermissionDescription(repository, repoUrl);
@@ -195,22 +196,22 @@
 				urlPanel.add(WicketUtils.newClearPixel("accessRestrictionIcon").setVisible(false));
 			}
 		}
-		
+
 		urlPanel.add(new Label("primaryUrl", primaryUrl.url).setRenderBodyOnly(true));
 
-		Label permissionLabel = new Label("primaryUrlPermission", primaryUrl.isExternal() ? externalPermission : primaryUrl.permission.toString());		
+		Label permissionLabel = new Label("primaryUrlPermission", primaryUrl.isExternal() ? externalPermission : primaryUrl.permission.toString());
 		String tooltip = getProtocolPermissionDescription(repository, primaryUrl);
 		WicketUtils.setHtmlTooltip(permissionLabel, tooltip);
 		urlPanel.add(permissionLabel);
 		urlPanel.add(createCopyFragment(primaryUrl.url));
-		
+
 		return urlPanel;
 	}
-	
+
 	protected Fragment createApplicationMenus(String wicketId, UserModel user, final RepositoryModel repository, final List<RepositoryUrl> repositoryUrls) {
 		final List<GitClientApplication> displayedApps = new ArrayList<GitClientApplication>();
 		final String userAgent = ((WebClientInfo) GitBlitWebSession.get().getClientInfo()).getUserAgent();
-		
+
 		if (user.canClone(repository)) {
 			for (GitClientApplication app : GitBlit.self().getClientApplications()) {
 				if (app.isActive && app.allowsPlatform(userAgent)) {
@@ -224,6 +225,7 @@
 		DataView<GitClientApplication> appMenus = new DataView<GitClientApplication>("appMenus", displayedAppsDp) {
 			private static final long serialVersionUID = 1L;
 
+			@Override
 			public void populateItem(final Item<GitClientApplication> item) {
 				final GitClientApplication clientApp = item.getModelObject();
 
@@ -242,24 +244,24 @@
 						}
 					}
 				}
-				
+
 				if (urls.size() == 0) {
 					// do not show this app menu because there are no urls
 					item.add(new Label("appMenu").setVisible(false));
 					return;
 				}
-				
+
 				Fragment appMenu = new Fragment("appMenu", "appMenuFragment", this);
 				appMenu.setRenderBodyOnly(true);
 				item.add(appMenu);
-				
+
 				// menu button
 				appMenu.add(new Label("applicationName", clientApp.name));
-				
+
 				// application icon
 				Component img;
 				if (StringUtils.isEmpty(clientApp.icon)) {
-					img = WicketUtils.newClearPixel("applicationIcon").setVisible(false);	
+					img = WicketUtils.newClearPixel("applicationIcon").setVisible(false);
 				} else {
 					if (clientApp.icon.contains("://")) {
 						// external image
@@ -268,35 +270,36 @@
 						// context image
 						img = WicketUtils.newImage("applicationIcon", clientApp.icon);
 					}
-				}				
+				}
 				appMenu.add(img);
-				
+
 				// application menu title, may be a link
 				if (StringUtils.isEmpty(clientApp.productUrl)) {
 					appMenu.add(new Label("applicationTitle", clientApp.toString()));
 				} else {
 					appMenu.add(new LinkPanel("applicationTitle", null, clientApp.toString(), clientApp.productUrl, true));
 				}
-				
+
 				// brief application description
 				if (StringUtils.isEmpty(clientApp.description)) {
 					appMenu.add(new Label("applicationDescription").setVisible(false));
 				} else {
 					appMenu.add(new Label("applicationDescription", clientApp.description));
 				}
-				
+
 				// brief application legal info, copyright, license, etc
 				if (StringUtils.isEmpty(clientApp.legal)) {
 					appMenu.add(new Label("applicationLegal").setVisible(false));
 				} else {
 					appMenu.add(new Label("applicationLegal", clientApp.legal));
 				}
-				
+
 				// a nested repeater for all action items
 				ListDataProvider<RepositoryUrl> urlsDp = new ListDataProvider<RepositoryUrl>(urls);
 				DataView<RepositoryUrl> actionItems = new DataView<RepositoryUrl>("actionItems", urlsDp) {
 					private static final long serialVersionUID = 1L;
 
+					@Override
 					public void populateItem(final Item<RepositoryUrl> repoLinkItem) {
 						RepositoryUrl repoUrl = repoLinkItem.getModelObject();
 						Fragment fragment = new Fragment("actionItem", "actionFragment", this);
@@ -315,7 +318,7 @@
 							WicketUtils.setCssClass(content, "commandMenuItem");
 							fragment.add(content);
 							repoLinkItem.add(fragment);
-							
+
 							// copy function for command
 							fragment.add(createCopyFragment(command));
 						}
@@ -323,16 +326,16 @@
 					appMenu.add(actionItems);
 			}
 		};
-		
+
 		Fragment applicationMenus = new Fragment(wicketId, "applicationMenusFragment", this);
 		applicationMenus.add(appMenus);
 		return applicationMenus;
 	}
-	
+
 	protected String substitute(String pattern, String repoUrl, String baseUrl) {
 		return pattern.replace("${repoUrl}", repoUrl).replace("${baseUrl}", baseUrl);
 	}
-	
+
 	protected Label createPermissionBadge(String wicketId, RepositoryUrl repoUrl) {
 		Label permissionLabel = new Label(wicketId, repoUrl.isExternal() ? externalPermission : repoUrl.permission.toString());
 		WicketUtils.setPermissionClass(permissionLabel, repoUrl.permission);
@@ -340,7 +343,7 @@
 		WicketUtils.setHtmlTooltip(permissionLabel, tooltip);
 		return permissionLabel;
 	}
-	
+
 	protected Fragment createCopyFragment(String text) {
 		if (GitBlit.getBoolean(Keys.web.allowFlashCopyToClipboard, true)) {
 			// clippy: flash-based copy & paste
@@ -359,7 +362,7 @@
 			return copyFragment;
 		}
 	}
-	
+
 	protected String getProtocolPermissionDescription(RepositoryModel repository,
 			RepositoryUrl repoUrl) {
 		if (!urlPermissionsMap.containsKey(repoUrl.url)) {
@@ -374,9 +377,9 @@
 					// implicit SSH url
 					protocol = "ssh";
 				}
-				note = MessageFormat.format(getString("gb.externalPermissions"), protocol);			
+				note = MessageFormat.format(getString("gb.externalPermissions"), protocol);
 			} else {
-				note = null;			
+				note = null;
 				String key;
 				switch (repoUrl.permission) {
 				case OWNER:
@@ -411,7 +414,7 @@
 		}
 		return urlPermissionsMap.get(repoUrl.url);
 	}
-	
+
 	protected Map<AccessRestrictionType, String> getAccessRestrictions() {
 		if (accessRestrictionsMap == null) {
 			accessRestrictionsMap = new HashMap<AccessRestrictionType, String>();
@@ -434,7 +437,7 @@
 		}
 		return accessRestrictionsMap;
 	}
-	
+
 	protected Component createRepositoryIndicators(RepositoryModel repository) {
 		Fragment fragment = new Fragment("repositoryIndicators", "indicatorsFragment", this);
 		if (repository.isBare) {
@@ -446,7 +449,7 @@
 			wc.add(lbl);
 			fragment.add(wc);
 		}
-		
+
 		boolean allowForking = GitBlit.getBoolean(Keys.web.allowForking, true);
 		if (!allowForking || user == null || !user.isAuthenticated) {
 			// must be logged-in to fork, hide all fork controls
diff --git a/src/main/java/com/gitblit/wicket/panels/SearchPanel.java b/src/main/java/com/gitblit/wicket/panels/SearchPanel.java
index 9d38ab0..bfa38ed 100644
--- a/src/main/java/com/gitblit/wicket/panels/SearchPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/SearchPanel.java
@@ -84,6 +84,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<RevCommit> item) {
 				final RevCommit entry = item.getModelObject();
 				final Date date = JGitUtils.getCommitDate(entry);
diff --git a/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java b/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java
index fa98945..78822c6 100644
--- a/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java
+++ b/src/main/java/com/gitblit/wicket/panels/ShockWaveComponent.java
@@ -29,11 +29,11 @@
 
 /**
  * https://cwiki.apache.org/WICKET/object-container-adding-flash-to-a-wicket-application.html
- * 
+ *
  * @author Jan Kriesten
  * @author manuelbarzi
  * @author James Moger
- * 
+ *
  */
 public class ShockWaveComponent extends ObjectContainer {
 	private static final long serialVersionUID = 1L;
@@ -67,7 +67,7 @@
 		attributes = new HashMap<String, String>();
 		parameters = new HashMap<String, String>();
 	}
-	
+
 	public ShockWaveComponent(String id, String movie) {
 		this(id);
 		setValue("movie", movie);
@@ -81,6 +81,7 @@
 		setValue("height", height);
 	}
 
+	@Override
 	public void setValue(String name, String value) {
 		// IE and other browsers handle movie/data differently. So movie is used
 		// for IE, whereas
@@ -100,6 +101,7 @@
 			parameters.put(parameter, value);
 	}
 
+	@Override
 	public String getValue(String name) {
 		String parameter = name.toLowerCase();
 		String value = null;
@@ -122,6 +124,7 @@
 		return value;
 	}
 
+	@Override
 	public void onComponentTag(ComponentTag tag) {
 		// get options from the markup
 		IValueMap valueMap = tag.getAttributes();
@@ -142,6 +145,7 @@
 		super.onComponentTag(tag);
 	}
 
+	@Override
 	public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
 
 		super.onComponentTagBody(markupStream, openTag);
diff --git a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
index 907b317..1e06a7f 100644
--- a/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/TagsPanel.java
@@ -66,6 +66,7 @@
 			private static final long serialVersionUID = 1L;
 			int counter;
 
+			@Override
 			public void populateItem(final Item<RefModel> item) {
 				RefModel entry = item.getModelObject();
 
@@ -89,7 +90,7 @@
 								.getReferencedObjectId().getName())));
 
 				// workaround for RevTag returning a lengthy shortlog. :(
-				String message = StringUtils.trimString(entry.getShortMessage(), 
+				String message = StringUtils.trimString(entry.getShortMessage(),
 						com.gitblit.Constants.LEN_SHORTLOG);
 
 				if (linkClass.equals(BlobPage.class)) {
diff --git a/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java b/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java
index b76388b..f567c78 100644
--- a/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/TeamsPanel.java
@@ -54,6 +54,7 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<TeamModel> item) {
 				final TeamModel entry = item.getModelObject();
 				LinkPanel editLink = new LinkPanel("teamname", "list", entry.name,
diff --git a/src/main/java/com/gitblit/wicket/panels/UsersPanel.java b/src/main/java/com/gitblit/wicket/panels/UsersPanel.java
index f5b95e2..545734f 100644
--- a/src/main/java/com/gitblit/wicket/panels/UsersPanel.java
+++ b/src/main/java/com/gitblit/wicket/panels/UsersPanel.java
@@ -56,13 +56,14 @@
 				counter = 0;
 			}
 
+			@Override
 			public void populateItem(final Item<UserModel> item) {
 				final UserModel entry = item.getModelObject();
 				LinkPanel editLink = new LinkPanel("username", "list", entry.username,
 						EditUserPage.class, WicketUtils.newUsernameParameter(entry.username));
 				WicketUtils.setHtmlTooltip(editLink, getString("gb.edit") + " " + entry.getDisplayName());
 				item.add(editLink);
-				
+
 				if (StringUtils.isEmpty(entry.displayName)) {
 					item.add(new Label("displayName").setVisible(false));
 				} else {
diff --git a/src/test/java/com/gitblit/tests/HtpasswdUserServiceTest.java b/src/test/java/com/gitblit/tests/HtpasswdUserServiceTest.java
index ef9d35f..b5f85cd 100644
--- a/src/test/java/com/gitblit/tests/HtpasswdUserServiceTest.java
+++ b/src/test/java/com/gitblit/tests/HtpasswdUserServiceTest.java
@@ -10,6 +10,7 @@
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.HashMap;
+
 import org.apache.commons.io.FileUtils;
 import org.junit.After;
 import org.junit.Before;
diff --git a/src/test/java/com/gitblit/tests/JnaUtilsTest.java b/src/test/java/com/gitblit/tests/JnaUtilsTest.java
index 25d1ccf..03c6aea 100644
--- a/src/test/java/com/gitblit/tests/JnaUtilsTest.java
+++ b/src/test/java/com/gitblit/tests/JnaUtilsTest.java
@@ -15,13 +15,12 @@
  */
 package com.gitblit.tests;
 
-import com.gitblit.utils.JGitUtils;
-import com.gitblit.utils.JnaUtils;
-import java.io.File;
-import java.io.IOException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
 import org.eclipse.jgit.lib.Repository;
@@ -30,6 +29,9 @@
 import org.eclipse.jgit.util.FS;
 import org.junit.Test;
 
+import com.gitblit.utils.JGitUtils;
+import com.gitblit.utils.JnaUtils;
+
 /**
  *
  * @author Florian Zschocke

--
Gitblit v1.9.1