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;
- }
}