Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Format all Java files with google-java-format 1.6
  GerritAuthFilter#doFilter: Remove unused chain parameter
  GerritWicketFilter: Remove unused SitePaths from constructor
  GitBlitServletModule: Remove unused injected constructor arguments
  Remove unnecessarily nested else-clauses
  GerritToGitBlitUserModel: Add missing case on switch
  GitBlitSettings: Open InputStream in try-with-resource
  Add missing @Override annotations
  Remove unused imports
  Remove redundant specification of types
  GerritAuthFilter: Remove declaration of unthrown exception
  Bazel: Harmonize names of external repositories
  Update external dependencies

Change-Id: Ib9533d9097acc888ff493c9a3bd5904aa1eb2c81
diff --git a/BUILD b/BUILD
index 5594a52..2593ebd 100644
--- a/BUILD
+++ b/BUILD
@@ -3,6 +3,7 @@
 gerrit_plugin(
     name = "gitblit",
     srcs = glob(["src/main/java/**/*.java"]),
+    resources = glob(["src/main/resources/**/*"]),
     manifest_entries = [
         "Gerrit-PluginName: gitblit",
         "Gerrit-Module: com.googlesource.gerrit.plugins.gitblit.GitBlitModule",
@@ -10,7 +11,6 @@
         "Gerrit-InitStep: com.googlesource.gerrit.plugins.gitblit.GitBlitInitStep",
         "Gerrit-ReloadMode: restart",
     ],
-    resources = glob(["src/main/resources/**/*"]),
     deps = [
         "@commons-codec//jar:neverlink",
         "@commons-io//jar",
@@ -38,8 +38,8 @@
         "@twiki-core//jar",
         "@unboundid//jar",
         "@waffle-jna//jar",
-        "@wicket-extensions//jar",
         "@wicket//jar",
+        "@wicket-extensions//jar",
         "@wikitext-core//jar",
     ],
 )
diff --git a/README.md b/README.md
index a88175a..3289410 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,6 @@
 
     $ git clone https://github.com/gitblit/gitblit.git
     $ cd gitblit && git checkout master
-    $ git fetch origin refs/pull/1168/head && git merge --no-edit FETCH_HEAD
     $ ant -DresourceFolderPrefix=static installMaven
 
 ### Gitblit plugin
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 7a98cc7..9097a8d 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -136,16 +136,16 @@
   )
 
   # Lucene version must be aligned with the version in core Gerrit
-  LUCENE_VERS = "5.5.2"
+  LUCENE_VERS = "5.5.4"
 
   maven_jar(
-    name = "lucene-highlighter",
-    artifact = "org.apache.lucene:lucene-highlighter:" + LUCENE_VERS,
-    sha1 = "d127ac514e9df965ab0b57d92bbe0c68d3d145b8",
+    name = 'lucene-highlighter',
+    artifact = 'org.apache.lucene:lucene-highlighter:' + LUCENE_VERS,
+    sha1 = '433f53f03f1b14337c08d54e507a5410905376fa',
   )
 
   maven_jar(
-    name = "lucene-memory",
-    artifact = "org.apache.lucene:lucene-memory:" + LUCENE_VERS,
-    sha1 = "7409db9863d8fbc265c27793c6cc7511304182c2",
+    name = 'lucene-memory',
+    artifact = 'org.apache.lucene:lucene-memory:' + LUCENE_VERS,
+    sha1 = '4dbdc2e1a24837722294762a9edb479f79092ab9',
   )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
index b1f00bf..91197b7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
@@ -61,7 +61,7 @@
   private static final Logger log = LoggerFactory.getLogger(GitBlitServletModule.class);
 
   @Inject
-  public GitBlitServletModule(@PluginName final String name) {
+  public GitBlitServletModule(@PluginName String name) {
     log.info("Create GitBlitModule with name='" + name);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
index d0019b5..c1f8fed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritAuthFilter.java
@@ -68,7 +68,7 @@
   }
 
   public boolean doFilter(
-      final DynamicItem<WebSession> webSession, ServletRequest request, ServletResponse response)
+      DynamicItem<WebSession> webSession, ServletRequest request, ServletResponse response)
       throws IOException {
     HttpServletRequest httpRequest = (HttpServletRequest) request;
 
@@ -82,8 +82,7 @@
     }
   }
 
-  public boolean filterSessionAuth(
-      final DynamicItem<WebSession> webSession, HttpServletRequest request) {
+  public boolean filterSessionAuth(DynamicItem<WebSession> webSession, HttpServletRequest request) {
     request.setAttribute("gerrit-username", webSession.get().getUser().getUserName());
     request.setAttribute("gerrit-token", webSession.get().getSessionId());
     return true;
@@ -98,7 +97,7 @@
       return false;
     }
 
-    final byte[] decoded = new Base64().decode(hdr.substring(LIT_BASIC.length()).getBytes());
+    byte[] decoded = new Base64().decode(hdr.substring(LIT_BASIC.length()).getBytes());
     String usernamePassword =
         new String(decoded, MoreObjects.firstNonNull(request.getCharacterEncoding(), "UTF-8"));
     int splitPos = usernamePassword.indexOf(':');
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
index 3802743..f00cefc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
@@ -21,9 +21,12 @@
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.StringUtils;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
-import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.gerrit.server.project.ProjectControl;
-import com.google.gerrit.server.project.ProjectControl.Factory;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
+import com.google.gerrit.server.permissions.ProjectPermission;
+import com.google.gerrit.server.permissions.RefPermission;
+import com.google.inject.Provider;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -44,40 +47,38 @@
   public final Set<String> repositories = new HashSet<>();
   public final Set<TeamModel> teams = new HashSet<>();
 
-  private final transient ProjectControl.Factory projectControlFactory;
+  private final transient Provider<CurrentUser> userProvider;
+  private final transient PermissionBackend permissionBackend;
 
   // non-persisted fields
   public boolean isAuthenticated;
 
   public GerritToGitBlitUserModel(String username) {
-    this(username, null);
+    this(username, null, null);
   }
 
   public GerritToGitBlitUserModel(
-      String username, final ProjectControl.Factory projectControlFactory) {
+      String username, Provider<CurrentUser> userProvider, PermissionBackend permissionBackend) {
     super(username);
     this.username = username;
     this.isAuthenticated = true;
-    this.projectControlFactory = projectControlFactory;
+    this.userProvider = userProvider;
+    this.permissionBackend = permissionBackend;
   }
 
-  public GerritToGitBlitUserModel(final ProjectControl.Factory projectControlFactory) {
+  public GerritToGitBlitUserModel() {
     super(ANONYMOUS_USER);
-    this.projectControlFactory = projectControlFactory;
+    this.userProvider = null;
+    this.permissionBackend = null;
   }
 
-  @Deprecated
-  public boolean canAccessRepository(String repositoryName) {
-    boolean result = false;
-
-    try {
-      ProjectControl control = projectControlFactory.controlFor(new NameKey(repositoryName));
-      result = control != null;
-    } catch (NoSuchProjectException e) {
-      result = false;
-    }
-
-    return result;
+  @Override
+  public boolean canView(RepositoryModel repository, String ref) {
+    return permissionBackend
+        .user(userProvider)
+        .project(new NameKey(StringUtils.stripDotGit(repository.name)))
+        .ref(ref)
+        .testOrFalse(RefPermission.READ);
   }
 
   @Override
@@ -85,54 +86,29 @@
       RepositoryModel repository,
       AccessRestrictionType ifRestriction,
       AccessPermission requirePermission) {
-    boolean result = false;
-
-    try {
-      ProjectControl control =
-          projectControlFactory.controlFor(new NameKey(getRepositoryName(repository.name)));
-
-      if (control == null) {
-        return false;
-      }
-
-      switch (ifRestriction) {
-        case VIEW:
-          return !control.isHidden();
-        case CLONE:
-          return control.canRunUploadPack();
-        case PUSH:
-          return control.canRunReceivePack();
-        case NONE:
-        default:
-          return true;
-      }
-    } catch (NoSuchProjectException e) {
-      result = false;
+    ForProject projectPermissions =
+        permissionBackend
+            .user(userProvider)
+            .project(new NameKey(StringUtils.stripDotGit(repository.name)));
+    switch (ifRestriction) {
+      case VIEW:
+        return projectPermissions.testOrFalse(ProjectPermission.ACCESS);
+      case CLONE:
+        return projectPermissions.testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
+      case PUSH:
+        return projectPermissions.testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
+      case NONE:
+      default:
+        return true;
     }
-
-    return result;
-  }
-
-  public String getRepositoryName(String name) {
-    if (name.endsWith(".git")) {
-      name = name.substring(0, name.length() - 4);
-    }
-    return name;
   }
 
   @Override
   public boolean hasRepositoryPermission(String name) {
-    boolean result = false;
-
-    try {
-      name = getRepositoryName(name);
-      ProjectControl control = projectControlFactory.controlFor(new NameKey(name));
-      result = control != null && !control.isHidden();
-    } catch (NoSuchProjectException e) {
-      result = false;
-    }
-
-    return result;
+    return permissionBackend
+        .user(userProvider)
+        .project(new NameKey(StringUtils.stripDotGit(name)))
+        .testOrFalse(ProjectPermission.ACCESS);
   }
 
   public boolean hasTeamAccess(String repositoryName) {
@@ -202,7 +178,7 @@
     return username.compareTo(o.username);
   }
 
-  public static UserModel getAnonymous(Factory projectControl) {
-    return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl);
+  public static UserModel getAnonymous() {
+    return new GerritToGitBlitUserModel(ANONYMOUS_USER, null, null);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
index b8dcbd5..3dd0bfa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
@@ -27,11 +27,13 @@
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.httpd.WebSession;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.account.AccountManager;
 import com.google.gerrit.server.account.AuthRequest;
 import com.google.gerrit.server.account.AuthResult;
-import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,7 +47,8 @@
 public class GerritToGitBlitUserService implements IAuthenticationManager, IUserManager {
   private static final Logger log = LoggerFactory.getLogger(GerritToGitBlitUserService.class);
 
-  private final ProjectControl.Factory projectControl;
+  private final Provider<CurrentUser> userProvider;
+  private final PermissionBackend permissionBackend;
   private final AccountManager accountManager;
   private final DynamicItem<WebSession> webSession;
 
@@ -53,10 +56,12 @@
 
   @Inject
   public GerritToGitBlitUserService(
-      final ProjectControl.Factory projectControl,
+      Provider<CurrentUser> userProvider,
+      PermissionBackend permissionBackend,
       AccountManager accountManager,
-      final DynamicItem<WebSession> webSession) {
-    this.projectControl = projectControl;
+      DynamicItem<WebSession> webSession) {
+    this.userProvider = userProvider;
+    this.permissionBackend = permissionBackend;
     this.accountManager = accountManager;
     this.webSession = webSession;
   }
@@ -66,7 +71,7 @@
     String passwordString = new String(password);
 
     if (username.equals(GerritToGitBlitUserModel.ANONYMOUS_USER)) {
-      return GerritToGitBlitUserModel.getAnonymous(projectControl);
+      return GerritToGitBlitUserModel.getAnonymous();
     } else if (passwordString.startsWith(GerritToGitBlitUserService.SESSIONAUTH)) {
       return authenticateSSO(
           username, passwordString.substring(GerritToGitBlitUserService.SESSIONAUTH.length()));
@@ -93,7 +98,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   public UserModel authenticateBasicAuth(String username, String password) {
@@ -113,7 +118,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   @Override
@@ -133,7 +138,7 @@
     httpRequest.getSession().setAttribute(Constants.ATTRIB_AUTHTYPE, AuthenticationType.CONTAINER);
 
     if (Strings.isNullOrEmpty(gerritUsername) || Strings.isNullOrEmpty(gerritToken)) {
-      return GerritToGitBlitUserModel.getAnonymous(projectControl);
+      return GerritToGitBlitUserModel.getAnonymous();
     }
     return authenticateSSO(gerritUsername, gerritToken);
   }
@@ -210,7 +215,7 @@
 
   @Override
   public UserModel getUserModel(String username) {
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, userProvider, permissionBackend);
   }
 
   @Override