Consolidate common capability checks in a utility class

The checks for user capability are repeated in both the monitoring
filter and the top menu. Consolidate it into a helper class that is
used in both places, simplifying the code and reducing duplication.

Change-Id: I287608e8c72227985c55ca994bb82122b63250e1
diff --git a/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java b/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java
new file mode 100644
index 0000000..ab38db2
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/CapabilityChecker.java
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// 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.googlesource.gerrit.plugins.javamelody;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.account.CapabilityControl;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class CapabilityChecker {
+  private final Provider<CurrentUser> userProvider;
+  private final String capabilityName;
+
+  @Inject
+  CapabilityChecker(Provider<CurrentUser> userProvider,
+      @PluginName String pluginName) {
+    this.userProvider = userProvider;
+    this.capabilityName =
+        String.format("%s-%s", pluginName, MonitoringCapability.ID);
+  }
+
+  public boolean canMonitor() {
+    if (userProvider.get().isIdentifiedUser()) {
+      CapabilityControl ctl = userProvider.get().getCapabilities();
+      return ctl.canAdministrateServer()
+          || ctl.canPerform(capabilityName);
+    }
+    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 663faf8..2919502 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/GerritMonitoringFilter.java
@@ -14,12 +14,8 @@
 
 package com.googlesource.gerrit.plugins.javamelody;
 
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.httpd.AllRequestFilter;
-import com.google.gerrit.server.CurrentUser;
-import com.google.gerrit.server.account.CapabilityControl;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
 import net.bull.javamelody.MonitoringFilter;
@@ -37,16 +33,13 @@
 @Singleton
 class GerritMonitoringFilter extends AllRequestFilter {
   private final JavamelodyFilter monitoring;
-  private final Provider<CurrentUser> userProvider;
-  private final String pluginName;
+  private final CapabilityChecker capabilityChecker;
 
   @Inject
   GerritMonitoringFilter(JavamelodyFilter monitoring,
-      Provider<CurrentUser> userProvider,
-      @PluginName String pluginName) {
+      CapabilityChecker capabilityChecker) {
     this.monitoring = monitoring;
-    this.userProvider = userProvider;
-    this.pluginName = pluginName;
+    this.capabilityChecker = capabilityChecker;
   }
 
   @Override
@@ -82,13 +75,7 @@
   private boolean canMonitor(HttpServletRequest httpRequest) {
     if (httpRequest.getRequestURI().equals(monitoring
         .getJavamelodyUrl(httpRequest))) {
-      if (userProvider.get().isIdentifiedUser()) {
-        CapabilityControl ctl = userProvider.get().getCapabilities();
-        return ctl.canAdministrateServer()
-            || ctl.canPerform(String.format("%s-%s",
-               pluginName, MonitoringCapability.ID));
-      }
-      return false;
+      return capabilityChecker.canMonitor();
     }
     return true;
   }
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 16baac0..7159404 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/javamelody/MonitoringTopMenu.java
@@ -15,29 +15,19 @@
 package com.googlesource.gerrit.plugins.javamelody;
 
 import com.google.common.collect.Lists;
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.client.MenuItem;
 import com.google.gerrit.extensions.webui.TopMenu;
-import com.google.gerrit.server.CurrentUser;
-import com.google.gerrit.server.account.CapabilityControl;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 import java.util.Collections;
 import java.util.List;
 
 public class MonitoringTopMenu implements TopMenu {
-  private final List<MenuEntry> menuEntries;
-  private final Provider<CurrentUser> userProvider;
-  private final String pluginName;
+  private final List<MenuEntry> menuEntries = Lists.newArrayList();
 
   @Inject
-  public MonitoringTopMenu(Provider<CurrentUser> userProvider,
-      @PluginName String pluginName) {
-    this.userProvider = userProvider;
-    this.pluginName = pluginName;
-    menuEntries = Lists.newArrayList();
-    if (canMonitor()) {
+  public MonitoringTopMenu(CapabilityChecker capabilityChecker) {
+    if (capabilityChecker.canMonitor()) {
       menuEntries.add(new MenuEntry("Monitoring", Collections
           .singletonList(new MenuItem("JavaMelody", "monitoring"))));
     }
@@ -47,14 +37,4 @@
   public List<MenuEntry> getEntries() {
     return menuEntries;
   }
-
-  private boolean canMonitor() {
-    if (userProvider.get().isIdentifiedUser()) {
-      CapabilityControl ctl = userProvider.get().getCapabilities();
-      return ctl.canAdministrateServer()
-          || ctl.canPerform(String.format("%s-%s",
-             pluginName, MonitoringCapability.ID));
-    }
-    return false;
-  }
 }