Support to enable/disable the RTC integration in the UI

On the ProjectInfoScreen there is now a dropdown list for the
plugin.its-rtc.enabled parameter which offers the values true,
false, enforced and INHERIT. Project owners can change this parameter
and save it. If the RTC integration is enforced by a parent project
the dropdown list is disabled.

Change-Id: I596b137bea044e837ce3d2caa9f2c3c7ebed02a2
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCModule.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCModule.java
index 2eefa6c..78cb4c6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCModule.java
@@ -22,14 +22,18 @@
 import org.slf4j.LoggerFactory;
 
 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.GerritServerConfig;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.config.ProjectConfigEntry;
 import com.google.gerrit.server.git.validators.CommitValidationListener;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 
 import com.googlesource.gerrit.plugins.hooks.its.ItsFacade;
+import com.googlesource.gerrit.plugins.hooks.its.ItsHookEnabledConfigEntry;
 import com.googlesource.gerrit.plugins.hooks.rtc.filters.RTCAddComment;
 import com.googlesource.gerrit.plugins.hooks.rtc.filters.RTCAddRelatedLinkToChangeId;
 import com.googlesource.gerrit.plugins.hooks.rtc.filters.RTCAddRelatedLinkToGitWeb;
@@ -43,12 +47,14 @@
 
   private final String pluginName;
   private final Config gerritConfig;
+  private final PluginConfigFactory pluginCfgFactory;
 
   @Inject
   public RTCModule(@PluginName String pluginName,
-      @GerritServerConfig final Config config) {
+      @GerritServerConfig Config config, PluginConfigFactory pluginCfgFactory) {
     this.pluginName = pluginName;
     this.gerritConfig = config;
+    this.pluginCfgFactory = pluginCfgFactory;
   }
 
   @Override
@@ -57,6 +63,11 @@
       LOG.info("RTC is configured as ITS");
       bind(ItsFacade.class).to(RTCItsFacade.class);
 
+      bind(ProjectConfigEntry.class)
+          .annotatedWith(Exports.named("enabled"))
+          .toInstance(new ItsHookEnabledConfigEntry(
+              pluginName, pluginCfgFactory));
+
       DynamicSet.bind(binder(), CommitValidationListener.class).to(
           ItsValidateComment.class);
 
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index ac8b4a9..65d30a3 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -42,6 +42,12 @@
 a project can enforce the RTC integration for all child projects by
 setting `plugin.its-rtc.enabled` to `enforced`.
 
+On the project info screen there is a dropdown list for the
+`plugin.its-rtc.enabled` parameter which offers the values `true`,
+`false`, `enforced` and `INHERIT`. Project owners can change this
+parameter and save it. If the RTC integration is enforced by a parent
+project the dropdown list is disabled.
+
 The RTC integration can be limited to specific branches by setting
 `plugin.its-rtc.branch`. The branches may be configured using explicit
 branch names, ref patterns, or regular expressions. Multiple branches