Add a BatchModule, allowing this plugin to be used in the reindexer

Extract the predicate provider and the module into their own module, and
add a binding as "Gerrit-BatchModule".

Change-Id: I91fd6aed51b1a39541a65d4a87b65eeedad3ac09
diff --git a/BUILD b/BUILD
index 5e3964f..b5f061f 100644
--- a/BUILD
+++ b/BUILD
@@ -36,6 +36,7 @@
         "Gerrit-PluginName: find-owners",
         "Gerrit-ReloadMode: restart",
         "Gerrit-Module: com.googlesource.gerrit.plugins.findowners.Module",
+        "Gerrit-BatchModule: com.googlesource.gerrit.plugins.findowners.PredicateModule",
         "Implementation-Title: Find-Owners plugin",
         "Implementation-URL: https://gerrit.googlesource.com/plugins/find-owners",
     ],
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/Module.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/Module.java
index 84f1f02..aab4097 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/findowners/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/Module.java
@@ -17,34 +17,14 @@
 import static com.google.gerrit.server.change.ChangeResource.CHANGE_KIND;
 import static com.google.gerrit.server.change.RevisionResource.REVISION_KIND;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
 import com.google.gerrit.extensions.webui.JavaScriptPlugin;
 import com.google.gerrit.extensions.webui.WebUiPlugin;
-import com.google.gerrit.server.config.PluginConfigFactory;
-import com.google.gerrit.server.rules.PredicateProvider;
 import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
 
 /** find-owners plugin module */
 public class Module extends AbstractModule {
-  /** Prolog Predicate Provider. */
-  static class FindOwnersProvider implements PredicateProvider {
-
-    @Inject
-    public FindOwnersProvider(@PluginName String pluginName, PluginConfigFactory configFactory) {
-      Config.setVariables(pluginName, configFactory);
-      Cache.getInstance(); // Create a single Cache.
-    }
-
-    @Override
-    public ImmutableSet<String> getPackages() {
-      return ImmutableSet.of(Config.PROLOG_NAMESPACE);
-    }
-  }
-
   @Override
   protected void configure() {
     install(OwnersValidator.module());
@@ -58,6 +38,7 @@
         });
     DynamicSet.bind(binder(), WebUiPlugin.class)
         .toInstance(new JavaScriptPlugin(Config.PLUGIN_NAME + ".js"));
-    DynamicSet.bind(binder(), PredicateProvider.class).to(FindOwnersProvider.class);
+
+    install(new PredicateModule());
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/findowners/PredicateModule.java b/src/main/java/com/googlesource/gerrit/plugins/findowners/PredicateModule.java
new file mode 100644
index 0000000..d0fb040
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/findowners/PredicateModule.java
@@ -0,0 +1,46 @@
+// Copyright (C) 2018 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.findowners;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.rules.PredicateProvider;
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+
+/** provides the Prolog predicate, even in a batch mode */
+public class PredicateModule extends AbstractModule {
+  /** Prolog Predicate Provider. */
+  static class FindOwnersProvider implements PredicateProvider {
+
+    @Inject
+    public FindOwnersProvider(@PluginName String pluginName, PluginConfigFactory configFactory) {
+      Config.setVariables(pluginName, configFactory);
+      Cache.getInstance(); // Create a single Cache.
+    }
+
+    @Override
+    public ImmutableSet<String> getPackages() {
+      return ImmutableSet.of(Config.PROLOG_NAMESPACE);
+    }
+  }
+
+  @Override
+  protected void configure() {
+    DynamicSet.bind(binder(), PredicateProvider.class).to(FindOwnersProvider.class);
+  }
+}