Merge branch 'stable-2.14'

* stable-2.14:
  Remove classpath target

Change-Id: I24f59498469d973240d476e26fa181aef26543c1
diff --git a/BUILD b/BUILD
index 0316bc3..f9a7878 100644
--- a/BUILD
+++ b/BUILD
@@ -32,3 +32,9 @@
         "@jrobin_lib//jar",
     ],
 )
+
+java_library(
+    name = "javamelody__plugin_test_deps",
+    visibility = ["//visibility:public"],
+    exports = ["@javamelody_lib//jar"],
+)
diff --git a/WORKSPACE b/WORKSPACE
index e909a7f..7623903 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,27 +3,27 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "e8160a65a591e602a2fb48953b269dd8d42a7c37",
+    commit = "f2e78d4042490178a9cc1da59fc590dec55278cb",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
 #Snapshot Plugin API
-#load(
-#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-#    "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
 load(
-    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
-    "gerrit_api",
+   "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+   "gerrit_api_maven_local",
 )
 
+# Load snapshot Plugin API
+gerrit_api_maven_local()
+
+# Release Plugin API
+# load(
+#     "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+#     "gerrit_api",
+# )
+
 # Load release Plugin API
-gerrit_api()
+# gerrit_api()
 
 load("//:external_plugin_deps.bzl", "external_plugin_deps")
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java
index ab38db2..fc7bef2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java
@@ -14,30 +14,45 @@
 
 package com.googlesource.gerrit.plugins.javamelody;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.api.access.PluginPermission;
+import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.server.CurrentUser;
-import com.google.gerrit.server.account.CapabilityControl;
+import com.google.gerrit.server.permissions.GlobalPermission;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.google.inject.Singleton;
 
+@Singleton
 public class CapabilityChecker {
+  private final PermissionBackend permissionBackend;
   private final Provider<CurrentUser> userProvider;
-  private final String capabilityName;
+  private final String pluginName;
 
   @Inject
-  CapabilityChecker(Provider<CurrentUser> userProvider,
+  CapabilityChecker(
+      PermissionBackend permissionBackend,
+      Provider<CurrentUser> userProvider,
       @PluginName String pluginName) {
+    this.permissionBackend = permissionBackend;
     this.userProvider = userProvider;
-    this.capabilityName =
-        String.format("%s-%s", pluginName, MonitoringCapability.ID);
+    this.pluginName = pluginName;
   }
 
   public boolean canMonitor() {
-    if (userProvider.get().isIdentifiedUser()) {
-      CapabilityControl ctl = userProvider.get().getCapabilities();
-      return ctl.canAdministrateServer()
-          || ctl.canPerform(capabilityName);
+    try {
+      permissionBackend
+          .user(userProvider)
+          .checkAny(
+              ImmutableSet.of(
+                  GlobalPermission.ADMINISTRATE_SERVER,
+                  new PluginPermission(pluginName, MonitoringCapability.ID)));
+      return true;
+    } catch (AuthException | PermissionBackendException e) {
+      return false;
     }
-    return false;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java
index 2919502..33e9a68 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java
@@ -17,11 +17,7 @@
 import com.google.gerrit.httpd.AllRequestFilter;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
-import net.bull.javamelody.MonitoringFilter;
-
 import java.io.IOException;
-
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
@@ -29,6 +25,7 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import net.bull.javamelody.MonitoringFilter;
 
 @Singleton
 class GerritMonitoringFilter extends AllRequestFilter {
@@ -36,17 +33,15 @@
   private final CapabilityChecker capabilityChecker;
 
   @Inject
-  GerritMonitoringFilter(JavamelodyFilter monitoring,
-      CapabilityChecker capabilityChecker) {
+  GerritMonitoringFilter(JavamelodyFilter monitoring, CapabilityChecker capabilityChecker) {
     this.monitoring = monitoring;
     this.capabilityChecker = capabilityChecker;
   }
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
-    if (!(request instanceof HttpServletRequest)
-        || !(response instanceof HttpServletResponse)) {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
+    if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
       chain.doFilter(request, response);
       return;
     }
@@ -57,8 +52,7 @@
     if (canMonitor(httpRequest)) {
       monitoring.doFilter(request, response, chain);
     } else {
-      httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN,
-          "Forbidden access");
+      httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Forbidden access");
     }
   }
 
@@ -73,8 +67,7 @@
   }
 
   private boolean canMonitor(HttpServletRequest httpRequest) {
-    if (httpRequest.getRequestURI().equals(monitoring
-        .getJavamelodyUrl(httpRequest))) {
+    if (httpRequest.getRequestURI().equals(monitoring.getJavamelodyUrl(httpRequest))) {
       return capabilityChecker.canMonitor();
     }
     return true;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/Module.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/Module.java
index 291fbf1..0cf8701 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/Module.java
@@ -29,19 +29,17 @@
   private final PluginConfig cfg;
 
   @Inject
-  public Module(PluginConfigFactory cfgFactory,
-      @PluginName String pluginName) {
+  public Module(PluginConfigFactory cfgFactory, @PluginName String pluginName) {
     this.cfg = cfgFactory.getFromGerritConfig(pluginName);
   }
 
   @Override
   protected void configure() {
     bind(CapabilityDefinition.class)
-      .annotatedWith(Exports.named(MonitoringCapability.ID))
-      .to(MonitoringCapability.class);
+        .annotatedWith(Exports.named(MonitoringCapability.ID))
+        .to(MonitoringCapability.class);
     if (cfg.getBoolean("allowTopMenu", true)) {
-      DynamicSet.bind(binder(), TopMenu.class)
-        .to(MonitoringTopMenu.class);
+      DynamicSet.bind(binder(), TopMenu.class).to(MonitoringTopMenu.class);
     }
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringDataSourceInterceptor.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringDataSourceInterceptor.java
index dbe8d3b..ab0edd2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringDataSourceInterceptor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringDataSourceInterceptor.java
@@ -15,10 +15,8 @@
 package com.googlesource.gerrit.plugins.javamelody;
 
 import com.google.gerrit.extensions.persistence.DataSourceInterceptor;
-
-import net.bull.javamelody.JdbcWrapper;
-
 import javax.sql.DataSource;
+import net.bull.javamelody.JdbcWrapper;
 
 public class MonitoringDataSourceInterceptor implements DataSourceInterceptor {
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java
index 7159404..60ebf86 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java
@@ -18,7 +18,6 @@
 import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.inject.Inject;
-
 import java.util.Collections;
 import java.util.List;
 
@@ -28,8 +27,9 @@
   @Inject
   public MonitoringTopMenu(CapabilityChecker capabilityChecker) {
     if (capabilityChecker.canMonitor()) {
-      menuEntries.add(new MenuEntry("Monitoring", Collections
-          .singletonList(new MenuItem("JavaMelody", "monitoring"))));
+      menuEntries.add(
+          new MenuEntry(
+              "Monitoring", Collections.singletonList(new MenuItem("JavaMelody", "monitoring"))));
     }
   }
 
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index b78dc63..3247bf9 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -83,7 +83,7 @@
   bazel build plugins/javamelody:javamelody
 ```
 
-Note, that the plugin dependencies with the [database interception](database-monitoring.md)
+Note, that the plugin dependencies with [database interception](database-monitoring.md)
 are built separately. To do that, issue this command:
 
 ```
@@ -102,9 +102,15 @@
   bazel-bin/plugins/javamelody/javamelody-deps_deploy.jar
 ```
 
+[IMPORTANT]
+Both targets above are required and must be deployed to the right
+locations: `javamelody.jar` to `<gerrit_site>/plugins` directory
+and `javamelody-deps_deploy.jar` to `<gerrit_site>/lib` directory.
+
 This project can be imported into the Eclipse IDE.
-Add the plugin name to the `CUSTOM_PLUGINS` set in
-Gerrit core in `tools/bzl/plugins.bzl`, and execute:
+Add the plugin name to the `CUSTOM_PLUGINS` and to the
+`CUSTOM_PLUGINS_TEST_DEPS` set in Gerrit core in
+`tools/bzl/plugins.bzl`, and execute:
 
 ```
   ./tools/eclipse/project.py