Use a simpler named binding for the LocalDiskRepositoryManager

This partly reverts commit 0db559343d648180cb25d340c72f1e479165fb0c
and introduces a simpler named binding using the simple class name
of the LocalDiskRepositoryManager.

Allows to have a zero-configuration chaining between different
repository managers, using the optional binding technique.

Also, does not require anymore changes in other dependent plugins
such as multi-site and high-availability, because the absence of a
named binding is already managed with a fallback to the previous
legacy binding to the LocalDiskRepositoryManager class.

Bump the global-refdb version to 3.4.4.4.

Change-Id: I95ca0c2f9281384d29494c4594699a1c1add29ca
diff --git a/pom.xml b/pom.xml
index 55f29fd..22ea4e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>com.gerritforge</groupId>
     <artifactId>global-refdb</artifactId>
-    <version>3.4.4.3</version>
+    <version>3.4.4.4</version>
     <packaging>jar</packaging>
 
     <name>global-refdb</name>
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
index 0cb78b6..a607cdc 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbConfiguration.java
@@ -23,8 +23,6 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Multimap;
 import com.google.common.collect.MultimapBuilder;
-import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import java.io.IOException;
 import java.util.List;
 import org.eclipse.jgit.errors.ConfigInvalidException;
@@ -43,7 +41,6 @@
   private final Supplier<Projects> projects;
   private final Supplier<SharedRefDatabase> sharedRefDb;
   private final String pluginName;
-  private final String localDiskRepositoryManagerClassName;
 
   /**
    * Constructs a {@code SharedRefDbConfiguration} by providing the libModule name and a 'config'
@@ -57,13 +54,6 @@
     projects = memoize(() -> new Projects(lazyCfg));
     sharedRefDb = memoize(() -> new SharedRefDatabase(lazyCfg));
     this.pluginName = pluginName;
-    localDiskRepositoryManagerClassName =
-        lazyCfg
-            .get()
-            .getString(
-                SharedRefDatabase.SECTION,
-                null,
-                SharedRefDatabase.LOCAL_DISK_REPOSITORY_MANAGER_CLASS);
   }
 
   /**
@@ -102,15 +92,6 @@
     return ofInstance(config);
   }
 
-  public Class<? extends GitRepositoryManager> getLocalRepositoryManager()
-      throws ClassNotFoundException {
-    if (localDiskRepositoryManagerClassName != null) {
-      return (Class<? extends GitRepositoryManager>)
-          Class.forName(localDiskRepositoryManagerClassName);
-    }
-    return LocalDiskRepositoryManager.class;
-  }
-
   /**
    * Represents the global refdb configuration, which is computed by reading the 'ref-database'
    * section from the configuration file of this library's consumers. It allows to specify whether
@@ -121,8 +102,6 @@
     public static final String SECTION = "ref-database";
     public static final String ENABLE_KEY = "enabled";
     public static final String SUBSECTION_ENFORCEMENT_RULES = "enforcementRules";
-    public static final String LOCAL_DISK_REPOSITORY_MANAGER_CLASS =
-        "localDiskRepositoryManagerClass";
 
     private final boolean enabled;
     private final Multimap<EnforcePolicy, String> enforcementRules;
diff --git a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
index da277e2..0e21338 100644
--- a/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
+++ b/src/main/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManager.java
@@ -14,9 +14,11 @@
 
 package com.gerritforge.gerrit.globalrefdb.validation;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import com.google.gerrit.server.git.RepositoryCaseMismatchException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -48,9 +50,11 @@
    */
   public static final String IGNORED_REFS = "ignored_refs";
 
-  public static final String LOCAL_DISK_REPOSITORY_MANAGER = "local_disk_repository_manager";
+  @Inject(optional = true)
+  @Named("LocalDiskRepositoryManager")
+  private GitRepositoryManager gitRepositoryManager;
 
-  private final GitRepositoryManager gitRepositoryManager;
+  private final LocalDiskRepositoryManager localDiskRepositoryManager;
   private final SharedRefDbRepository.Factory sharedRefDbRepoFactory;
 
   @Inject(optional = true)
@@ -69,9 +73,9 @@
   @Inject
   public SharedRefDbGitRepositoryManager(
       SharedRefDbRepository.Factory sharedRefDbRepoFactory,
-      @Named(LOCAL_DISK_REPOSITORY_MANAGER) GitRepositoryManager localDiskRepositoryManager) {
+      LocalDiskRepositoryManager localDiskRepositoryManager) {
     this.sharedRefDbRepoFactory = sharedRefDbRepoFactory;
-    this.gitRepositoryManager = localDiskRepositoryManager;
+    this.localDiskRepositoryManager = localDiskRepositoryManager;
   }
 
   /**
@@ -85,7 +89,7 @@
   @Override
   public Repository openRepository(Project.NameKey name)
       throws RepositoryNotFoundException, IOException {
-    return wrap(name, gitRepositoryManager.openRepository(name));
+    return wrap(name, repositoryManager().openRepository(name));
   }
 
   /**
@@ -101,15 +105,19 @@
   @Override
   public Repository createRepository(Project.NameKey name)
       throws RepositoryCaseMismatchException, RepositoryNotFoundException, IOException {
-    return wrap(name, gitRepositoryManager.createRepository(name));
+    return wrap(name, repositoryManager().createRepository(name));
   }
 
   @Override
   public SortedSet<Project.NameKey> list() {
-    return gitRepositoryManager.list();
+    return repositoryManager().list();
   }
 
   private Repository wrap(Project.NameKey projectName, Repository projectRepo) {
     return sharedRefDbRepoFactory.create(projectName.get(), projectRepo, ignoredRefs);
   }
+
+  private GitRepositoryManager repositoryManager() {
+    return MoreObjects.firstNonNull(gitRepositoryManager, localDiskRepositoryManager);
+  }
 }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
index 34f39c8..a6c7667 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/SharedRefDbGitRepositoryManagerTest.java
@@ -19,7 +19,6 @@
 
 import com.gerritforge.gerrit.globalrefdb.validation.dfsrefdb.RefFixture;
 import com.google.common.collect.ImmutableSet;
-import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
@@ -121,10 +120,7 @@
                 .annotatedWith(Names.named(SharedRefDbGitRepositoryManager.IGNORED_REFS))
                 .toInstance(ignoredRefs);
             bind(SharedRefDbRepository.Factory.class).toInstance(sharedRefDbRepositoryFactoryMock);
-            bind(GitRepositoryManager.class)
-                .annotatedWith(
-                    Names.named(SharedRefDbGitRepositoryManager.LOCAL_DISK_REPOSITORY_MANAGER))
-                .toInstance(localDiskRepositoryManagerMock);
+            bind(LocalDiskRepositoryManager.class).toInstance(localDiskRepositoryManagerMock);
           }
         });
   }
diff --git a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
index eb84739..b1af798 100644
--- a/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
+++ b/src/test/java/com/gerritforge/gerrit/globalrefdb/validation/ValidationModuleTest.java
@@ -23,8 +23,6 @@
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.extensions.config.FactoryModule;
 import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.LocalDiskRepositoryManager;
 import com.google.inject.*;
 import com.google.inject.name.Names;
 import java.util.Optional;
@@ -107,9 +105,6 @@
       bind(SharedRefDbConfiguration.class).toInstance(cfg);
       bind(ValidationMetrics.class);
 
-      bind(GitRepositoryManager.class)
-          .annotatedWith(Names.named(SharedRefDbGitRepositoryManager.LOCAL_DISK_REPOSITORY_MANAGER))
-          .to(LocalDiskRepositoryManager.class);
       bind(SharedRefDbGitRepositoryManager.class);
       bind(SharedRefEnforcement.class).to(DefaultSharedRefEnforcement.class).in(Scopes.SINGLETON);
     }