Support to enable/disable the ITS integration in the UI On the ProjectInfoScreen there is now a dropdown list for the plugin.<its-name>.enabled parameter which offers the values true, false, enforced and INHERIT. Project owners can change this parameter and save it. If the ITS integration is enforced by a parent project the dropdown list is disabled. Change-Id: I30c96770186d3d7c627794d42ae673181ea7688b Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/ItsHookModule.java b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/ItsHookModule.java index 53d1d17..52bca59 100644 --- a/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/ItsHookModule.java +++ b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/ItsHookModule.java
@@ -15,19 +15,24 @@ package com.googlesource.gerrit.plugins.hooks; import com.google.gerrit.common.ChangeListener; +import com.google.gerrit.extensions.annotations.Exports; +import com.google.gerrit.extensions.annotations.PluginName; import com.google.gerrit.extensions.registration.DynamicSet; import com.google.gerrit.server.config.FactoryModule; +import com.google.gerrit.server.config.PluginConfigFactory; +import com.google.gerrit.server.config.ProjectConfigEntry; import com.google.gerrit.server.git.validators.CommitValidationListener; import com.googlesource.gerrit.plugins.hooks.its.ItsConfig; +import com.googlesource.gerrit.plugins.hooks.its.ItsHookEnabledConfigEntry; import com.googlesource.gerrit.plugins.hooks.validation.ItsValidateComment; +import com.googlesource.gerrit.plugins.hooks.workflow.ActionController; import com.googlesource.gerrit.plugins.hooks.workflow.ActionRequest; import com.googlesource.gerrit.plugins.hooks.workflow.Condition; import com.googlesource.gerrit.plugins.hooks.workflow.GerritHookFilterAddComment; import com.googlesource.gerrit.plugins.hooks.workflow.GerritHookFilterAddRelatedLinkToChangeId; import com.googlesource.gerrit.plugins.hooks.workflow.GerritHookFilterAddRelatedLinkToGitWeb; import com.googlesource.gerrit.plugins.hooks.workflow.GerritHookFilterChangeState; -import com.googlesource.gerrit.plugins.hooks.workflow.ActionController; import com.googlesource.gerrit.plugins.hooks.workflow.Property; import com.googlesource.gerrit.plugins.hooks.workflow.Rule; import com.googlesource.gerrit.plugins.hooks.workflow.action.AddComment; @@ -37,8 +42,20 @@ public class ItsHookModule extends FactoryModule { + private final String pluginName; + private final PluginConfigFactory pluginCfgFactory; + + public ItsHookModule(@PluginName String pluginName, + PluginConfigFactory pluginCfgFactory) { + this.pluginName = pluginName; + this.pluginCfgFactory = pluginCfgFactory; + } + @Override protected void configure() { + bind(ProjectConfigEntry.class) + .annotatedWith(Exports.named("enabled")) + .toInstance(new ItsHookEnabledConfigEntry(pluginName, pluginCfgFactory)); bind(ItsConfig.class); DynamicSet.bind(binder(), ChangeListener.class).to( GerritHookFilterAddRelatedLinkToChangeId.class);
diff --git a/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsHookEnabledConfigEntry.java b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsHookEnabledConfigEntry.java new file mode 100644 index 0000000..03b7d52 --- /dev/null +++ b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsHookEnabledConfigEntry.java
@@ -0,0 +1,47 @@ +// Copyright (C) 2013 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.hooks.its; + +import com.google.gerrit.server.config.PluginConfig; +import com.google.gerrit.server.config.PluginConfigFactory; +import com.google.gerrit.server.config.ProjectConfigEntry; +import com.google.gerrit.server.project.ProjectState; + +import java.util.Arrays; + +public class ItsHookEnabledConfigEntry extends ProjectConfigEntry { + private final String pluginName; + private final PluginConfigFactory pluginCfgFactory; + + public ItsHookEnabledConfigEntry(String pluginName, + PluginConfigFactory pluginCfgFactory) { + super("Enable " + pluginName + " integration", "false", + Arrays.asList(new String[] {"false", "true", "enforced"}), true); + this.pluginName = pluginName; + this.pluginCfgFactory = pluginCfgFactory; + } + + @Override + public boolean isEditable(ProjectState project) { + for (ProjectState parentState : project.parents()) { + PluginConfig parentCfg = + pluginCfgFactory.getFromProjectConfig(parentState, pluginName); + if ("enforced".equals(parentCfg.getString("enabled"))) { + return false; + } + } + return true; + } +}